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)
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)
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)
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
def initIndicators(self): #mid 3) self.__macd = macd.MACD(self.closePrices, 15, 20, 10, maxLen=self.mid_DEFAULT_MAX_LEN)
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
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)
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)
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)
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
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)
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)
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])
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, 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 __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, 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
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)
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)