Exemplo n.º 1
0
    def __init__(self, feed, smaShort, smaLong):
        MyBenchmark.__init__(self, feed, smaLong)

        self._smaShort = {}
        self._smaLong = {}
        self._macdPrice = {}
        self._macdVol = {}
        for instrument in feed.getRegisteredInstruments():
            self._smaShort[instrument] = ma.SMA(self._feed[instrument].getPriceDataSeries(), smaShort)
            self._smaLong[instrument] = ma.SMA(self._feed[instrument].getPriceDataSeries(), smaLong)
            self._macdPrice[instrument] = macd.MACD(self._feed[instrument].getPriceDataSeries(), 12, 26, 9)
            self._macdVol[instrument] = macd.MACD(self._feed[instrument].getVolumeDataSeries(), 12, 26, 9)
Exemplo n.º 2
0
    def __init__(self, feed, stopPer, stopTrailing, smaShort, smaLong, macdPriceShort, macdPriceLong, macdPriceSignal, macdVolShort, macdVolLong, macdVolSignal):
        MyBenchmark.__init__(self, feed, stopPer, stopTrailing, smaLong)

        self._smaShort = {}
        self._smaLong = {}
        self._macdPrice = {}
        self._macdVol = {}

        for instrument in feed.getRegisteredInstruments():
            self._smaShort[instrument] = ma.SMA(self._feed[instrument].getPriceDataSeries(), smaShort)
            self._smaLong[instrument] = ma.SMA(self._feed[instrument].getPriceDataSeries(), smaLong)
            self._macdPrice[instrument] = macd.MACD(self._feed[instrument].getPriceDataSeries(), macdPriceShort, macdPriceLong, macdPriceSignal)
            self._macdVol[instrument] = macd.MACD(self._feed[instrument].getVolumeDataSeries(), macdVolShort, macdVolLong, macdVolSignal)
Exemplo n.º 3
0
    def __init__(self, strategy, feed, instrument, **kwargs):
        '''

        :param strategy:
        :param feed:
        :param instrument:
        :param fast_period:
        :param slow_period:
        :param signal_period:
        :param kwargs:
        signal_period
        fast_period
        slow_period
        '''
        super(macd_signal, self).__init__(strategy, feed, instrument)
        self.set_member('fast_period', 12, kwargs)
        self.set_member('slow_period', 26, kwargs)
        self.set_member('signal_period', 9, kwargs)
        self.macd = macd.MACD(feed[instrument].getCloseDataSeries(),
                              self.fast_period, self.slow_period,
                              self.signal_period)
        #self.__strategy= strategy
        #self.__instrument = instrument
        #self.__prices = feed[instrument].getPriceDataSeries()
        self.vol = feed[instrument].getVolumeDataSeries()
        self.fast__trend = TrendRatio(self.prices, self.fast_period)
        self.slow__trend = TrendRatio(self.prices, self.slow_period)

        self.plot_init(True)
Exemplo n.º 4
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
    def __init__(self, feed, instrument, exitDays, belowzero):
        super(TestStrat, self).__init__(feed, cash_or_brk=100000)

        self.TestShort = True  # Test only short or long, not both.

        self.STRATNAME = "Macd_Crossing"
        self.STRATDESC = '''Tests what the edge is when macd line crosses below macd-ema both when the macd is below and above the zero line'''

        self.exitDays = exitDays
        self.belowzero = belowzero

        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.macd = macd.MACD(self.__priceDS, 12, 26, 9)

        self.__longPos = None
        self.__shortPos = None
        self.getBroker().getFillStrategy().setVolumeLimit(None)  # hack / CARL
Exemplo n.º 6
0
 def initIndicators(self):
     #mid 3)
     self.__macd = macd.MACD(self.closePrices,
                             15,
                             20,
                             10,
                             maxLen=self.mid_DEFAULT_MAX_LEN)
Exemplo n.º 7
0
 def __init__(self, feed, instrument):
     strategy.BacktestingStrategy.__init__(self, feed)
     # We want a 15 period SMA over the closing prices.
     self.__sma = ma.SMA(feed[instrument].getCloseDataSeries(), 15)
     self.__rsi = rsi.RSI(feed[instrument].getCloseDataSeries(), 14)
     self.__macd = macd.MACD(feed[instrument].getCloseDataSeries(), 12, 55,
                             9).getSignal()
     self.__instrument = instrument
Exemplo n.º 8
0
 def __init__(self, feed, instrument, smaPeriod):
     super(MyStrategy, self).__init__(feed, 10000)
     self.__position = None
     self.__instrument = instrument
     # We'll use adjusted close values instead of regular close values.
     self.setUseAdjustedValues(True)
     self.__sma = ma.SMA(feed[instrument].getPriceDataSeries(), smaPeriod)
     self.__macd=macd.MACD(feed[instrument].getPriceDataSeries(),5,10,8)
Exemplo n.º 9
0
 def doTechnical(self, bars, members, leaders):
     for instrument in members:
         if instrument in bars:
             if not instrument in self._prices:
                 self._prices[instrument] = macd.MACD(self._feed[instrument].getPriceDataSeries(), 12, 26, 9)
                 self._vols[instrument] = macd.MACD(self._feed[instrument].getVolumeDataSeries(), 12, 26, 9)
             elif self._session >= 200:
                 pri = self._prices[instrument]
                 vol = self._vols[instrument]
                 if instrument in self._positions:
                     if cross.cross_below(pri.getSignal(), pri) and cross.cross_below(vol.getSignal(), vol):
                         position = self._positions[instrument]
                         if not position.getExitOrder():
                             position.exitMarket()
                 elif instrument in leaders:
                     if cross.cross_above(pri.getSignal(), pri) and cross.cross_above(vol.getSignal(), vol):
                         if len(self._positions) < self._posMax:
                             self.prepareEnter(instrument, bars)
Exemplo n.º 10
0
 def __init__(self, feed, instrument):
     super(MyStrategy, self).__init__(feed, 100000)
     self.__position = None
     self.__instrument = instrument
     self.getBroker().setCommission(backtesting.FixedPerTrade(5))
     self.__macd = macd.MACD(feed[instrument].getPriceDataSeries(), 12, 26,
                             9)
     self.__analyzer = Analyzer(self, 'hs300')
     self.__transaction = Transaction(self)
     self.__transposition = TradePosition(self)
Exemplo n.º 11
0
 def __init__(self, feed, instrument, capital, selected_features,
              predict_n_days, model_form, testing_datetime,
              testing_end_datetime):
     super(Backtester, self).__init__(feed, capital)
     self.capital = capital
     self.instrument = instrument
     self.mpf_asset = [
         'hk_equity_fund', 'growth_fund', 'balanced_fund',
         'conservative_fund', 'hkdollar_bond_fund', 'stable_fund'
     ]
     self.positions = {asset: None for asset in self.mpf_asset}
     self.current_percentages = None
     self.previous_percentages = None
     # technical indicators is denfined here
     self.hk_equity_fund_macd = macd.MACD(
         feed['hk_equity_fund'].getCloseDataSeries(), 12, 26, 9)
     self.hk_equity_fund_macd_histogram = self.hk_equity_fund_macd.getHistogram(
     )
     self.growth_fund_macd = macd.MACD(
         feed['growth_fund'].getCloseDataSeries(), 12, 26, 9)
     self.growth_fund_macd_histogram = self.growth_fund_macd.getHistogram()
     self.balanced_fund_macd = macd.MACD(
         feed['balanced_fund'].getCloseDataSeries(), 12, 26, 9)
     self.balanced_fund_macd_histogram = self.balanced_fund_macd.getHistogram(
     )
     self.conservative_fund_macd = macd.MACD(
         feed['conservative_fund'].getCloseDataSeries(), 12, 26, 9)
     self.conservative_fund_macd_histogram = self.conservative_fund_macd.getHistogram(
     )
     self.hkdollar_bond_fund_macd = macd.MACD(
         feed['hkdollar_bond_fund'].getCloseDataSeries(), 12, 26, 9)
     self.hkdollar_bond_fund_macd_histogram = self.hkdollar_bond_fund_macd.getHistogram(
     )
     self.stable_fund_macd = macd.MACD(
         feed['stable_fund'].getCloseDataSeries(), 12, 26, 9)
     self.stable_fund_macd_histogram = self.stable_fund_macd.getHistogram()
     self.hk_equity_fund_rsi = rsi.RSI(
         feed['hk_equity_fund'].getCloseDataSeries(), 14)
     self.growth_fund_rsi = rsi.RSI(
         feed['growth_fund'].getCloseDataSeries(), 14)
     self.balanced_fund_rsi = rsi.RSI(
         feed['balanced_fund'].getCloseDataSeries(), 14)
     self.conservative_fund_rsi = rsi.RSI(
         feed['conservative_fund'].getCloseDataSeries(), 14)
     self.hkdollar_bond_fund_rsi = rsi.RSI(
         feed['hkdollar_bond_fund'].getCloseDataSeries(), 14)
     self.stable_fund_rsi = rsi.RSI(
         feed['stable_fund'].getCloseDataSeries(), 14)
     # self.testing_datetime = datetime(2014, 8, 2)
     # self.testing_end_datetime = datetime(2018, 1, 15)
     self.testing_datetime = testing_datetime
     self.testing_end_datetime = testing_end_datetime
     self.pending_order = None
     self.historical_data = list()
     self.historical_df = None
     self.selected_features = selected_features
     self.predict_n_days = predict_n_days
     self.model_form = model_form
     self.model = None
Exemplo n.º 12
0
    def __init__(self, feed, config, stopPer, stopTrailing, smaShort, smaLong):
        if config['dbfeed']:
            feed = dbfeed.DbFeed(config['db'], [], 100, config['startDate'], config['endDate'])
            feed.registerInstrument(config['instrument'])
        else:
            feed = yahoofeed.Feed()
            feed.sanitizeBars(True)
            feed.addBarsFromCSV(config['instrument'], config['instrument'] + ".csv")

        MyBenchmark.__init__(self, feed, stopPer, stopTrailing, smaLong)

        self.info("%s %s %s %s" % (stopPer, stopTrailing, smaShort, smaLong))

        self._smaShort = {}
        self._smaLong = {}
        self._macdPrice = {}
        self._macdVol = {}
        for instrument in feed.getRegisteredInstruments():
            self._smaShort[instrument] = ma.SMA(self._feed[instrument].getPriceDataSeries(), smaShort)
            self._smaLong[instrument] = ma.SMA(self._feed[instrument].getPriceDataSeries(), smaLong)
            self._macdPrice[instrument] = macd.MACD(self._feed[instrument].getPriceDataSeries(), 12, 26, 9)
            self._macdVol[instrument] = macd.MACD(self._feed[instrument].getVolumeDataSeries(), 12, 26, 9)
Exemplo n.º 13
0
    def __init__(self, feed, instrument,param,df):
        strategy.BacktestingStrategy.__init__(self, feed)
        # 自定义日线级别dataseries
        self.__instrument = instrument
        self.__feed = feed
        self.setUseAdjustedValues(False)
        self.__position = None
        self.__param  = param
        self.__kd = df
        self.__count = 0
        self.__prices = self.__feed[self.__instrument].getCloseDataSeries()
        self.__macd = macd.MACD(feed[instrument].getPriceDataSeries(), 12, 26, 9).getHistogram()

        self.__sma = ma.SMA(self.__prices, 5)
Exemplo n.º 14
0
    def testMACD(self):
        values = [16.39, 16.4999, 16.45, 16.43, 16.52, 16.51, 16.423, 16.41, 16.47, 16.45, 16.32, 16.36, 16.34, 16.59, 16.54, 16.52, 16.44, 16.47, 16.5, 16.45, 16.28, 16.07, 16.08, 16.1, 16.1, 16.09, 16.43, 16.4899, 16.59, 16.65, 16.78, 16.86, 16.86, 16.76]
        # These expected values were generated using TA-Lib
        macdValues = [None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0.0067, 0.0106, 0.0028, -0.0342, -0.0937, -0.1214, -0.1276, -0.125, -0.1195, -0.0459, 0.0097, 0.0601, 0.0975, 0.139, 0.1713, 0.1816, 0.1598]
        signalValues = [None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0.0036, 0.0056, 0.0048, -0.0064, -0.0313, -0.057, -0.0772, -0.0909, -0.0991, -0.0839, -0.0571, -0.0236, 0.011, 0.0475, 0.0829, 0.1111, 0.125]
        histogramValues = [None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0.0031, 0.005, -0.002, -0.0279, -0.0624, -0.0643, -0.0504, -0.0342, -0.0205, 0.0379, 0.0668, 0.0838, 0.0865, 0.0914, 0.0884, 0.0705, 0.0348]
        ds = dataseries.SequenceDataSeries()

        macdDs = macd.MACD(ds, 5, 13, 6)
        for i, value in enumerate(values):
            ds.append(value)
            self.assertEqual(common.safe_round(macdDs[i], 4), macdValues[i])
            self.assertEqual(common.safe_round(macdDs.getSignal()[i], 4), signalValues[i])
            self.assertEqual(common.safe_round(macdDs.getHistogram()[i], 4), histogramValues[i])
Exemplo n.º 15
0
 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()
Exemplo n.º 16
0
 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()
Exemplo n.º 17
0
    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)
Exemplo n.º 18
0
    def __init__(self, feed, instrumentsByClass, initialCash):
        #所有的策略类都是继承strategy模块下的BacktestingStrategy类
        #BacktestingStrategy继承BaseStrategy类
        strategy.BacktestingStrategy.__init__(self, feed, initialCash)
        self.setUseAdjustedValues(True)
        #获得所有标的 类型为list
        self.__instrumentsByClass = instrumentsByClass
        self.__rebalanceMonth = None
        self.__sharesToBuy = {}
        self.__position = {}
        # Initialize indicators for each instrument.
        # 定义sma的一个字典   标的:sma
        self.__sma = {}
        self.__dea = {}
        self.__priceDS = {}
        self.__takeprofit = {}
        self.__stoploss = {}
        self.__order = {}
        self.__cost = {}
        #self.__oderID=1
        takeprofit = 0.1
        stoploss = 0.1
        for assetClass in instrumentsByClass:
            for instrument in instrumentsByClass[assetClass]:
                priceDS = feed[instrument].getPriceDataSeries()

                self.__priceDS[instrument] = feed[
                    instrument].getPriceDataSeries()
                self.__sma[instrument] = ma.SMA(self.__priceDS[instrument], 26)
                #self.__sma[instrument] = ma.SMA(priceDS, 26)

                #获得DEA指标
                #得到一个MACD类的临时实例
                __macd = macd.MACD(self.__priceDS[instrument], 12, 26, 9)
                #__macd = macd.MACD(priceDS,12,26,9)
                self.__dea[instrument] = __macd.getSignal()
                #self.__cost[instrument]=None
                self.__takeprofit[instrument] = takeprofit  #设置止盈点
                self.__stoploss[instrument] = stoploss  #设置止损点
                self.__cost[instrument] = 0
Exemplo n.º 19
0
 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)
Exemplo n.º 20
0
 def __init__(self, feed, instrument, nfastEMA, nslowEMA, nsignalEMA):
     super(MACDStrategy, self).__init__(feed)
     self.position = None
     self.instrument = instrument
     self.macd = macd.MACD(feed[instrument].getPriceDataSeries(), nfastEMA,
                           nslowEMA, nsignalEMA)