Ejemplo n.º 1
0
 def __init__(self, feed, instrument):
     """
     """
     super(DualThrust, self).__init__(feed)
     self.__instrument = instrument
     self.__open = feed[instrument].getOpenDataSeries()
     self.__high = feed[instrument].getHighDataSeries()
     self.__low = feed[instrument].getLowDataSeries()
     self.__close = feed[instrument].getCloseDataSeries()
     # 策略参数
     self.__k1 = 0.5
     self.__k2 = 0.5
     self.__mday = 1
     self.__nday = 1
     self.__lots = 5
     self.__offset = 0
     # 用于存储上下轨数据
     self.__buyposition = []
     self.__sellposition = []
     # sma
     self.__sma5 = SMA(self.__close, 5)
     self.__sma20 = SMA(self.__close, 55)
     # 设置手续费
     self.__price = None
     self.__datetime = None
     self.__cash = self.getBroker().getCash()
     self.__broker = self.getBroker()
     self.__broker.setCommission(TradePercentage(0.003))
Ejemplo n.º 2
0
    def __init__(self, feed, instrument, context, dictOfDataDf):
        super(SMACrossOver, self).__init__(feed)
        temp = self.getBroker()
        temp.setCommission(TradePercentage(0.0001))  # 单独设置手续费。
        if isinstance(instrument, list):
            self.__instrument = instrument[0]
        elif isinstance(instrument, str):
            self.__instrument = instrument
        else:
            raise Exception('不合法的instrument!')

        self.__position = None
        self.prices = feed[self.__instrument].getPriceDataSeries()
        # 这个策略只有一个品种,所以pop出来必然是那个。pop后这个键值对就不存在,不能取两次
        if self.realTrade:
            logger.debug('实盘')
            self.sma = talib.SMA(self.prices.values, 10)
            self.sma1 = talib.SMA(self.prices.values, 20)
        else:
            logger.debug('回测')
            length = len(dictOfDataDf[list(
                dictOfDataDf.keys())[0]])  # 拿出第一个df的长度
            self.sma = ma.SMA(self.prices, 108, maxLen=length)
            self.sma1 = ma.SMA(self.prices, 694, maxLen=length)
            self.tech = {
                self.__instrument: {
                    'sma short': self.sma,
                    'sma long': self.sma1
                }
            }
Ejemplo n.º 3
0
    def __init__(self, feed, win=10):
        super(SVMStrategy, self).__init__(feed)
        self.__instrument = instrument
        self.__position = None
        self.getBroker().setCash(initCapital)
        self.getBroker().setCommission(TradePercentage(0.003))
        self.getBroker().setAllowNegativeCash(True)
        self.getBroker().getFillStrategy().setVolumeLimit(1)
        self.getBroker().getFillStrategy().setSlippageModel(
            VolumeShareSlippage(priceImpact=0.0))
        self.__closeDataSeries = feed[instrument].getCloseDataSeries()
        self.df = df
        self.closeArr = []
        self.portfolios = []
        self.buys = []
        self.sells = []

        self.clf = clf
        self.X_norm = X_norm
        self.y = y
        self.actionDates = actionDates
        self.win = win
        # print 'week count:', len(y)

        self.monthCount = 1
        self.dayCount = 0
        self.errorCount = 0
        self.rightCount = 0
Ejemplo n.º 4
0
 def __init__(self, feed, instrument, long_period, short_period):
     super(AS002Strategy, self).__init__(feed, Broker(100000, feed, commission=TradePercentage(0.00075)))
     
     self.__instrument = instrument
     self.__long_period = long_period
     self.__short_period = short_period        
     
     self.__position = None   
Ejemplo n.º 5
0
 def __init__(self, feed, instrument, n):
     strategy.BacktestingStrategy.__init__(self, feed)
     self.__instrument = instrument
     self.getBroker().setFillStrategy(DefaultStrategy(None))
     self.getBroker().setCommission(TradePercentage(0.001))
     self.__apDataSeries = feed['orcl'].getApDataSeries()
     self.__sma = ma.SMA(self.__apDataSeries, n)
     self.__position = None
Ejemplo n.º 6
0
 def __init__(self, feed, instrument, bBandsPeriod):
     strategy.BacktestingStrategy.__init__(self, feed)
     self.__instrument = instrument
     self.getBroker().setFillStrategy(DefaultStrategy(None))
     self.getBroker().setCommission(TradePercentage(0.0002))
     self.__position = None
     self.setUseAdjustedValues(False)
     self.__bbands = bollinger.BollingerBands(feed[instrument].getCloseDataSeries(), bBandsPeriod, 2)
Ejemplo n.º 7
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)
Ejemplo n.º 8
0
 def __init__(self, feed, instrument, smaPeriod):
     strategy.BacktestingStrategy.__init__(self, feed)
     self.__instrument = instrument
     self.__position = None
     self.getBroker().setCommission(TradePercentage(0.001))
     # 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)
Ejemplo n.º 9
0
 def __init__(self, feed, instrument, ema1_period, ema2_period, ema3_period):
     super(AS001Strategy, self).__init__(feed, Broker(100000, feed, commission=TradePercentage(0.00075)))
     
     self.__instrument = instrument
     self.__ema1_period = ema1_period
     self.__ema2_period = ema2_period
     self.__ema3_period = ema3_period
     self.__hlc3 = dataseries.SequenceDataSeries()
     
     self.__position = None   
Ejemplo n.º 10
0
 def __init__(self, feed, instrument, n, initialCash=1000000):
     strategy.BacktestingStrategy.__init__(self, feed, initialCash)
     self.__instrument = instrument
     self.getBroker().setFillStrategy(DefaultStrategy(None))
     self.getBroker().setCommission(TradePercentage(0.001))
     self.__position = None
     self.__prices = feed[instrument].getPriceDataSeries()
     self.__malength = int(n)
     self.__ma = ma.SMA(self.__prices, self.__malength)
     self.__pos = SequenceDataSeries()  # record signal
Ejemplo n.º 11
0
    def __init__(self, feed, instrument, bollingerlength, numStdDev,
                 closelength, ccMAlength, malength, space):
        strategy.BacktestingStrategy.__init__(self, feed)
        self.getBroker().setFillStrategy(DefaultStrategy(None))
        self.getBroker().setCommission(TradePercentage(0.002))
        self.__instrument = instrument
        self.__bollingerlength = int(bollingerlength)
        numStdDev = float(numStdDev) / 10
        self.__closelength = int(closelength)
        self.__ccMAlength = int(ccMAlength)
        self.__malength = int(malength)
        self.__longPos = None
        self.__shortPos = None
        self.__close = feed[instrument].getCloseDataSeries()
        self.__open = feed[instrument].getOpenDataSeries()
        self.__high = feed[instrument].getHighDataSeries()
        self.__low = feed[instrument].getLowDataSeries()
        self.__datetime = feed[instrument].getDateTimes()
        self.__bollinger = bollinger.BollingerBands(self.__close,
                                                    self.__bollingerlength,
                                                    int(numStdDev))
        self.__UpperBand = self.__bollinger.getUpperBand()
        self.__LowerBand = self.__bollinger.getLowerBand()
        self.__MA = SequenceDataSeries()
        self.__space = int(space)
        self.__enter = 0
        self.__enterLong1 = 0
        self.__enterLong2 = 0
        self.__enterShort1 = 0
        self.__enterShort2 = 0
        self.__exitLong1 = 0
        self.__exitLong2 = 0
        self.__exitShort1 = 0
        self.__exitShort1 = 0

        #for test
        #########################################################################
        self.__p = SequenceDataSeries()
        self.__filterCon = SequenceDataSeries()
        self.__ccMACon1 = SequenceDataSeries()
        self.__ccMACon2 = SequenceDataSeries()
        self.__enterCon = SequenceDataSeries()
        self.__enterLongCon1 = SequenceDataSeries()
        self.__enterLongCon2 = SequenceDataSeries()
        self.__enterShortCon1 = SequenceDataSeries()
        self.__enterShortCon2 = SequenceDataSeries()
        self.__exitLongCon1 = SequenceDataSeries()
        self.__exitLongCon2 = SequenceDataSeries()
        self.__exitShortCon1 = SequenceDataSeries()
        self.__exitShortCon2 = SequenceDataSeries()
Ejemplo n.º 12
0
    def __init__(self, feed, instrument, length, initialCash=1000000):
        strategy.BacktestingStrategy.__init__(self, feed, initialCash)
        self.__instrument = instrument
        self.getBroker().setFillStrategy(DefaultStrategy(None))
        self.getBroker().setCommission(TradePercentage(0.001))
        self.__position = None
        self.__prices = feed[instrument].getPriceDataSeries()
        self.__malength = int(length)

        self.__datetime = feed[instrument].getDateTimes()
        self.__open = feed[instrument].getOpenDataSeries()
        self.__high = feed[instrument].getHighDataSeries()
        self.__low = feed[instrument].getLowDataSeries()
        self.__close = feed[instrument].getCloseDataSeries()
Ejemplo n.º 13
0
 def __init__(self, feed, instrument, cash, tradePercentage, data, fastPeriod, slowPeriod):
     super(MAStrategy, self).__init__(feed)
     self.instrument = instrument
     self.invested = False
     self.shortMA = talib.SMA(data, fastPeriod)
     self.longMA = talib.SMA(data, slowPeriod)
     self.day = -1
     self.getBroker().getFillStrategy().setVolumeLimit(1)
     self.getBroker().setCommission(TradePercentage(tradePercentage))
     self.getBroker().setCash(cash)
     self.getBroker().setAllowNegativeCash(True)
     self.buys = []
     self.sells = []
     self.portfolios = []
Ejemplo n.º 14
0
    def __init__(self, feed, instrument, mall, mals, masl, mass):
        strategy.BacktestingStrategy.__init__(self, feed)
        self.getBroker().setFillStrategy(DefaultStrategy(None))
        self.getBroker().setCommission(TradePercentage(0.001))
        self.__instrument = instrument
        self.__close = feed[instrument].getCloseDataSeries()
        self.__longPos = None
        self.__shortPos = None
        self.__mall = ma.SMA(self.__close, int(mall))
        self.__mals = ma.SMA(self.__close, int(mals))
        self.__masl = ma.SMA(self.__close, int(masl))
        self.__mass = ma.SMA(self.__close, int(mass))

        self.__position = SequenceDataSeries()
Ejemplo n.º 15
0
    def __init__(self, feed, instrument, short_l, mid_l, long_l, up_cum):
        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(short_l)
        self.__malength2 = int(mid_l)
        self.__malength3 = int(long_l)
        self.__circ = int(up_cum)

        self.__ma1 = ma.SMA(self.__prices, self.__malength1)
        self.__ma2 = ma.SMA(self.__prices, self.__malength2)
        self.__ma3 = ma.SMA(self.__prices, self.__malength3)
Ejemplo n.º 16
0
 def __init__(self,
              feed,
              instrument,
              fast,
              slow,
              signal,
              initialCash=1000000):
     strategy.BacktestingStrategy.__init__(self, feed, initialCash)
     self.__instrument = instrument
     self.getBroker().setFillStrategy(DefaultStrategy(None))
     self.getBroker().setCommission(TradePercentage(0.001))
     self.__position = None
     self.__prices = feed[instrument].getPriceDataSeries()
     self.__fast = int(fast)
     self.__slow = int(slow)
     self.__signal = int(signal)
Ejemplo n.º 17
0
def main(plot):

    instruments = ['bitmex_XBTUSD','okex_BTCUSDT']
    feed = Feed(Frequency.SECOND)
    feed.loadBars("bitmex_XBTUSD", test_back=True)
    feed.loadBars("okex_BTCUSDT", test_back=True)

    '''初始保证金'''
    initCash = 1000000
    '''手续费设置
        目前不支持多标的设置不同的手续费类型 
        3种手续费类型:
        NoCommission:None 默认
        FixedPerTrade:固定金额
        TradePercentage:按比例收费
    '''
    commission = TradePercentage(0.0003)
    broker = Broker(initCash,feed,commission)

    #设置为滑点模型,默认为 NoSlippage
    #broker.getFillStrategy().setSlippageModel(VolumeShareSlippage)

    #设置交易量限制
    #每一个bar中的 volume * limit
    #broker.getFillStrategy().setVolumeLimit(0.1)

    strat = MultiSymbols(feed, instruments, broker)

    sharpeRatioAnalyzer = sharpe.SharpeRatio()
    strat.attachAnalyzer(sharpeRatioAnalyzer)
    returnsAnalyzer = returns.Returns()
    strat.attachAnalyzer(returnsAnalyzer)

    if plot:
        plt = plotter.StrategyPlotter(strat, False, False, True)
        plt.getOrCreateSubplot("cash").addCallback("Cash", lambda x: strat.getBroker().getCash())
        # Plot strategy vs. SPY cumulative returns.
        # plt.getOrCreateSubplot("returns").addDataSeries("SPY", cumret.CumulativeReturn(feed["SPY"].getPriceDataSeries()))
        plt.getOrCreateSubplot("returns").addDataSeries("Strategy", returnsAnalyzer.getCumulativeReturns())

    strat.run()
    print("Sharpe ratio: %.2f" % sharpeRatioAnalyzer.getSharpeRatio(0.05))
    print("Returns: %.2f %%" % (returnsAnalyzer.getCumulativeReturns()[-1] * 100))

    if plot:
        plt.plot()
Ejemplo n.º 18
0
 def __init__(self, feed, instrument, df, shortWin=20, longWin=40):
     super(MyStrategy, self).__init__(feed)
     self.__instrument = instrument
     self.__position = None
     self.getBroker().setCash(100000)
     self.getBroker().setCommission(TradePercentage(0.003))
     self.getBroker().setAllowNegativeCash(True)
     self.getBroker().getFillStrategy().setVolumeLimit(1)
     self.getBroker().getFillStrategy().setSlippageModel(
         VolumeShareSlippage(priceImpact=0.0))
     self.__closeDataSeries = feed[instrument].getCloseDataSeries()
     self.df = df
     self.shortWin = shortWin
     self.longWin = longWin
     self.closeArr = []
     self.fastSMA = []
     self.slowSMA = []
     self.buys = []
     self.sells = []
     self.portfolios = []
Ejemplo n.º 19
0
    def __init__(self, feed, instrument, short_l, mid_l, long_l, up_cum):
        strategy.BacktestingStrategy.__init__(self, feed)
        self.__instrument = instrument
        self.getBroker().setFillStrategy(DefaultStrategy(None))
        self.getBroker().setCommission(TradePercentage(0.0002))
        self.__position = None
        self.setUseAdjustedValues(False)
        self.__prices = feed[instrument].getPriceDataSeries()
        self.__malength1 = int(short_l)
        self.__malength2 = int(mid_l)
        self.__malength3 = int(long_l)
        self.__circ = int(up_cum)

        self.__ma1 = ma.SMA(self.__prices, self.__malength1)
        self.__ma2 = ma.SMA(self.__prices, self.__malength2)
        self.__ma3 = ma.SMA(self.__prices, self.__malength3)

        self.__datetime = feed[instrument].getDateTimes()
        self.__open = feed[instrument].getOpenDataSeries()
        self.__high = feed[instrument].getHighDataSeries()
        self.__low = feed[instrument].getLowDataSeries()
        self.__close = feed[instrument].getCloseDataSeries()
Ejemplo n.º 20
0
    def __init__(self, feed, instrument,up_cum,cash_or_brk=10000):
        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.__circ = int(up_cum)
        #self.bardata = feed[instrument]
        #self.N = atr.ATR(self.bardata, up_cum)
        self.N = atr.ATR(self.getFeed()[self.__instrument], up_cum)
        self.U = 0  # 总资金100w  self.U = acount/(50*atr)  2%最大回撤+10倍杠杆  atr day:100  10min:20  1min:5  5w本金 day :1  10min:5 1min:20 #单个市场上 最多建立4个U

        self.buyPrice = []
        self.shortPrice = []
        self.max20 = 0
        self.min10 = 0
        self.max10 = 0
        self.min20 = 0
        self.buyPrice0 = 0
        self.shortPrice0 = 0
        self.lastPrice0 = 0
        self.lastPrice1 =0
Ejemplo n.º 21
0
    def __init__(self, feed, instrument, bBandsPeriod, dl):
        strategy.BacktestingStrategy.__init__(self, feed)
        self.__instrument = instrument
        self.getBroker().setFillStrategy(DefaultStrategy(None))
        self.getBroker().setCommission(TradePercentage(0.0002))
        self.__position = None
        self.bBandsPeriod = bBandsPeriod
#        self.setUseAdjustedValues(False)
        self.close = feed[instrument].getCloseDataSeries()
        self.open = feed[instrument].getOpenDataSeries()
        self.high = feed[instrument].getHighDataSeries()
        self.low = feed[instrument].getLowDataSeries()
        self.datetime = feed[instrument].getDateTimes()
        self.volume = feed[instrument].getVolumeDataSeries()
        self.feed = feed.get_dataFrame()
        # self.__bollinger = bollinger.BollingerBands(self.__close, self.bBandsPeriod,2)
        # self.__UpperBand = self.__bollinger.getUpperBand()
        # self.__LowerBand = self.__bollinger.getLowerBand()
        # self.feed = feed[instrument].getCloseDataSeries()
#        self.bar = feed[instrument].getClose()
        self.dl = dl
        self.op = []
        # self.ra = []
        self.ral = []
        self.rah = []
        self.boll = []
        self.macd = []
        self.rsi = []
        self.kdj = []
        self.rsi = []
        self.ma = []
        self.adj = []
        # self.adjh = []
        self.bdj = []
        # self.bdjh = []
        self.statusl = []
        self.statush = []
Ejemplo n.º 22
0

class subClass(ORB, analyzer.ANALYZER):
    def __init__(self, feed, instrument, broker, openrange, p_a, p_c,
                 isFinancialFuture, debug):
        ORB.__init__(self, fd, instrument, broker, openrange, p_a, p_c,
                     isFinancialFuture, debug)
        analyzer.ANALYZER.__init__(self)


# from TestStrategy import MyStrategy
# b=MyStrategy(a,"Y00")

fd = mysqlitefeed(DB_ORIGIN, 60, 5 * 380)
fd.loadBars(symbol, 20150928, 20151009)
commission = TradePercentage(commission_y00)
brkr = broker.backtesting.Broker(10000000, fd, commission)

a = subClass(fd, symbol, brkr, orr, 1, 2, False, False)

a.run()
a.myAppend()

# ds=a.fetchdata("Y00",a.getFrequency(),20150901,20150902,None)
# x=ds[100]
# tmp = x[1].strip().split(':')
# idate=x[0]
# tmp4= int(tmp[0])
# tmp5= int(tmp[1])
# idate1=tri_poly(idate)
# tmp0 = formdatetime_60(x[0], int(str(tmp[0])), int(str(tmp[1])))