Beispiel #1
0
    def __init__(self, feed, instruments, ind_dt, ts):
        strategy.BacktestingStrategy.__init__(self, feed)

        self.__position = []
        self.__instruments = instruments
        self.__ts = ts
        self.__ydate = ''

        self.lastday = dict()
        self.df = pd.read_csv(ind_dt, dtype={'code': np.str})
        self.tdays = np.array(self.df['Date'].unique())

        self.getBroker().setMaxHoldingDays(5)

        self.__preVol = dict()
        self.__ma120 = dict()
        self.__vol = dict()
        self.__slope = dict()
        self.__returns = dict()
        self.__XT = dict()

        for inst in self.__instruments:
            priceDS = feed[inst].getAdjCloseDataSeries()
            self.__returns[inst] = roc.RateOfChange(priceDS, 1)
            self.__ma120[inst] = ma.SMA(priceDS, 5)

            bars = feed.getDataSeries(inst)
            self.__XT[inst] = xingtai.ShrinkVolRise(bars, 5)
Beispiel #2
0
    def run(self, feed, useAdjustedCloseForReturns=True):
        """Runs the analysis using the bars supplied by the feed.

        :param barFeed: The bar feed to use to run the analysis.
        :type barFeed: :class:`pyalgotrade.barfeed.BarFeed`.
        :param useAdjustedCloseForReturns: True if adjusted close values should be used to calculate returns.
        :type useAdjustedCloseForReturns: boolean.
        """

        try:
            self.__feed = feed
            self.__rets = {}
            self.__futureRets = {}
            for instrument in feed.getRegisteredInstruments():
                self.__events.setdefault(instrument, [])
                self.__futureRets[instrument] = []
                if useAdjustedCloseForReturns:
                    ds = feed[instrument].getAdjCloseDataSeries()
                else:
                    ds = feed[instrument].getCloseDataSeries()
                self.__rets[instrument] = roc.RateOfChange(ds, 1)

            feed.getNewBarsEvent().subscribe(self.__onBars)
            dispatcher = observer.Dispatcher()
            dispatcher.addSubject(feed)
            dispatcher.run()
        finally:
            feed.getNewBarsEvent().unsubscribe(self.__onBars)
Beispiel #3
0
 def __init__(self, feed):
     smaPeriod      = 60
     self.__returns = {}
     self.__volrate = {}
     self.__vXT     = {}
     self.__ma      = {}
     for instrument in feed.getRegisteredInstruments():
         priceDS = feed[instrument].getAdjCloseDataSeries()
         volDS   = feed[instrument].getVolumeDataSeries()
         # Returns over the adjusted close values.
         self.__returns[instrument] = roc.RateOfChange(priceDS, 1)
         self.__volrate[instrument] = roc.RateOfChange(volDS, 1)
         # MA over the adjusted close values.
         self.__ma[instrument] = ma.SMA(priceDS, smaPeriod)
 
         bars = feed.getDataSeries(instrument)
         self.__vXT[instrument] = xingtai.ShrinkVolRise(bars,5)
 def __init__(self, feed, instrument, nper, lowerThreshold, upperThreshold):
     super(ZScoreStrategy, self).__init__(feed)
     self.position = None
     self.instrument = instrument
     self.sma = ma.SMA(feed[instrument].getPriceDataSeries(), nper)
     self.roc = roc.RateOfChange(feed[instrument].getPriceDataSeries(), 1)
     self.zscore = stats.ZScore(self.roc, nper)
     self.lowerThreshold = lowerThreshold
     self.upperThreshold = upperThreshold
Beispiel #5
0
 def __init__(self, feed):
     stdDevPeriod = 90
     smaPeriod = 20
     self.__returns = {}
     self.__stdDev = {}
     self.__ma = {}
     for instrument in feed.getRegisteredInstruments():
         priceDS = feed[instrument].getAdjCloseDataSeries()
         # Returns over the adjusted close values.
         self.__returns[instrument] = roc.RateOfChange(priceDS, 1)
         # StdDev over those returns.
         self.__stdDev[instrument] = stats.StdDev(self.__returns[instrument], stdDevPeriod)
         # MA over the adjusted close values.
         self.__ma[instrument] = ma.SMA(priceDS, smaPeriod)
Beispiel #6
0
    def __init__(self, feed):
        smaPeriod = 30
        self.__returns = {}
        self.__volrate = {}
        self.__ma = {}
        self.__ma250 = {}
        for instrument in feed.getRegisteredInstruments():
            priceDS = feed[instrument].getAdjCloseDataSeries()
            # Returns over the adjusted close values.
            self.__returns[instrument] = roc.RateOfChange(priceDS, 10)
            # MA over the adjusted close values.
            self.__ma[instrument] = ma.SMA(priceDS, smaPeriod)
            self.__ma250[instrument] = ma.SMA(priceDS, 250)

        self.__daysum = {}
        self.__enterDay = []
Beispiel #7
0
    def __init__(self, feed, instrument, bBandsPeriod):
        strategy.BacktestingStrategy.__init__(self, feed)
        self.setDebugMode(False)
        self.__instrument = instrument
        self.__feed = feed
        self.__position = None
        self.__sma = roc.RateOfChange(feed[instrument].getCloseDataSeries(),
                                      15)

        self.__col = [
            "buyPrice", "buyTime", "sellPrice", "sellTime", "returns"
        ]
        self.__msdf = pd.DataFrame(columns=self.__col)
        self.__buyPrice = 0
        self.__buyTime = None
        self.setUseAdjustedValues(True)
Beispiel #8
0
    def __init__(self, feed, instruments):
        super(BuyOnGap, self).__init__()

        stdDevPeriod = 90
        smaPeriod = 20
        self.__returns = {}
        self.__stdDev = {}
        self.__ma = {}
        for instrument in instruments:
            priceDS = feed.getDataSeries(instrument).getAdjCloseDataSeries()
            # Returns over the adjusted close values.
            self.__returns[instrument] = roc.RateOfChange(priceDS, 1)
            # StdDev over those returns.
            self.__stdDev[instrument] = stats.StdDev(
                self.__returns[instrument], stdDevPeriod)
            # MA over the adjusted close values.
            self.__ma[instrument] = ma.SMA(priceDS, smaPeriod)
Beispiel #9
0
    def __init__(self, instrument, feed, brk):
        strategy.BaseStrategy.__init__(self, feed, brk)
        self.__verbosityLevel = 1
        self.__instrument = instrument
        self.__orderSize = 0.2
        self.__targetPricePct = 0.015
        self.__commitPricePct = self.__targetPricePct / 2
        self.__stopLossPct = -0.02
        # Time to wait for BUY order to get filled.
        self.__maxWaitEntry = datetime.timedelta(minutes=3)
        # Maximum holding period.
        self.__maxHoldPeriod = datetime.timedelta(hours=1)

        volatilityPeriod = 5  # How many returns to use to calculate volatility.
        self.returnsVolatility = stats.StdDev(
            roc.RateOfChange(feed[self.__instrument].getCloseDataSeries(), 1),
            volatilityPeriod)

        self.__switchNoPos()
Beispiel #10
0
    def __init__(self, feed, ts=None):
        self.__returns = {}
        self.__volrate = {}
        self.__ma = {}
        self.__ma250 = {}
        for instrument in feed.getRegisteredInstruments():
            priceDS = feed[instrument].getAdjCloseDataSeries()
            # Returns over the adjusted close values.
            self.__returns[instrument] = roc.RateOfChange(priceDS, 1)

        self.__daysum = {}
        self.__enterDay = []
        self.__df = pd.read_csv('data/st.txt', dtype={'code': np.str})
        self.__codeday = {}
        self.__used = set()
        tmparr = []
        for line in open('data/gaiming.txt'):
            tmparr.append(line.strip())

        for i in range(1, len(tmparr)):
            tmp = tmparr[-1 * i].split(',')
            self.__codeday[tmp[0]] = tmp[1]
        self.__ts = ts
Beispiel #11
0
 def __buildROC(self, values, period):
     return roc.RateOfChange(dataseries.SequenceDataSeries(values), period)
Beispiel #12
0
 def __buildROC(self, values, period, rocMaxLen=dataseries.DEFAULT_MAX_LEN):
     seqDS = dataseries.SequenceDataSeries()
     ret = roc.RateOfChange(seqDS, period, rocMaxLen)
     for value in values:
         seqDS.append(value)
     return ret