Ejemplo n.º 1
0
 def __init__(self,
              instrument,
              dataSeries,
              fastEMA,
              slowEMA,
              signalEMA,
              maxLen=None):
     assert (fastEMA > 0)
     assert (slowEMA > 0)
     assert (fastEMA < slowEMA)
     assert (signalEMA > 0)
     super(Macd, self).__init__(maxLen)
     self.__instrument = instrument
     self.__skipNum = max(fastEMA, slowEMA, signalEMA)
     self.__fastEMAWindow = EMAEventWindow(fastEMA)
     self.__slowEMAWindow = EMAEventWindow(slowEMA)
     self.__signalEMAWindow = EMAEventWindow(signalEMA)
     self.__signal = SequenceDataSeries(maxLen)  #dea
     self.__histogram = SequenceDataSeries(maxLen)  #macd
     self.__cross = SequenceDataSeries(
         maxLen)  #dead cross signals and gold cross signals
     self.__close_prices = dataSeries.getPriceDataSeries()
     self.top_divergences = list()
     self.double_top_divergences = list()
     self.bottom_divergences = list()
     self.double_bottom_divergences = list()
     self.cross_detect = CrossDetect()
     self.max_limit_detect = MaxLimitDetect
     self.min_limit_detect = MinLimitDetect
     self.top_divergence_detect = TopDivergenceDetect()
     self.bottom_divergence_detect = BottomDivergenceDetect()
     self.__close_prices.getNewValueEvent().subscribe(self.__onNewValue)
Ejemplo n.º 2
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.º 3
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.º 4
0
    def __init__(self,
                 feed=None,
                 instrument='',
                 shortPeriod=0,
                 longPeriod=0,
                 money=None,
                 longAllowed=True,
                 shortAllowed=True):
        strategy.BacktestingStrategy.__init__(self, feed)

        self.position_cost = 0  #mid init position value

        mid_DEFAULT_MAX_LEN = 10 * DEFAULT_MAX_LEN
        self.__instrument = instrument
        self.__longPosition = None
        self.__shortPosition = None

        self.__position_volume = SequenceDataSeries(
            maxLen=mid_DEFAULT_MAX_LEN)  #mid 当前持有头寸数量
        self.__position_cost = SequenceDataSeries(
            maxLen=mid_DEFAULT_MAX_LEN)  #mid 当前持有头寸开仓成本
        self.__position_pnl = SequenceDataSeries(
            maxLen=mid_DEFAULT_MAX_LEN)  #mid 当前持有头寸价值
        self.__portfolio_value = SequenceDataSeries(maxLen=mid_DEFAULT_MAX_LEN)
        self.__buy = SequenceDataSeries(maxLen=mid_DEFAULT_MAX_LEN)
        self.__sell = SequenceDataSeries(maxLen=mid_DEFAULT_MAX_LEN)

        self.__buySignal = False
        self.__sellSignal = False
        self.money = money
        self.longAllowed = True
        self.shortAllowed = True
        #mid 计算ma将使用当天的收盘价格计算
        #mid 1)
        dataSeries = feed[instrument]
        dataSeries.setMaxLen(mid_DEFAULT_MAX_LEN)
        closeSeries = dataSeries.getOpenDataSeries()
        #mid 2)
        prices = closeSeries
        prices.setMaxLen(mid_DEFAULT_MAX_LEN)
        #mid 3)
        self.__sma = ma.SMA(prices, shortPeriod, maxLen=mid_DEFAULT_MAX_LEN)
        self.__lma = ma.SMA(prices, longPeriod, maxLen=mid_DEFAULT_MAX_LEN)

        self.i = 0
    def initEa(self, timeFrom=None, timeTo=None):

        feeds = self.getFeeds(timeFrom=timeFrom, timeTo=timeTo)

        instrument = self.instrument

        strategy.BacktestingStrategy.__init__(self, feeds[instrument])
        self.mid_DEFAULT_MAX_LEN = 10 * DEFAULT_MAX_LEN

        mid_DEFAULT_MAX_LEN = self.mid_DEFAULT_MAX_LEN

        #mid 计算ma将使用当天的收盘价格计算
        #mid 1)
        feed = feeds[instrument]
        dataSeries = feed[instrument]
        dataSeries.setMaxLen(mid_DEFAULT_MAX_LEN)
        closeSeries = dataSeries.getCloseDataSeries()
        #mid 2)
        prices = closeSeries
        prices.setMaxLen(mid_DEFAULT_MAX_LEN)
        self.closePrices = prices

        #mid follow vars will be used in subclass
        self.timeFrom = timeFrom
        self.timeTo = timeTo

        self.instrument = instrument
        self.longPosition = None
        self.shortPosition = None
        self.buySignal = False
        self.sellSignal = False

        #mid follow vars will be used only this class
        self.__curPositionCost = 0  #mid init position value
        mid_DEFAULT_MAX_LEN = self.mid_DEFAULT_MAX_LEN
        self.__position_volume = SequenceDataSeries(
            maxLen=mid_DEFAULT_MAX_LEN)  #mid 当前持有头寸数量
        self.__position_cost = SequenceDataSeries(
            maxLen=mid_DEFAULT_MAX_LEN)  #mid 当前持有头寸开仓成本
        self.__position_pnl = SequenceDataSeries(
            maxLen=mid_DEFAULT_MAX_LEN)  #mid 当前持有头寸价值
        self.__portfolio_value = SequenceDataSeries(maxLen=mid_DEFAULT_MAX_LEN)
        self.__buy = SequenceDataSeries(maxLen=mid_DEFAULT_MAX_LEN)
        self.__sell = SequenceDataSeries(maxLen=mid_DEFAULT_MAX_LEN)
Ejemplo n.º 6
0
def metric_goquant_to_backtest(metric_data_series):
    ret = SequenceDataSeries()
    for i, v in metric_data_series.items():
        ret.appendWithDateTime(i, v)
    return ret
Ejemplo n.º 7
0
 def __init_pivot_levels(levels, maxLen=None):
     return {l: SequenceDataSeries(maxLen) for l in levels}
Ejemplo n.º 8
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.º 9
0
    def initEa(self, timeFrom=None, timeTo=None):
        self.results = {}
        feed = self.getFeedNew(timeFrom=timeFrom, timeTo=timeTo)
        self.mid_DEFAULT_MAX_LEN = 10 * DEFAULT_MAX_LEN
        mid_DEFAULT_MAX_LEN = self.mid_DEFAULT_MAX_LEN

        #mid set init cash
        cash_or_brk = 1000000
        volumeLimit = 0.5  #mid used to calculate available volume for an order: availableVolume = volumeLeft * volumeLimit
        #mid set fillstrategy
        fillStrategy = fillstrategy.DefaultStrategy(volumeLimit=volumeLimit)

        broker = backtesting.Broker(cash_or_brk, feed)
        broker.setFillStrategy(fillStrategy)
        #mid init base
        strategy.BacktestingStrategy.__init__(self, feed, broker)

        #mid 计算ma将使用当天的收盘价格计算
        #mid 1)
        self.closePrices = {}
        self.longPosition = {}
        self.shortPosition = {}
        self.buySignal = {}
        self.sellSignal = {}
        self.timeFrom = timeFrom
        self.timeTo = timeTo
        #mid follow vars will be used only this class
        self.__portfolio_value = SequenceDataSeries(
            maxLen=mid_DEFAULT_MAX_LEN)  #mid 记录资产组合(cash + 各个持仓证券的价值和)的合计价值变化
        self.__available_cash = SequenceDataSeries(
            maxLen=mid_DEFAULT_MAX_LEN)  #mid 记录资产组合的现金变化

        self.__long_exitBar_pnl = {}  #mid 多头平仓bar产生的pnl
        self.__long_position_volume = {}  #mid 当前多头数量
        self.__long_position_cost = {}  #mid 当前持有多头开仓成本
        self.__long_position_currentBar_pnl = {}  #mid 当前持有多头当前bar产生的pnl
        self.__long_position_pnl = {}  #mid 当前多头累计产生的pnl

        self.__short_exitBar_pnl = {}
        self.__short_position_volume = {}  #mid 当前持有头寸数量
        self.__short_position_cost = {}  #mid 当前持有头寸开仓成本
        self.__short_position_currentBar_pnl = {}  #mid 当前持有头寸价值
        self.__short_position_pnl = {}

        self.__position_cumulativePNL = {
        }  #mid 当前 symbol 持有头寸cumulative pnl 价值(包括该symbol多头和空头的所有开仓平仓产生的pnl)
        self.__buy = {}
        self.__sell = {}

        for instrument in self.instruments:
            dataSeries = feed[instrument]

            dataSeries.setMaxLen(mid_DEFAULT_MAX_LEN)
            closeSeries = dataSeries.getCloseDataSeries()
            #mid 2)
            prices = closeSeries
            prices.setMaxLen(mid_DEFAULT_MAX_LEN)

            #mid follow vars will be used in subclass
            self.closePrices[instrument] = prices
            self.longPosition[instrument] = None
            self.shortPosition[instrument] = None
            self.buySignal[instrument] = False
            self.sellSignal[instrument] = False

            #mid follow vars will be used only this class
            self.__long_exitBar_pnl[instrument] = None
            self.__short_exitBar_pnl[instrument] = None
            self.__long_position_volume[instrument] = SequenceDataSeries(
                maxLen=mid_DEFAULT_MAX_LEN)  #mid 当前持有头寸数量
            self.__short_position_volume[instrument] = SequenceDataSeries(
                maxLen=mid_DEFAULT_MAX_LEN)  #mid 当前持有头寸数量
            self.__long_position_cost[instrument] = SequenceDataSeries(
                maxLen=mid_DEFAULT_MAX_LEN)  #mid 当前持有头寸开仓成本
            self.__short_position_cost[instrument] = SequenceDataSeries(
                maxLen=mid_DEFAULT_MAX_LEN)  #mid 当前持有头寸开仓成本
            self.__long_position_currentBar_pnl[
                instrument] = SequenceDataSeries(
                    maxLen=mid_DEFAULT_MAX_LEN)  #mid 当前持有头寸价值
            self.__short_position_currentBar_pnl[
                instrument] = SequenceDataSeries(
                    maxLen=mid_DEFAULT_MAX_LEN)  #mid 当前持有头寸价值
            self.__short_position_pnl[instrument] = SequenceDataSeries(
                maxLen=mid_DEFAULT_MAX_LEN)
            self.__long_position_pnl[instrument] = SequenceDataSeries(
                maxLen=mid_DEFAULT_MAX_LEN)
            self.__position_cumulativePNL[instrument] = SequenceDataSeries(
                maxLen=mid_DEFAULT_MAX_LEN)
            self.__buy[instrument] = SequenceDataSeries(
                maxLen=mid_DEFAULT_MAX_LEN)
            self.__sell[instrument] = SequenceDataSeries(
                maxLen=mid_DEFAULT_MAX_LEN)