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)
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)
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
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)
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 = []
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)
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)
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()
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
def __buildROC(self, values, period): return roc.RateOfChange(dataseries.SequenceDataSeries(values), period)
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