def __init__(self, feed, instrument, EMACombo, multiplier, exitDays): super(TestStrat, self).__init__(feed, cash_or_brk=100000) self.TestShort = False # Test only short or long, not both. self.STRATNAME = "Ema Order" self.STRATDESC = '''Tests the filter edge of ordered emas''' self.instrument = instrument self.priceDS = self.getFeed().getDataSeries( self.instrument).getPriceDataSeries() self.exitDays = exitDays self.ShorterEmaSetting = int(EMACombo * multiplier) self.LongerEmaSetting = EMACombo self.ema10 = ma.EMA(self.priceDS, 10) self.ema20 = ma.EMA(self.priceDS, 20) # We'll use adjusted close values, if available, instead of regular close values. if feed.barsHaveAdjClose(): self.setUseAdjustedValues(True) self.LongerEma = ma.EMA(self.priceDS, self.LongerEmaSetting) self.ShorterEma = ma.EMA(self.priceDS, self.ShorterEmaSetting) self.longPos = None self.shortPos = None self.getBroker().getFillStrategy().setVolumeLimit(None) # hack / CARL
def __init__(self, feed, instrument, hurstPeriod, macdShorterPeriod, macdLongerPeriod, macdSignalPeriod, rsiPeriod, entrySMAPeriod, exitSMAPeriod, overBoughtThreshold, overSoldThreshold): strategy.BacktestingStrategy.__init__(self, feed) self.__instrument = instrument self.__hurstPeriod = hurstPeriod # Use adjusted close values, if available, instead of regular close values. if feed.barsHaveAdjClose(): self.setUseAdjustedValues(True) self.__priceDS = feed[instrument].getPriceDataSeries() self.__adjClose = feed[instrument].getAdjCloseDataSeries() self.__macdShorterPeriod = macdShorterPeriod self.__macdLongerPeriod = macdLongerPeriod self.__macdSignalPeriod = macdSignalPeriod self.__macd = macd.MACD(self.__adjClose, self.__macdShorterPeriod, self.__macdLongerPeriod, self.__macdSignalPeriod) self.__hurst = MovingHurst.HurstExponent(self.__adjClose, hurstPeriod) self.__entrySMA = ma.EMA(self.__priceDS, entrySMAPeriod) self.__exitSMA = ma.EMA(self.__priceDS, exitSMAPeriod) self.__rsi = rsi.RSI(self.__adjClose, rsiPeriod) self.__overBoughtThreshold = overBoughtThreshold self.__overSoldThreshold = overSoldThreshold self.__longPos = None self.__shortPos = None
def __init__(self, feed, ema1, ema2, ema3, ema4, daysToHold): strategy.BacktestingStrategy.__init__(self, feed) self.__instrument = feed.getDefaultInstrument() self.__daysToHold = daysToHold ds = feed[self.__instrument].getCloseDataSeries() self.__ema1 = ma.EMA(ds, ema1) self.__ema2 = ma.EMA(ds, ema2) self.__ema3 = ma.EMA(ds, ema3) self.__ema4 = ma.EMA(ds, ema4) self.__daysLeft = 0 self.__position = None
def __init__(self, feed, instrument, n, m): 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(n) self.__malength2 = int(m) self.__ma1 = ma.EMA(self.__prices, self.__malength1) self.__ma2 = ma.EMA(self.__prices, self.__malength2)
def __init__(self, feed, instrument, nfast, nslow): # define the initial budget super(MovingAverageStrategy, self).__init__(feed, INITIAL_BUDGET) #track the position self.position = None self.instrument = instrument self.setUseAdjustedValues(True) self.fastMA = ma.EMA(feed[instrument].getPriceDataSeries(), nfast) self.slowMA = ma.EMA(feed[instrument].getPriceDataSeries(), nslow)
def __init__(self, feed, instrument): strategy.BacktestingStrategy.__init__(self, feed) # 自定义日线级别dataseries self.__instrument = instrument self.__feed = feed self.setUseAdjustedValues(False) self.__position = None self.__bolling = None self.day_feed = self.resampleBarFeed(frequency=bar.Frequency.DAY, callback=self.resample_callback) self.day_closeDataList = self.day_feed[instrument].getCloseDataSeries()._SequenceDataSeries__values.data() self.day_ma60 = ma.EMA(self.day_feed[instrument].getCloseDataSeries(), 60) self.day_ma30 = ma.EMA(self.day_feed[instrument].getCloseDataSeries(), 30) self.day_ma20 = ma.EMA(self.day_feed[instrument].getCloseDataSeries(), 30) ##############各种信号量######## self.initState = False # 开头的几个过滤掉 self.buyWaitSignal = False # 买入等待信号 self.sellWaitSignal = False # 卖出等待信号 self.holdDay = datetime.min # 持有的日期 self.min_ma5 = ma.EMA(self.__feed[instrument].getCloseDataSeries(), 5) # 5分线5均 self.min_ma10 = ma.EMA(self.__feed[instrument].getCloseDataSeries(), 10) # 5分线5均 self.min_ma20 = ma.EMA(self.__feed[instrument].getCloseDataSeries(), 20) # 5分线5均 self.min_ma30 = ma.EMA(self.__feed[instrument].getCloseDataSeries(), 30) # 5分线5均 self.min_ma60 = ma.EMA(self.__feed[instrument].getCloseDataSeries(), 60) # 5分线5均 self.__count = 0
def __init__(self, feed, instrument, fastEMA, slowEMA, rsiPeriod, overBoughtThreshold, overSoldThreshold): super(RSI2, self).__init__(feed, 1000) self.__instrument = instrument # We'll use adjusted close values, if available, instead of regular close values. # if feed.barsHaveAdjClose(): # self.setUseAdjustedValues(True) self.__priceDS = feed.getDataSeries( self.__instrument).getPriceDataSeries() self.__fastEMA = ma.EMA(self.__priceDS, fastEMA) self.__slowEMA = ma.EMA(self.__priceDS, slowEMA) # self.__rsi = rsi.RSI(self.__priceDS, rsiPeriod) self.__overBoughtThreshold = overBoughtThreshold self.__overSoldThreshold = overSoldThreshold self.__longPos = None self.__shortPos = None
def __init__(self, feed, instrument, signal_period=50, cash=10000): super(OBVSignalCrossStrategy, self).__init__(feed, BacktestingBroker(cash, feed)) self.__position = None self.__instrument = instrument # TODO OBV signal_period parameter can be removed, but we need to change OBV indicator to implement SequenceDataSeries directly (check MACD implementation) self.__obv = OBV(feed[instrument], signal_period) self.__signal = ma.EMA(self.__obv, signal_period)
def __init__(self, feed, instrument, arg_set, ma_short=5, ma_long=10, macd_fast=6, macd_slow=12): broker_commission = broker.backtesting.TradePercentage(0.0004) brokers = broker.backtesting.Broker(1000000, feed, broker_commission) super(Ma_Macd, 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.ma_short = ma.EMA(self.priceDS, ma_short) self.ma_long = ma.EMA(self.priceDS, ma_long) 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 __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 testMaxRecursion(self): barFeed = ninjatraderfeed.Feed(bar.Frequency.MINUTE) barFeed.addBarsFromCSV("any", common.get_data_file_path("nt-spy-minute-2011.csv")) ema = ma.EMA(barFeed["any"].getPriceDataSeries(), 10) # Load all the feed. barFeed.loadAll() # Check that the max recursion limit bug is not hit when generating the last value first. self.assertEqual(round(ema[-1], 2), 128.81)
def __init__(self, feed, instrument, smaPeriod): super(SMACrossOver, self).__init__(feed) self.__instrument = instrument self.getBroker().setCash(1000) self.__position = None # We'll use adjusted close values instead of regular close values. self.setUseAdjustedValues(True) self.__prices = feed[instrument].getPriceDataSeries() self.__sma = ma.SMA(self.__prices, smaPeriod) self.__ema20 = ma.EMA(self.__prices, 15)
def __init__(self, feed, instrument, bBandsPeriod): strategy.BacktestingStrategy.__init__(self, feed) self.setDebugMode(False) self.__instrument = instrument self.__feed = feed self.__position = None fastEMA=12 slowEMA=26 signalEMA=9 self.__macd = macd.MACD(feed[instrument].getCloseDataSeries(), fastEMA,slowEMA,signalEMA, 15) self.__fastma = ma.EMA(feed[instrument].getCloseDataSeries(),fastEMA) self.__slowma = ma.EMA(feed[instrument].getCloseDataSeries(),slowEMA) 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, fastPeriod, slowPeriod, rsiPeriod, overboughtThreshold, oversoldThreshold): #this is where we have to define the initial budget super(RSIMovingAverageStrategy, self).__init__(feed, INITIAL_BUDGET) #we can track the position: long or short positions #if it is None we know we can open one self.longPosition = None self.shortPosition = None self.oversoldThreshold = oversoldThreshold self.overboughtThreshold = overboughtThreshold #the given stock (for example AAPL) self.instrument = instrument #if we want to use adjusted closing prices instead of regular closing prices self.setUseAdjustedValues(True) #fast moving average indicator (short-term trend) period is smaller self.fastMA = ma.EMA(feed[instrument].getPriceDataSeries(), fastPeriod) #slow moving average indicator (long-term trend) period is larger self.slowMA = ma.EMA(feed[instrument].getPriceDataSeries(), slowPeriod) #define the RSI model self.rsi = rsi.RSI(feed[instrument].getPriceDataSeries(), rsiPeriod)
def __init__(self, feed, instrument, aboveSMA, exitDays): super(TestStrat, self).__init__(feed,cash_or_brk=100000) self.exitDays = exitDays self.STRATNAME = "Above_Ma" self.__instrument = instrument # We'll use adjusted close values, if available, instead of regular close values. if feed.barsHaveAdjClose(): self.setUseAdjustedValues(True) self.__priceDS = self.getFeed().getDataSeries(self.__instrument).getPriceDataSeries() self.aboveSMA = ma.EMA(self.__priceDS, aboveSMA) self.aboveSMAMid = ma.EMA(self.__priceDS, 50) self.aboveSMALong = ma.EMA(self.__priceDS, 125) self.__longPos = None self.__shortPos = None self.getBroker().getFillStrategy().setVolumeLimit(None) # hack / CARL
def testBoundedFilter(self): values = [22.2734, 22.1940, 22.0847, 22.1741, 22.1840, 22.1344, 22.2337, 22.4323, 22.2436, 22.2933, 22.1542, 22.3926, 22.3816, 22.6109, 23.3558, 24.0519, 23.7530, 23.8324, 23.9516, 23.6338, 23.8225, 23.8722, 23.6537, 23.1870, 23.0976, 23.3260, 22.6805, 23.0976, 22.4025, 22.1725] seqDS = dataseries.SequenceDataSeries() ema = ma.EMA(seqDS, 10, 2) for value in values: seqDS.append(value) self.assertEqual(round(ema[0], 5), 23.08068) self.assertEqual(round(ema[1], 5), 22.91556) self.assertEqual(len(ema), 2) self.assertEqual(len(ema[:]), 2) self.assertEqual(len(ema.getDateTimes()), 2)
def __init__(self, feed: csvfeed.GenericBarFeed, instrument: str, ma_look: int, ema_look: int, atr_look: int): super().__init__(feed) self.long = None self.short = None self.instrument = instrument self.bar = None self.bar_count = 0 self.market_price = 0 self.current_position = {} self.was_long = None self.plot_ma = ma.SMA(feed[self.instrument].getPriceDataSeries(), ma_look) self.plot_ema = ma.EMA(feed[self.instrument].getPriceDataSeries(), ema_look) self.longest_look = 4 * max([ma_look, ema_look, atr_look + 1])
def __init__(self, feed, instrument, longEMA, exitDays, multiplier): super(TestStrat, self).__init__(feed, cash_or_brk=100000) self.STRATNAME = "Crossing_of_EMA" self.exitDays = exitDays self.multiplier = multiplier self.__instrument = instrument # We'll use adjusted close values, if available, instead of regular close values. if feed.barsHaveAdjClose(): self.setUseAdjustedValues(True) self.__priceDS = self.getFeed().getDataSeries( self.__instrument).getPriceDataSeries() self.longEMA = ma.EMA(self.__priceDS, longEMA) self.shortEMA = ma.EMA(self.__priceDS, int(longEMA * self.multiplier)) self.__longPos = None self.__shortPos = None self.getBroker().getFillStrategy().setVolumeLimit(None) # hack / CARL
def __init__(self, feed, instruments, cash, ema_length, ema_alpha, commission_scheme, printinfo=False): """ Params: commission_scheme: tuple(str, float) """ strategy.BacktestingStrategy.__init__(self, feed, cash) print 'PARAMS: len = %d | alpha = %.2f | Commission: %s' % ( ema_length, ema_alpha, commission_scheme) # We wan't to use adjusted close prices instead of close. self.setUseAdjustedValues(True) self.printinfo = printinfo # Commission self.getBroker().setCommission( getattr(backtesting, commission_scheme[0])(commission_scheme[1])) # Initialize indicators for each instrument. self.__closes = {} self.__ema = {} self.__dt = {} self.__zeroseries = {} self.__zeroema = {} for instrument in instruments: self.__closes[instrument] = feed[instrument].getPriceDataSeries() self.__ema[instrument] = tf.EMA(self.__closes[instrument], ema_length, .1) self.__dt[instrument] = tf.Derivative(self.__ema[instrument]) self.__zeroseries[instrument] = tf.ZeroSeries( self.__closes[instrument]) self.__zeroema[instrument] = ma.EMA(self.__zeroseries[instrument], 3)
def __init__(self, feed, instrument): strategy.BacktestingStrategy.__init__(self, feed) # 自定义日线级别dataseries self.__instrument = instrument self.__feed = feed self.setUseAdjustedValues(False) self.__position = None self.__ENE = None self.__feed_day = self.resampleBarFeed(frequency=bar.Frequency.DAY, callback=self.resample_callback) self.__MA3 = ma.EMA(self.__feed_day[instrument].getCloseDataSeries(), 3, 5) self.__MA5 = ma.EMA(self.__feed_day[instrument].getCloseDataSeries(), 5, 5) self.__MA8 = ma.EMA(self.__feed_day[instrument].getCloseDataSeries(), 8, 5) self.__MA10 = ma.EMA(self.__feed_day[instrument].getCloseDataSeries(), 10, 5) self.__MA12 = ma.EMA(self.__feed_day[instrument].getCloseDataSeries(), 12, 5) self.__MA15 = ma.EMA(self.__feed_day[instrument].getCloseDataSeries(), 15, 5) self.__MA30 = ma.EMA(self.__feed_day[instrument].getCloseDataSeries(), 30, 5) self.__MA35 = ma.EMA(self.__feed_day[instrument].getCloseDataSeries(), 35, 5) self.__MA40 = ma.EMA(self.__feed_day[instrument].getCloseDataSeries(), 40, 5) self.__MA45 = ma.EMA(self.__feed_day[instrument].getCloseDataSeries(), 45, 5) self.__MA50 = ma.EMA(self.__feed_day[instrument].getCloseDataSeries(), 50, 5) self.__MA60 = ma.EMA(self.__feed_day[instrument].getCloseDataSeries(), 60, 5) self.__EMA12 = ma.EMA(self.__feed_day[instrument].getCloseDataSeries(), 12, 10) self.__EMA50 = ma.EMA(self.__feed_day[instrument].getCloseDataSeries(), 50, 10) ##############各种信号量######## self.initState = False # 开头的几个过滤掉 self.eneUpMode = False # ENE 日线向下 self.buyType = None # 买入的类型,“UP”是上升趋势中轨买入,‘DOWN’是下降趋势下轨买入 self.buyWaitSignal = False # 买入等待信号 self.sellWaitSignal = False # 卖出等待信号 self.holdDay = datetime.min # 持有的日期 self.sellinfo = '' self.buyPrice = 0.0 self.min_ma5 = ma.SMA(self.__feed[instrument].getCloseDataSeries(), 5) # 5分线5均 self.min_ma10 = ma.SMA(self.__feed[instrument].getCloseDataSeries(), 10) # 5分线5均 self.min_ma20 = ma.SMA(self.__feed[instrument].getCloseDataSeries(), 20) # 5分线5均 self.min_ma30 = ma.SMA(self.__feed[instrument].getCloseDataSeries(), 30) # 5分线5均 self.min_ma60 = ma.SMA(self.__feed[instrument].getCloseDataSeries(), 60) # 5分线5均 self.min_ma120 = ma.SMA(self.__feed[instrument].getCloseDataSeries(), 120) # 5分线5均
def testStockChartsEMA_Reverse(self): # Test in reverse order to trigger recursive calls. # Test data from http://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:moving_averages common.test_from_csv(self, "sc-ema-10.csv", lambda inputDS: ma.EMA(inputDS, 10), 3, True)
def testStockChartsEMA(self): # Test data from http://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:moving_averages common.test_from_csv(self, "sc-ema-10.csv", lambda inputDS: ma.EMA(inputDS, 10), 3)