def do_math_for_single_stock(all_simulations, moving_day_average, number_of_days, stock, mode): print('Mode: ' + mode) net_profits = [] # The index for each day. We start it at day 5. todays_index = len(stock.get_data()) - 0 - 1 - 4 - (len(stock.get_data()) - number_of_days) tomorrows_index = len(stock.get_data()) - 0 - 1 - 5 - (len(stock.get_data()) - number_of_days) yesterdays_index = len(stock.get_data()) - 0 - 1 - 3 - (len(stock.get_data()) - number_of_days) counter_index = 0 while tomorrows_index != 0: debug.logger.log('Doing math for day: ' + str(stock.get_data()[todays_index].get_date())) #debug.logger.log('Tomorrow is: ' + str(stock.get_data()[tomorrows_index].get_date())) # Calculate the moving average. close_moving_average = 0.0 for i in range(0, moving_day_average): current_index = todays_index + i close_moving_average += stock.get_data()[current_index].get_close() debug.logger.log(stock.get_data()[current_index].to_string()) close_moving_average /= 5 debug.logger.log('The moving average is: ' + str(close_moving_average)) if mode == 'LONG': # Check if today's close is above the moving average. If it is then we do the math. debug.logger.log('I am checking if today\'s close is above the moving average.') if stock.get_data()[todays_index].get_close() > close_moving_average: debug.logger.log('Today\'s close is larger than the close moving average. Doing the math...') do_sub_math_for_single_day(net_profits, yesterdays_index, todays_index, tomorrows_index, stock, mode) elif mode == 'SHORT': debug.logger.log('I am checking if today\'s close is below the moving average.') # Check if today's close is below the moving average. If it is then we do the math. if stock.get_data()[todays_index].get_close() < close_moving_average: debug.logger.log('Today\'s close is below the moving average. Doing the math...') do_sub_math_for_single_day(net_profits, yesterdays_index, todays_index, tomorrows_index, stock, mode) else: if stock.get_data()[todays_index].get_close() > close_moving_average: do_sub_math_for_single_day(net_profits, yesterdays_index, todays_index, tomorrows_index, stock, 'LONG') elif stock.get_data()[todays_index].get_close() < close_moving_average: do_sub_math_for_single_day(net_profits, yesterdays_index, todays_index, tomorrows_index, stock, 'SHORT') counter_index += 1 todays_index = len(stock.get_data()) - 0 - 1 - 4 - counter_index - (len(stock.get_data()) - number_of_days) tomorrows_index = len(stock.get_data()) - 0 - 1 - 5 - counter_index - (len(stock.get_data()) - number_of_days) yesterdays_index = len(stock.get_data()) - 0 - 1 - 3 - counter_index - (len(stock.get_data()) - number_of_days) # Print out % profits. if len(net_profits) != 0: print('Net profits: ' + str(stock_math.average_fast(net_profits))) if len(net_profits) != 0: all_simulations.attempt_to_add_best(stock.get_name(), stock_math.average_fast(net_profits))
def do_sub_math_for_single_day(net_profits, yesterdays_index, todays_index, tomorrows_index, stock, mode): # Calculate a list of the percentage difference between yesterday's close price and today's low. percentage_difference_between_yesterdays_close_and_todays_low = [] percentage_difference_between_yesterdays_close_and_todays_high = [] for i in range(0, 5): current_index = len(stock.get_data()) - i - 1 past_index = len(stock.get_data()) - i - 2 local_low_calculation = stock_math.percentage_difference_fast(stock.get_data()[past_index].get_close(), stock.get_data()[current_index].get_low()) local_high_calculation = stock_math.percentage_difference_fast(stock.get_data()[past_index].get_close(), stock.get_data()[current_index].get_high()) percentage_difference_between_yesterdays_close_and_todays_low.append(local_low_calculation) percentage_difference_between_yesterdays_close_and_todays_high.append(local_high_calculation) average_for_low = stock_math.average_fast(percentage_difference_between_yesterdays_close_and_todays_low) average_for_high = stock_math.average_fast(percentage_difference_between_yesterdays_close_and_todays_high) #print('Close moving average: ' + '\t' + str(close_moving_average)) buy_price = stock_math.buy_price_fast(average_for_low, stock.get_data()[todays_index].get_close()) short_price = stock_math.short_price_fast(average_for_high, stock.get_data()[todays_index].get_close()) debug.logger.log('Buy price: ' + str(buy_price)) debug.logger.log('Short price: ' + str(short_price)) if mode == 'LONG': # If the buy price is above tomorrow's low, then we buy the stock tomorrow. if buy_price > stock.get_data()[tomorrows_index].get_low(): #net_profits.append(stock_math.generic_percenatage_difference(buy_price, stock.get_data()[tomorrows_index].get_close())) local_net_profit = stock_math.generic_percenatage_difference(buy_price, stock.get_data()[tomorrows_index].get_close()) if local_net_profit <= -4.0: net_profits.append(-4.0) else: net_profits.append(local_net_profit) elif mode == 'SHORT': # If the short price is below tomorrow's #local_net_profit = stock_math.generic_percenatage_difference(stock.get_data()[tomorrows_index].get_close(), short_price) if short_price < stock.get_data()[tomorrows_index].get_high(): local_net_profit = stock_math.generic_percenatage_difference(stock.get_data()[tomorrows_index].get_close(), short_price) if local_net_profit <= -4.0: net_profits.append(-4.0) else: net_profits.append(local_net_profit) else: if buy_price > stock.get_data()[tomorrows_index].get_low(): local_net_profit = stock_math.generic_percenatage_difference(buy_price, stock.get_data()[tomorrows_index].get_close()) if local_net_profit <= -4.0: net_profits.append(-4.0) else: net_profits.append(local_net_profit) elif short_price < stock.get_data()[tomorrows_index].get_high(): local_net_profit = stock_math.generic_percenatage_difference(stock.get_data()[tomorrows_index].get_close(), short_price) if local_net_profit <= 4.0: net_profits.append(-4.0) else: net_profits.append(stock_math.generic_percenatage_difference(stock.get_data()[tomorrows_index].get_close(), short_price))