示例#1
0
    def test_strategy(self, indicator, params=None, data=None):
        # DATA
        if data is None:
            stock = pd.read_csv('../Data/bitcoin_histo.csv', sep=';')
            pxlast_csv_str = stock['PX_LAST']
            pxlast = pd.to_numeric(pxlast_csv_str)
            dates_csv_str = stock['Date']
            dates = pd.to_datetime(dates_csv_str, dayfirst=True)
        else:
            # dates = pd.Series(data[0].values)
            pxlast = data  # pd.Series(data[1].values)

        # COMPUTATIONS

        if indicator == 'macd':
            ss = params[0]
            ls = params[1]
            sf = params[2]
            macd, macd_ema9 = Indicators.macd(pxlast,
                                              short_span=ss,
                                              long_span=ls,
                                              smoothing_factor=sf)
            returns = pxlast.pct_change(1)
            invested = Helpers.indicators_to_investment(indicator_name='macd',
                                                        data=(macd, macd_ema9))
        elif indicator == 'ema':
            ema_difference = Indicators.ema_diff(pxlast,
                                                 long_span=26,
                                                 short_span=12)
            returns = pxlast.pct_change(1)
            invested = Helpers.indicators_to_investment(
                indicator_name='ema_diff', data=ema_difference)
        elif indicator == 'macd_rsi':
            macd, macd_ema9 = Indicators.macd(pxlast,
                                              long_span=26,
                                              short_span=12,
                                              smoothing_factor=9)
            rsi = Indicators.RSI(pxlast, period=14)
            invested = Helpers.indicators_to_investment(
                indicator_name='macd_rsi', data=(macd, macd_ema9, rsi))

        # PROFITABILITY
        total_profit, strat_profit = self.profitability(returns, invested)

        # return strat_profit.iloc[-1].values[0]

        # PLOT
        data_plot = pd.concat([total_profit, strat_profit], axis=1)
        data_plot.plot()
        plt.show()