コード例 #1
0
    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
コード例 #2
0
    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
コード例 #3
0
 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
コード例 #4
0
    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)
コード例 #5
0
    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)
コード例 #6
0
    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
コード例 #7
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
コード例 #8
0
    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)
コード例 #9
0
ファイル: MyStrategy.py プロジェクト: sishi22/wencai
 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()
コード例 #10
0
ファイル: pyAlgoSTOCH.py プロジェクト: vyouzhis/energy
    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)
コード例 #11
0
    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)
コード例 #12
0
 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)
コード例 #13
0
ファイル: pyAlgoMACD.py プロジェクト: vyouzhis/energy
    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)
コード例 #14
0
 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)
コード例 #15
0
    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
コード例 #16
0
    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)
コード例 #17
0
 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])
コード例 #18
0
    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
コード例 #19
0
    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)
コード例 #20
0
    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均
コード例 #21
0
 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)
コード例 #22
0
 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)