def testPolicy_Qstick(self, symbol, sd, ed, sv): df_trades = pd.DataFrame({'Date':'','trade':''}, index=[]) options = [1000, -1000, 0] symbols = [] symbols.append(symbol) data = util.get_data(symbols = symbols, dates= pd.date_range(sd,ed)) data = pd.DataFrame(data[symbol]) data_pct = data.pct_change() price_indicator, qstick = indicator.main(symbol, sd, ed) price_indicator['up_sale'] = price_indicator['upper']/price_indicator['price'] price_indicator['down_buy'] = price_indicator['lower']/price_indicator['price'] length = len(data) threshold = 0.8 for i in range(20,length): sale_indicator = price_indicator['up_sale'].iloc[i] buy_indicator = price_indicator['down_buy'].iloc[i] indicator_qstick = qstick['Qstick'] .iloc[i] # change = ratio.iloc[i][0] date = data.iloc[i].name # date = date_lst[i] holding = df_trades.trade.sum() if holding == 0: if indicator_qstick < 0: trade = options[0] df_trades = df_trades.append({'Date':date, 'trade': trade}, ignore_index=True) elif indicator_qstick > 0: trade = options[1] df_trades = df_trades.append({'Date':date, 'trade': trade}, ignore_index=True) else: continue else: # if indicator_volume > 1 and holding < 0: if buy_indicator > threshold and holding <0: trade = options[0] + 1000 df_trades = df_trades.append({'Date': date, 'trade': trade}, ignore_index=True) elif sale_indicator < threshold and holding > 0: trade = options[1] - 1000 df_trades = df_trades.append({'Date': date, 'trade': trade}, ignore_index=True) elif indicator_qstick < 0 and holding < 0: # buy 1000 shares, long 1000 shares trade = options[0] + 1000 df_trades = df_trades.append({'Date': date, 'trade': trade}, ignore_index=True) elif indicator_qstick < 0 and holding < 0 : # buy 1000 shares, long 1000 shares trade = options[0] + 1000 df_trades = df_trades.append({'Date':date, 'trade': trade}, ignore_index=True) elif indicator_qstick > 0 and holding >0: # sell 1000 shares, short 1000 shares trade = options[1] - 1000 df_trades = df_trades.append({'Date':date, 'trade': trade}, ignore_index=True) else: continue return df_trades
def benchmark(code, comparator): """Compares indicators of similar cities. Benchmark can be maid on either population, budget or location similarity """ if comparator=="pop": cities = similar_pop(code) elif comparator=="budget": cities = similar_budget(code) elif comparator=="location": cities = similar_loc(code) tab = [indicator.main(code)[0]] for city in cities: col_city = indicator.main(city) tab.append(col_city[1]) return(tab)
def process(function, argument): code = get_code(argument) if code == None: raise InputError if function == 'indicator': print(indicator.main(code)) elif function == 'benchmark': print(benchmark.main(code))
def testPolicy_only_bands(self, symbol, sd, ed, sv): df_trades = pd.DataFrame({'Date':'','trade':''}, index=[]) options = [1000, -1000, 0] symbols = [] symbols.append(symbol) data = util.get_data(symbols = symbols, dates= pd.date_range(sd,ed)) data = pd.DataFrame(data['JPM']) data_pct = data.pct_change() price_indicator, what = indicator.main(symbol, sd, ed) price_indicator['up_sale'] = price_indicator['upper']/price_indicator['price'] price_indicator['down_buy'] = price_indicator['lower']/price_indicator['price'] length = len(data) threshold = 1 for i in range(20,length): sale_indicator = price_indicator['up_sale'].iloc[i] buy_indicator = price_indicator['down_buy'].iloc[i] date = data.iloc[i].name holding = df_trades.trade.sum() if holding == 0: if buy_indicator > threshold: trade = options[0] df_trades = df_trades.append({'Date':date, 'trade': trade}, ignore_index=True) elif sale_indicator < threshold: trade = options[1] df_trades = df_trades.append({'Date':date, 'trade': trade}, ignore_index=True) else: continue else: if buy_indicator > threshold and holding < 0 : # buy 1000 shares, long 1000 shares trade = options[0] + 1000 df_trades = df_trades.append({'Date':date, 'trade': trade}, ignore_index=True) elif sale_indicator < threshold and holding >0: # sell 1000 shares, short 1000 shares trade = options[1] - 1000 df_trades = df_trades.append({'Date':date, 'trade': trade}, ignore_index=True) else: continue # continue return df_trades
def testPolicy_nvi(self, symbol, sd, ed, sv): df_trades = pd.DataFrame({'Date':'','trade':''}, index=[]) options = [1000, -1000, 0] symbols = [] symbols.append(symbol) data = util.get_data(symbols = symbols, dates= pd.date_range(sd,ed)) data = pd.DataFrame(data['JPM']) data_pct = data.pct_change() price_indicator, volume_indicator = indicator.main(symbol, sd, ed) price_indicator['up_sale'] = price_indicator['upper']/price_indicator['price'] price_indicator['down_buy'] = price_indicator['lower']/price_indicator['price'] volume_indicator['volume_indicator_pvi'] = volume_indicator['PVI'] / volume_indicator['es_PVI'] volume_indicator['volume_indicator_nvi'] = volume_indicator['NVI'] / volume_indicator['es_NVI'] # SMA_change = SMA.pct_change().shift(-5) # print price_indicator.head() # date_lst = data.index length = len(data) buy_threshold = 1 sell_threshold = 1 # depends on individual risk preference. # when buy_threshold = 0.6 # sell_threshold = 0.3 # performance is pretty good # the threshold depends on the volality for i in range(0,length): # print price_indicator['up_sale'].iloc[i] # sale_indicator = price_indicator['up_sale'].iloc[i] # buy_indicator = price_indicator['down_buy'].iloc[i] indicator_volume = volume_indicator['volume_indicator_pvi'] .iloc[i] # change = ratio.iloc[i][0] date = data.iloc[i].name # date = date_lst[i] holding = df_trades.trade.sum() if holding == 0: if indicator_volume <1: trade = options[0] df_trades = df_trades.append({'Date':date, 'trade': trade}, ignore_index=True) # elif sale_indicator > sell_threshold: # trade = options[1] # df_trades = df_trades.append({'Date':date, 'trade': trade}, ignore_index=True) else: trade = options[1] df_trades = df_trades.append({'Date':date, 'trade': trade}, ignore_index=True) # continue else: if indicator_volume <1 and holding < 0: # if buy_indicator > buy_threshold and holding < 0 : # buy 1000 shares, long 1000 shares trade = options[0] + 1000 df_trades = df_trades.append({'Date':date, 'trade': trade}, ignore_index=True) # elif sale_indicator > sell_threshold and holding >0: # # sell 1000 shares, short 1000 shares # trade = options[1] - 1000 # df_trades = df_trades.append({'Date':date, 'trade': trade}, ignore_index=True) elif indicator_volume >1 and holding > 0: # continue trade = options[1] - 1000 df_trades = df_trades.append({'Date': date, 'trade': trade}, ignore_index=True) else: continue # continue return df_trades