예제 #1
0
    def run(self):

        # Fetch and select timeseries.
        self.ts = pf.fetch_timeseries(self.symbol,
                                      use_cache=self.options['use_cache'])
        self.ts = pf.select_tradeperiod(self.ts,
                                        self.start,
                                        self.end,
                                        use_adj=self.options['use_adj'])

        # Add technical indicator: 200 day sma regime filter.
        self.ts['regime'] = pf.CROSSOVER(self.ts,
                                         timeperiod_fast=1,
                                         timeperiod_slow=200)

        # Add technical indicators: X day high, and X day low.
        self.ts['period_high'] = pd.Series(self.ts.close).rolling(
            self.options['period']).max()
        self.ts['period_low'] = pd.Series(self.ts.close).rolling(
            self.options['period']).min()

        # Finalize timeseries.
        self.ts, self.start = pf.finalize_timeseries(self.ts, self.start)

        # Create tlog and dbal objects.
        self.tlog = pf.TradeLog(self.symbol)
        self.dbal = pf.DailyBal()

        # Run algo, get logs, and get stats.
        self._algo()
        self._get_logs()
        self._get_stats()
예제 #2
0
    def run(self):
        self.ts = pf.fetch_timeseries(self.symbol)
        self.ts = pf.select_tradeperiod(self.ts, self.start, self.end, use_adj=True)

        # Add technical indicator: 200 sma regime filter
        self.ts['regime'] = \
            pf.CROSSOVER(self.ts, timeperiod_fast=1, timeperiod_slow=200)
        
        # Add technical indicator: instrument risk, i.e. annual std
        self.ts['vola'] = \
            pf.VOLATILITY(self.ts, lookback=20, time_frame='yearly')

        # Add technical indicator: X day sma
        sma = SMA(self.ts, timeperiod=self.sma)
        self.ts['sma'] = sma

        # Add technical indicator: X day high, and X day low
        period_high = pd.Series(self.ts.close).rolling(self.period).max()
        period_low = pd.Series(self.ts.close).rolling(self.period).min()
        self.ts['period_high'] = period_high
        self.ts['period_low'] = period_low
        
        self.ts, self.start = pf.finalize_timeseries(self.ts, self.start)
        
        self.tlog = pf.TradeLog(self.symbol)
        self.dbal = pf.DailyBal()

        self._algo()
예제 #3
0
    def run(self):
        self.ts = pf.fetch_timeseries(self.symbol)
        self.ts = pf.select_tradeperiod(self.ts, self.start,
                                         self.end, self.use_adj)
        
        # Add technical indicator: day sma regime filter
        self.ts['regime'] = \
            pf.CROSSOVER(self.ts, timeperiod_fast=1, timeperiod_slow=self.sma_period,
                         band=self.percent_band)
        
        self.ts, self.start = pf.finalize_timeseries(self.ts, self.start)

        self.tlog = pf.TradeLog(self.symbol)
        self.dbal = pf.DailyBal()

        self._algo()
예제 #4
0
    def run(self):
        self.ts = pf.fetch_timeseries(self.symbol)
        self.ts = pf.select_tradeperiod(self.ts, self.start, self.end)

        # add regime filter
        self.ts['regime'] = \
            pf.CROSSOVER(self.ts,
                         timeperiod_fast=self.timeperiod_fast,
                         timeperiod_slow=self.timeperiod_slow,
                         band=self.percent_band)

        self.ts, self.start = pf.finalize_timeseries(self.ts, self.start)

        self.tlog = pf.TradeLog(self.symbol)
        self.dbal = pf.DailyBal()

        self._algo()
예제 #5
0
    def run(self):
        self._ts = pf.fetch_timeseries(self._symbol)
        self._ts = pf.select_tradeperiod(self._ts, self._start,
                                         self._end, self._use_adj)       

        # Add technical indicator:  day sma
        sma = SMA(self._ts, timeperiod=self._sma_period)
        self._ts['sma'] = sma          

        self._tlog = pf.TradeLog()
        self._dbal = pf.DailyBal()
        
        # add S&P500 200 sma regime filter
        ts = pf.fetch_timeseries('^GSPC')
        ts = pf.select_tradeperiod(ts, self._start, self._end, False) 
        self._ts['regime'] = \
            pf.CROSSOVER(ts, timeperiod_fast=1, timeperiod_slow=200)

        self._algo()
예제 #6
0
    def run(self):
        self.portfolio = pf.Portfolio()
        self.ts = self.portfolio.fetch_timeseries(
            self.symbols,
            self.start,
            self.end,
            use_cache=self.options['use_cache'],
            use_adj=self.options['use_adj'])

        # Add S&P500 200 sma regime filter
        ts = pf.fetch_timeseries('^GSPC')
        ts = pf.select_tradeperiod(ts, self.start, self.end, use_adj=False)
        self.ts['regime'] = \
            pf.CROSSOVER(ts, timeperiod_fast=1, timeperiod_slow=200, band=3.5)

        # Add calendar columns
        self.ts = self.portfolio.calendar(self.ts)

        # Add technical indicator Momenteum for all symbols in portfolio.
        def _momentum(ts, ta_param, input_column):
            return pf.MOMENTUM(ts,
                               lookback=ta_param,
                               time_frame='monthly',
                               price=input_column,
                               prevday=False)

        lookbacks = range(3, 18 + 1)
        for lookback in lookbacks:
            self.ts = self.portfolio.add_technical_indicator(
                self.ts,
                ta_func=_momentum,
                ta_param=lookback,
                output_column_suffix='mom' + str(lookback),
                input_column_suffix='close')

        self.ts, self.start = self.portfolio.finalize_timeseries(
            self.ts, self.start)
        self.portfolio.init_trade_logs(self.ts)

        self._algo()
        self._get_logs()
        self._get_stats()
예제 #7
0
    def run(self):
        self.ts = pf.fetch_timeseries(self.symbol)
        self.ts = pf.select_tradeperiod(self.ts, self.start, self.end)

        # add regime filter
        self.ts['regime'] = \
            pf.CROSSOVER(self.ts,
                         timeperiod_fast=self.timeperiod_fast,
                         timeperiod_slow=self.timeperiod_slow,
                         band=self.percent_band)

        # Add technical indicator: volatility
        self.ts['vola'] = pf.VOLATILITY(self.ts)

        self.ts, self.start = pf.finalize_timeseries(self.ts, self.start)

        self.tlog = pf.TradeLog(self.symbol)
        self.dbal = pf.DailyBal()

        self._algo()
예제 #8
0
    def run(self):

        # Fetch and selct timeseries
        self.ts = pf.fetch_timeseries(self.symbol,
                                      use_cache=self.options['use_cache'])
        self.ts = pf.select_tradeperiod(self.ts, self.start, self.end,
                                        self.options['use_adj'])

        # Add technical indicator: day sma regime filter.
        self.ts['regime'] = \
            pf.CROSSOVER(self.ts, timeperiod_fast=50, timeperiod_slow=200)

        # Finalize timeseries
        self.ts, self.start = pf.finalize_timeseries(self.ts, self.start)

        self.tlog = pf.TradeLog(self.symbol)
        self.dbal = pf.DailyBal()

        self._algo()
        self._get_logs()
        self._get_stats()
예제 #9
0
    def run(self):
        self.ts = pf.fetch_timeseries(self.symbol)
        self.ts = pf.select_tradeperiod(self.ts,
                                        self.start,
                                        self.end,
                                        use_adj=False)

        # Add technical indicator: 200 sma regime filter
        self.ts['regime'] = \
            pf.CROSSOVER(self.ts, timeperiod_fast=1, timeperiod_slow=200)

        # Add technical indicator: X day high, and X day low
        period_high = pd.Series(self.ts.close).rolling(self.period).max()
        period_low = pd.Series(self.ts.close).rolling(self.period).min()
        self.ts['period_high'] = period_high
        self.ts['period_low'] = period_low

        self.ts, self.start = pf.finalize_timeseries(self.ts, self.start)

        self.tlog = pf.TradeLog(self.symbol)
        self.dbal = pf.DailyBal()

        self._algo()
예제 #10
0
    def run(self):
        self.ts = pf.fetch_timeseries(self.symbol,
                                      use_cache=self.options['use_cache'])
        self.ts = pf.select_tradeperiod(self.ts, self.start, self.end,
                                        self.options['use_adj'])

        # Add technical indicator:  day sma
        self.ts['sma'] = SMA(self.ts, timeperiod=self.options['sma_period'])

        # add S&P500 200 sma regime filter
        ts = pf.fetch_timeseries('^GSPC')
        ts = pf.select_tradeperiod(ts, self.start, self.end, use_adj=False)
        self.ts['regime'] = \
            pf.CROSSOVER(ts, timeperiod_fast=1, timeperiod_slow=200)

        self.ts, self.start = pf.finalize_timeseries(self.ts, self.start)

        self.tlog = pf.TradeLog(self.symbol)
        self.dbal = pf.DailyBal()

        self._algo()
        self._get_logs()
        self._get_stats()
예제 #11
0
 def _crossover(ts, ta_param, input_column):
     return pf.CROSSOVER(ts,
                         timeperiod_fast=1,
                         timeperiod_slow=200,
                         price=input_column,
                         prevday=False)