def __init__(self, strategy, feed, instrument, **kwargs): super(atr_signal, self).__init__(strategy, feed, instrument) self.set_member('period',20,kwargs) self.atr= atr.ATR(feed[instrument],self.period) self.plot_init(True) pass
def testInvalidDataSeries(self): with self.assertRaisesRegexp( Exception, "barDataSeries must be a dataseries.bards.BarDataSeries instance" ): ds = dataseries.SequenceDataSeries() atr.ATR(ds, 14, True)
def __init__(self, feed, instrument, exitDays, multiplier): super(TestStrat, self).__init__(feed, cash_or_brk=100000) self.exitDays = exitDays self.multiplier = multiplier self.STRATNAME = "Spike" self.__instrument = instrument # We'll use adjusted close values, if available, instead of regular close values. if feed.barsHaveAdjClose(): self.setUseAdjustedValues(True) self.barDS = self.getFeed().getDataSeries(self.__instrument) self.priceDS = self.getFeed().getDataSeries( self.__instrument).getPriceDataSeries() self.volumeDS = self.getFeed().getDataSeries( self.__instrument).getVolumeDataSeries() self.atr = atr.ATR(self.barDS, 20) self.volumeSma = ma.SMA(self.volumeDS, 20) self.__longPos = None self.__shortPos = None self.getBroker().getFillStrategy().setVolumeLimit(None) # hack / CARL
def __init__(self, feed, instrument): super(MyStrategy, self).__init__(feed) self.__instrument = instrument ds = feed.getDataSeries(instrument=instrument, freq=barcls.Frequency.DAY) self.atr20 = ptatr.ATR(ds, period=20, maxLen=100) pds = feed[instrument, barcls.Frequency.DAY].getCloseDataSeries() self.ma10 = ptma.SMA(pds, period=10, maxLen=30) self.ma20 = ptma.SMA(pds, period=20, maxLen=60) self.ma58 = ptma.SMA(pds, period=58, maxLen=150) self.ma200 = ptma.SMA(pds, period=200, maxLen=250)
def testStockChartsATR(self): # Test data from http://stockcharts.com/help/doku.php?id=chart_school:technical_indicators:average_true_range_a high = [48.70, 48.72, 48.90, 48.87, 48.82, 49.05, 49.20, 49.35, 49.92, 50.19, 50.12, 49.66, 49.88, 50.19, 50.36, 50.57, 50.65, 50.43, 49.63, 50.33, 50.29, 50.17, 49.32, 48.50, 48.32, 46.80, 47.80, 48.39, 48.66, 48.79] low = [47.790, 48.140, 48.390, 48.370, 48.240, 48.635, 48.940, 48.860, 49.500, 49.870, 49.200, 48.900, 49.430, 49.725, 49.260, 50.090, 50.300, 49.210, 48.980, 49.610, 49.200, 49.430, 48.080, 47.640, 41.550, 44.283, 47.310, 47.200, 47.900, 47.730] close = [48.160, 48.610, 48.750, 48.630, 48.740, 49.030, 49.070, 49.320, 49.910, 50.130, 49.530, 49.500, 49.750, 50.030, 50.310, 50.520, 50.410, 49.340, 49.370, 50.230, 49.238, 49.930, 48.430, 48.180, 46.570, 45.410, 47.770, 47.720, 48.620, 47.850] expected = [None, None, None, None, None, None, None, None, None, None, None, None, None, 0.56, 0.59, 0.59, 0.57, 0.62, 0.62, 0.64, 0.67, 0.69, 0.78, 0.78, 1.21, 1.30, 1.38, 1.37, 1.34, 1.32] # Build a bar dataseries using the test data. barDataSeries = bards.BarDataSeries() atrDS = atr.ATR(barDataSeries, 14) now = datetime.datetime(2000, 1, 1) for i in xrange(len(high)): b = bar.BasicBar(now + datetime.timedelta(days=i), close[i], high[i], low[i], close[i], 100, close[i], bar.Frequency.DAY) barDataSeries.append(b) self.assertEqual(common.safe_round(atrDS[-1], 2), expected[i])
def __init__(self, feed, instrument, short_l, long_l, up_cum): strategy.BacktestingStrategy.__init__(self, feed) self.__instrument = instrument self.getBroker().setFillStrategy(DefaultStrategy(None)) self.getBroker().setCommission(TradePercentage(0.001)) self.__position = None self.__prices = feed[instrument].getPriceDataSeries() self.__malength1 = int(short_l) self.__malength2 = int(long_l) self.__circ = int(up_cum) self.__bardata = feed[instrument] self.N = atr.ATR(self.__bardata, 20) self.__ma1 = ma.SMA(self.__prices, self.__malength1) self.__ma2 = ma.SMA(self.__prices, self.__malength2)
def __init__(self, feed, instrument, bBandsPeriod): strategy.BacktestingStrategy.__init__(self, feed) self.setDebugMode(False) self.__instrument = instrument self.__feed = feed self.__position = None self.__atr = atr.ATR(feed[instrument], 15) self.__col = [ "buyPrice", "buyTime", "sellPrice", "sellTime", "returns" ] self.__msdf = pd.DataFrame(columns=self.__col) self.__buyPrice = 0 self.__buyTime = None self.setUseAdjustedValues(True)
def __init__(self, feed, instrument, bBandsPeriod): strategy.BacktestingStrategy.__init__(self, feed) self.setDebugMode(False) self.__instrument = instrument self.__feed = feed self.__position = None #self.__stochK = stoch.StochasticOscillator(feed[instrument], 5, 3) self.__mafast = ma.EMA(feed[instrument].getCloseDataSeries(), 5) self.__maslow = ma.EMA(feed[instrument].getCloseDataSeries(), 30) self.__atr = atr.ATR(feed[instrument], 15) self.__col = ["buyPrice","buyTime","sellPrice","sellTime", "returns"] self.__msdf = pd.DataFrame(columns=self.__col) self.__buyPrice = 0 self.__buyTime = None self.setUseAdjustedValues(True)
def __init__(self, feed, instrument, periods, atr_period=7): ''' there would be different period ''' # set the beginning cash as 10000 strategy.BacktestingStrategy.__init__(self, feed, 100000) self.position = None self.instrument = instrument # use the adjusted close self.setUseAdjustedValues(True) self.atr = atr.ATR(feed[instrument], atr_period) # the period of atr is 7 days self.price = feed[instrument].getPriceDataSeries() # not getDataSeries self.current_high = None # the smas self.s = [] for p in periods: self.s.append(ma.SMA(feed[instrument].getPriceDataSeries(), p))
def testStockChartsATRAdjusted(self): # Test data from http://stockcharts.com/help/doku.php?id=chart_school:technical_indicators:average_true_range_a high = [ 48.70, 48.72, 48.90, 48.87, 48.82, 49.05, 49.20, 49.35, 49.92, 50.19, 50.12, 49.66, 49.88, 50.19, 50.36, 50.57, 50.65, 50.43, 49.63, 50.33, 50.29, 50.17, 49.32, 48.50, 48.32, 46.80, 47.80, 48.39, 48.66, 48.79 ] low = [ 47.790, 48.140, 48.390, 48.370, 48.240, 48.635, 48.940, 48.860, 49.500, 49.870, 49.200, 48.900, 49.430, 49.725, 49.260, 50.090, 50.300, 49.210, 48.980, 49.610, 49.200, 49.430, 48.080, 47.640, 41.550, 44.283, 47.310, 47.200, 47.900, 47.730 ] close = [ 48.160, 48.610, 48.750, 48.630, 48.740, 49.030, 49.070, 49.320, 49.910, 50.130, 49.530, 49.500, 49.750, 50.030, 50.310, 50.520, 50.410, 49.340, 49.370, 50.230, 49.238, 49.930, 48.430, 48.180, 46.570, 45.410, 47.770, 47.720, 48.620, 47.850 ] expected = [ None, None, None, None, None, None, None, None, None, None, None, None, None, 0.555000, 0.593929, 0.585791, 0.568949, 0.615452, 0.617920, 0.642354, 0.674329, 0.692770, 0.775429, 0.781470, 1.209229, 1.302620, 1.380290, 1.366698, 1.336219, 1.316482 ] # Build a bar dataseries using the test data. barDataSeries = bards.BarDataSeries(INSTRUMENT) atrDS = atr.ATR(barDataSeries, 14, True) now = datetime.datetime(2000, 1, 1) for i in xrange(len(high)): b = bar.BasicBar(INSTRUMENT, now + datetime.timedelta(days=i), close[i], high[i], low[i], close[i], 100, close[i] / 2, bar.Frequency.DAY) barDataSeries.append(b) if expected[i] is None: self.assertEqual(atrDS[-1], None) else: self.assertEqual(common.safe_round(atrDS[-1], 2), round(expected[i] / 2, 2))
def __init__(self, feed, instrument,up_cum,cash_or_brk=10000): strategy.BacktestingStrategy.__init__(self, feed) self.__instrument = instrument self.getBroker().setFillStrategy(DefaultStrategy(None)) self.getBroker().setCommission(TradePercentage(0.001)) self.__position = None self.__prices = feed[instrument].getPriceDataSeries() self.__circ = int(up_cum) #self.bardata = feed[instrument] #self.N = atr.ATR(self.bardata, up_cum) self.N = atr.ATR(self.getFeed()[self.__instrument], up_cum) self.U = 0 # 总资金100w self.U = acount/(50*atr) 2%最大回撤+10倍杠杆 atr day:100 10min:20 1min:5 5w本金 day :1 10min:5 1min:20 #单个市场上 最多建立4个U self.buyPrice = [] self.shortPrice = [] self.max20 = 0 self.min10 = 0 self.max10 = 0 self.min20 = 0 self.buyPrice0 = 0 self.shortPrice0 = 0 self.lastPrice0 = 0 self.lastPrice1 =0