def __init__(self,strategy,feed, instrument,**kwargs): ''' :param strategy: :param feed: :param instrument: :param fast_period: :param slow_period: :param kwargs: fast_period slow_period ''' self.set_member('fast_period',5,kwargs) self.set_member('slow_period', 20,kwargs) fast_period = self.fast_period slow_period = self.slow_period super(kd_signal, self).__init__(strategy, feed, instrument) self.fast_ma= ma.SMA(feed[instrument].getCloseDataSeries(), fast_period) self.fast_period = fast_period self.slow_ma = ma.SMA(feed[instrument].getCloseDataSeries(), slow_period) self.slow_period = slow_period self.fast__trend = TrendRatio(self.prices, fast_period) self.slow__trend = TrendRatio(self.prices, slow_period) self.kd = stoch.StochasticOscillator(feed[instrument],slow_period,fast_period,False,None) self.plot_init(True) self.start_check = False
def __init__(self,feed,instruments,ind_dt,ts): strategy.BacktestingStrategy.__init__(self,feed,cash_or_brk=200) self.__position = [] self.__intrapost = dict() self.__instruments = instruments self.__ts = ts self.__ydate = '' self.lastday = dict() self.df = pd.read_csv(ind_dt,dtype={'code':np.str}) self.tdays = np.array(self.df['Date'].unique()) self.__prices = feed.getDataSeries(self.__instruments) self.__KDJ = stoch.StochasticOscillator(self.__prices,9) rsiPeriod = 6 self.__priceDS = feed[self.__instruments].getPriceDataSeries() self.__rsi = rsi.RSI(self.__priceDS, rsiPeriod) self.__PK = None self.__PD = None self.__fakeShares = 0 self.__prevJ = None self.__buydays = set() self.getBroker().setMaxHoldingDays(2)
def testZeroDivision(self): highPrices = [1, 1, 1] lowPrices = [1, 1, 1] closePrices = [1, 1, 1] barDS = bards.BarDataSeries() stochFilter = stoch.StochasticOscillator(barDS, 2, 2) self.__fillBarDataSeries(barDS, closePrices, highPrices, lowPrices) self.assertEqual(stochFilter[-1], 0)
def testStockChartsStoch(self): # Test data from # http://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:stochastic_oscillato highPrices = [ 127.0090, 127.6159, 126.5911, 127.3472, 128.1730, 128.4317, 127.3671, 126.4220, 126.8995, 126.8498, 125.6460, 125.7156, 127.1582, 127.7154, 127.6855, 128.2228, 128.2725, 128.0934, 128.2725, 127.7353, 128.7700, 129.2873, 130.0633, 129.1182, 129.2873, 128.4715, 128.0934, 128.6506, 129.1381, 128.6406 ] lowPrices = [ 125.3574, 126.1633, 124.9296, 126.0937, 126.8199, 126.4817, 126.0340, 124.8301, 126.3921, 125.7156, 124.5615, 124.5715, 125.0689, 126.8597, 126.6309, 126.8001, 126.7105, 126.8001, 126.1335, 125.9245, 126.9891, 127.8148, 128.4715, 128.0641, 127.6059, 127.5960, 126.9990, 126.8995, 127.4865, 127.3970 ] closePrices = lowPrices[: 13] # To keep initial close prince between low/high closePrices.extend([ 127.2876, 127.1781, 128.0138, 127.1085, 127.7253, 127.0587, 127.3273, 128.7103, 127.8745, 128.5809, 128.6008, 127.9342, 128.1133, 127.5960, 127.5960, 128.6904, 128.2725 ]) kValues = [ None, None, None, None, None, None, None, None, None, None, None, None, None, 70.4382, 67.6089, 89.2021, 65.8106, 81.7477, 64.5238, 74.5298, 98.5814, 70.1045, 73.0561, 73.4178, 61.2313, 60.9563, 40.3861, 40.3861, 66.8285, 56.7314 ] dValues = [ None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 75.7497, 74.2072, 78.9201, 70.6940, 73.6004, 79.2117, 81.0719, 80.5807, 72.1928, 69.2351, 65.2018, 54.1912, 47.2428, 49.2003, 54.6487 ] barDS = bards.BarDataSeries(INSTRUMENT) stochFilter = stoch.StochasticOscillator(barDS, 14) self.__fillBarDataSeries(barDS, closePrices, highPrices, lowPrices) for i in range(len(kValues)): self.assertTrue(values_equal(stochFilter[i], kValues[i])) self.assertTrue(values_equal(stochFilter.getD()[i], dValues[i])) self.assertEqual(len(stochFilter.getDateTimes()), len(closePrices)) for i in range(len(stochFilter)): self.assertNotEqual(stochFilter.getDateTimes()[i], None)
def __init__(self, feed, instrument, arg_set, kdj_fast=3, kdj_slow=9, macd_fast=12, macd_slow=26): broker_commission = broker.backtesting.TradePercentage(0.0004) brokers = broker.backtesting.Broker(1000000, feed, broker_commission) super(Macd_Kdj, self).__init__(feed, brokers) self.__instrument = instrument self.__feed = feed # self.setUseAdjustedValues(True) self.__position = None self.initState = False self.code = feed.getKeys()[0] self.priceDS = feed[instrument].getPriceDataSeries() self.arg_set = arg_set self.kdj_k = stoch.StochasticOscillator(feed[instrument], period=kdj_fast, dSMAPeriod=kdj_slow) self.kdj_d = self.kdj_k.getD() self.diff = macd.MACD(self.priceDS, fastEMA=macd_fast, slowEMA=macd_slow, signalEMA=9) self.dea = self.diff.getSignal() self.macd = self.diff.getHistogram()
def testShortPeriod(self): highPrices = [3, 3, 3] lowPrices = [1, 1, 1] closePrices = [2, 2, 3] stochFilter = stoch.StochasticOscillator( self.__buildBarDataSeries(closePrices, highPrices, lowPrices), 2, 2) self.assertTrue(values_equal(stochFilter.getValueAbsolute(0), None)) self.assertTrue(values_equal(stochFilter.getValueAbsolute(1), 50)) self.assertTrue(values_equal(stochFilter.getValueAbsolute(2), 100)) self.assertTrue( values_equal(stochFilter.getD().getValueAbsolute(0), None)) self.assertTrue( values_equal(stochFilter.getD().getValueAbsolute(1), None)) self.assertTrue( values_equal(stochFilter.getD().getValueAbsolute(2), 75))
def testShortPeriod(self): highPrices = [3, 3, 3] lowPrices = [1, 1, 1] closePrices = [2, 2, 3] barDS = bards.BarDataSeries() stochFilter = stoch.StochasticOscillator(barDS, 2, 2) self.__fillBarDataSeries(barDS, closePrices, highPrices, lowPrices) self.assertTrue(values_equal(stochFilter[0], None)) self.assertTrue(values_equal(stochFilter[1], 50)) self.assertTrue(values_equal(stochFilter[2], 100)) self.assertTrue(values_equal(stochFilter.getD()[0], None)) self.assertTrue(values_equal(stochFilter.getD()[1], None)) self.assertTrue(values_equal(stochFilter.getD()[2], 75)) self.assertEqual(len(stochFilter.getDateTimes()), len(closePrices)) for i in range(len(stochFilter)): self.assertNotEqual(stochFilter.getDateTimes()[i], None)
def testStockChartsStoch_Bounded(self): # Test data from # http://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:stochastic_oscillato highPrices = [ 127.0090, 127.6159, 126.5911, 127.3472, 128.1730, 128.4317, 127.3671, 126.4220, 126.8995, 126.8498, 125.6460, 125.7156, 127.1582, 127.7154, 127.6855, 128.2228, 128.2725, 128.0934, 128.2725, 127.7353, 128.7700, 129.2873, 130.0633, 129.1182, 129.2873, 128.4715, 128.0934, 128.6506, 129.1381, 128.6406 ] lowPrices = [ 125.3574, 126.1633, 124.9296, 126.0937, 126.8199, 126.4817, 126.0340, 124.8301, 126.3921, 125.7156, 124.5615, 124.5715, 125.0689, 126.8597, 126.6309, 126.8001, 126.7105, 126.8001, 126.1335, 125.9245, 126.9891, 127.8148, 128.4715, 128.0641, 127.6059, 127.5960, 126.9990, 126.8995, 127.4865, 127.3970 ] closePrices = lowPrices[: 13] # To keep initial close prince between low/high closePrices.extend([ 127.2876, 127.1781, 128.0138, 127.1085, 127.7253, 127.0587, 127.3273, 128.7103, 127.8745, 128.5809, 128.6008, 127.9342, 128.1133, 127.5960, 127.5960, 128.6904, 128.2725 ]) kValues = [40.3861, 66.8285, 56.7314] dValues = [47.2428, 49.2003, 54.6487] barDS = bards.BarDataSeries(INSTRUMENT) stochFilter = stoch.StochasticOscillator(barDS, 14, maxLen=3) self.__fillBarDataSeries(barDS, closePrices, highPrices, lowPrices) self.assertEqual(len(stochFilter), 3) self.assertEqual(len(stochFilter[:]), 3) self.assertEqual(len(stochFilter.getDateTimes()), 3) self.assertEqual(len(stochFilter.getD()), 3) self.assertEqual(len(stochFilter.getD().getDateTimes()), 3) for i in xrange(3): self.assertEqual(round(stochFilter[i], 4), kValues[i]) self.assertEqual(round(stochFilter.getD()[i], 4), dValues[i])
def __init__(self, feed, instrument, bBandsPeriod): super(MyStrategy, self).__init__(feed) self.__instrument = instrument # 使用调整后的数据 if feed.barsHaveAdjClose(): self.setUseAdjustedValues(True) # 持有仓位 self.__holdPosition = 0.0 # 空闲仓位 self.__emptyPosition = 10.0 # 单元持仓金额 self.__unit = self.getBroker().getCash(False) / 10 # 统计收盘价 self.__priceDS = feed[instrument].getPriceDataSeries() # 计算macd指标 self.__macd = macd.MACD(self.__priceDS, 12, 26, 9) # 计算KD指标 self.__stoch = stoch.StochasticOscillator(feed[instrument], 9, 3) # 计算rsi指标 self.__rsi7 = rsi.RSI(self.__priceDS, 7) self.__rsi14 = rsi.RSI(self.__priceDS, 14) # 计算布林线 self.__bbands = bollinger.BollingerBands(self.__priceDS, bBandsPeriod, 2)