コード例 #1
0
    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
コード例 #2
0
ファイル: benchmark.py プロジェクト: Trikiahmed/CityDashboard
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)
コード例 #3
0
ファイル: app.py プロジェクト: skyle97/CityDashboard
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))
コード例 #4
0
    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
コード例 #5
0
    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