def test_for_best_parameter(dest_instrument, feed): """ 多线程测试指定范围里的最佳参数 """ def parameters_generator(): instrument = [dest_instrument] SMA = range(5, 30) return itertools.product(instrument, SMA, [10000]) local.run(MyStrategy, feed, parameters_generator())
def grid_search(code, start_date, end_date): data = get_data(code, start_date, end_date) if data is None: return feed = dataFramefeed.Feed() feed.addBarsFromDataFrame(code, data) brk = gen_broker(feed) local.run(KDJStrategy, feed, parameters_generator(code, brk, data), workerCount=2)
def testLocal(self): barFeed = yahoofeed.Feed() instrument = "orcl" barFeed.addBarsFromCSV(instrument, common.get_data_file_path("orcl-2000-yahoofinance.csv")) res = local.run(sma_crossover.SMACrossOver, barFeed, parameters_generator(instrument, 5, 100)) self.assertEquals(round(res.getResult(), 2), 1295462.6) self.assertEquals(res.getParameters()[1], 20)
def MyBackTest(): instrument = "mro" mystrategy = rsi2.RSI2 feed = yahoofeed.Feed() #add esv for i in range(2000,2013): year = str(i) datafilename = MyFiles.dataPath+instrument+"-"+year+"-"+MyFiles.dataFlag+".csv" if not os.path.exists(datafilename): print "not exists:"+ datafilename return else: feed.addBarsFromCSV(instrument,datafilename) local.run(mystrategy, feed, parameters_generator())
def test(isOptimize=True, win=9): if isOptimize: # 寻找最佳参数 results = local.run(SVMStrategy, feed, parameters_generator()) print 'Parameters:', results.getParameters(), 'Result:', results.getResult() print results.getParameters()[0] else: # 用最佳参数回测 testWithBestParameters(win=win)
def backtest(strategyClass, is_optimization, is_tick, start_date, end_date, symbol, frequency, position_size, lb, i): if is_tick: feed = bitbf.CSVTradeFeed() feed.addBarsFromCSV("../xbtusd_trades.csv", 'XBTUSD', fromDateTime=start_date, toDateTime=end_date) else: feed = GenericBarFeed(bar.Frequency.MINUTE, maxLen=10000) feed.setColumnName('datetime', 'Date') feed.setDateTimeFormat('%Y-%m-%dT%H:%M:%S.%fZ') feed.setBarFilter(csvfeed.DateRangeFilter(start_date, end_date)) feed.addBarsFromCSV("XBTUSD", "../BITMEX_SPOT_BTC_USD_1MIN.csv") if is_optimization: strat = local.run(strategyClass, feed, parameters_generator(), workerCount=None, logLevel=10, batchSize=1) print(strat.getResult(), strat.getParameters()) else: strat = strategyClass(feed, None, symbol, int(frequency), position_size, lb, i) strat.run()
def testFailingStrategy(self): barFeed = yahoofeed.Feed() instrument = "orcl" barFeed.addBarsFromCSV( instrument, common.get_data_file_path("orcl-2000-yahoofinance.csv")) res = local.run(FailingStrategy, barFeed, parameters_generator(instrument, 5, 100)) self.assertIsNone(res)
def run_bband(code, from_year, end_year): #instrument = '300104.SZ' instrument = code + (".SS" if (code[0:3] == '600') else ".SZ") feed = yahoofinance.build_feed([instrument], from_year, end_year, "./data") #run = local.run(rsi2.RSI2, feed, parameters_generator()) print 'run in ' run = local.run(bbandsAll.BBandsAll, feed, parameters_generator_bBandsPeriod_list(instrument)) print 'run result:', run.getParameters(), run.getResult() return run
def argument_for_multiple(): feed = yahoofeed.Feed() for code in code_list: feed.addBarsFromCSV(code, csv_path + "%s_hfq.csv" % code) if strategy_name == "Ma_Rsi": arg_set = "&" ma_short = list(range(3, 10)) ma_long = list(range(10, 25)) rsi_in = list(range(3, 10)) rsi_out = list(range(10, 25)) generators = itertools.product(code_list, arg_set, ma_short, ma_long, rsi_in, rsi_out) local.run(MyStrategy.Ma_Rsi, feed, generators) elif strategy_name == "Macd_Kdj": arg_set = "&" kdj_fast = list(range(3, 10)) kdj_slow = list(range(10, 25)) macd_fast = list(range(3, 10)) macd_slow = list(range(10, 30)) generators = itertools.product(code_list, arg_set, kdj_fast, kdj_slow, macd_fast, macd_slow) local.run(MyStrategy.Macd_Kdj, feed, generators) elif strategy_name == "Ma_Macd": arg_set = "&" ma_short = list(range(3, 10)) ma_long = list(range(10, 25)) macd_fast = list(range(3, 10)) macd_slow = list(range(10, 30)) generators = itertools.product(code_list, arg_set, ma_short, ma_long, macd_fast, macd_slow) local.run(MyStrategy.Ma_Macd, feed, generators)
from pyalgotrade.broker import backtesting from pyalgotrade.optimizer import local from pytrade.algorithms.donchianchannels import DonchianTradingAlgorithm from pytrade.base import TradingSystem codes = ["ABEV3", "BBAS3", "BBDC3", "BBDC4", "BBSE3", "BRAP4", "BRFS3", "BRKM5", "BRML3", "BVMF3", "CCRO3", "CIEL3", "CMIG4", "CPFE3", "CPLE6", "CSAN3", "CSNA3", "CTIP3", "CYRE3", "ECOR3", "EGIE3", "EMBR3", "ENBR3", "EQTL3", "ESTC3", "FIBR3", "GGBR4", "GOAU4", "HYPE3", "ITSA4", "ITUB4", "JBSS3", "KLBN11", "KROT3", "LAME4", "LREN3", "MRFG3", "MRVE3", "MULT3", "NATU3", "PCAR4", "PETR3", "PETR4", "QUAL3", "RADL3", "RENT3", "RUMO3", "SANB11", "SBSP3", "SMLE3", "SUZB5", "TIMP3", "UGPA3", "USIM5", "VALE3", "VALE5", "VIVT4", "WEGE3"] feed = googlefeed.Feed() rowFilter = lambda row: row["Close"] == "-" or row["Open"] == "-" or row["High"] == "-" or row["Low"] == "-" or row["Volume"] == "-" for code in codes: datafile = './googlefinance/' + code + '-2015.csv' print "Downloading %s ..." % (datafile) # googlefinance.download_daily_bars(code, 2015, datafile) feed.addBarsFromCSV(code, datafile, timezone=None, rowFilter=rowFilter) class DonchianStrategyOptimizer(TradingSystem): def __init__(self, feed, entrySize, exitSize, riskFactor): broker = backtesting.Broker(10000, feed, backtesting.FixedPerTrade(10)) super(DonchianStrategyOptimizer, self).__init__(feed=feed, broker=broker, tradingAlgorithm=DonchianTradingAlgorithm(feed, broker, entrySize, exitSize, riskFactor), debugMode=False) entrySize = range(10, 60) exitSize = range(5, 30) riskFactor = [float(x)/100 for x in range(1, 11)] # entrySize = range(15, 40) # exitSize = range(8, 25) # riskFactor = [float(x)/100 for x in range(1, 11)] result = local.run(DonchianStrategyOptimizer, feed, itertools.product(entrySize, exitSize, riskFactor), workerCount=6) print "Best result is R$%s with parameters %s" %(result.getResult(), result.getParameters())
time_estimator(outparams) return itertools.product(instruments, cash, shortlen, longlen, a1, a3) # feed, instruments, cash, shortlen, longlen, sha1, sha2, sha3, la1, la2, la3) def parameters_generator(): instrument = ["dia"] entrySMA = range(150, 251) exitSMA = range(5, 16) rsiPeriod = range(2, 11) overBoughtThreshold = range(75, 96) overSoldThreshold = range(5, 26) return itertools.product(instrument, entrySMA, exitSMA, rsiPeriod, overBoughtThreshold, overSoldThreshold) # The if __name__ == '__main__' part is necessary if running on Windows. if __name__ == '__main__': instruments = ['JCI'] # Load the feed from the CSV files. feed = daq.build_stock_feed(instruments, (2006, 2011)) # local.run(strategies.EMACrossover, feed, # EMACrossoverParams(instruments), workerCount=None) local.run(strategies.SLTRIXCrossover, feed, SLTRIXCrossoverParams(instruments), workerCount=None)
# Source: http://gbeced.github.io/pyalgotrade/docs/v0.17/html/tutorial.html#optimizing # Accessed: 06/10/16 0520Z import itertools from pyalgotrade.optimizer import local from pyalgotrade.barfeed import yahoofeed import rsi2 def parameters_generator(): instrument = ["dia"] entrySMA = range(150, 251) exitSMA = range(5, 16) rsiPeriod = range(2, 11) overBoughtThreshold = range(75, 96) overSoldThreshold = range(5, 26) return itertools.product(instrument, entrySMA, exitSMA, rsiPeriod, overBoughtThreshold, overSoldThreshold) # The if __name__ == '__main__' part is necessary if running on Windows. if __name__ == '__main__': # Load the feed from the CSV files. feed = yahoofeed.Feed() feed.addBarsFromCSV("dia", "dia-2009.csv") feed.addBarsFromCSV("dia", "dia-2010.csv") feed.addBarsFromCSV("dia", "dia-2011.csv") local.run(rsi2.RSI2, feed, parameters_generator())
def main(): feed = csvfeed.GenericBarFeed(frequency=Frequency.MINUTE) feed.addBarsFromCSV("BTC", "sampledata.csv") # Plot the strategy. local.run(Accumulator, feed, parameters_generator())
All rights reserved. ******************************************************************************* """ from pyalgotrade.optimizer import local from pyalgotrade.barfeed import sina_feed as sf import itertools import os from samples.statstical import ArimaGarch import logging def param_generator(): instrument = ["FG0"] # window = range(250, 888) window = range(500, 888) # window = [300, 400, 500, 600, 700, 800, 888] return itertools.product(instrument, window) if __name__ == '__main__': instrument = "FG0" feed = sf.Feed() csv_path = os.path.abspath( '../histdata/commodity') + '/' + instrument + '.csv' # feed = sf.Feed(frequency=bar.Frequency.MINUTE) feed = sf.Feed() feed.addBarsFromCSV(instrument, csv_path) a = param_generator() local.run(ArimaGarch, feed, param_generator())
tradingAlgorithm=DonchianTradingAlgorithm( feed, broker, entrySize, exitSize, riskFactor), debugMode=False) entrySize = range(10, 60) exitSize = range(5, 30) riskFactor = [float(x) / 100 for x in range(1, 11)] # entrySize = range(15, 40) # exitSize = range(8, 25) # riskFactor = [float(x)/100 for x in range(1, 11)] result = local.run(DonchianStrategyOptimizer, feed, itertools.product(entrySize, exitSize, riskFactor), workerCount=6) print "Best result is R$%s with parameters %s" % (result.getResult(), result.getParameters()) ########################################################## #######SMA ########################################################## class SMAStrategyOptimizer(TradingSystem): def __init__(self, feed, longsize, shortsize, riskfactor): broker = backtesting.Broker(10000, feed, backtesting.FixedPerTrade(10)) super(SMAStrategyOptimizer, self).__init__(feed=feed, broker=broker, tradingAlgorithm=SMATradingAlgorithm(
import itertools import utility.windutility as wu from utility import dataframefeed from pyalgotrade import bar from pyalgotrade.optimizer import local from strategy import singleMA instruments = ['000001.SH'] fromDate = '20000101' toDate = '20160314' frequency = bar.Frequency.DAY feed = dataframefeed.Feed() maPeriod = xrange(5,120) for instrument in instruments: data = wu.wsd(instrument, 'open, high, low, close, volume, adjfactor', fromDate, toDate) data['adjclose'] = data['close'] * data['adjfactor'] / data['adjfactor'][-1] feed.addBarsFromDataFrame(instrument, data) def parameters_generator(): return itertools.product(instruments, maPeriod) if __name__ == '__main__': local.run(singleMA.SingleMA, feed, parameters_generator())
import RSIpietro def parameters_generator(): instrument = ["orcl"] entrySMA = range(150, 251) exitSMA = range(5, 16) rsiPeriod = range(2, 11) overBoughtThreshold = range(75, 96) overSoldThreshold = range(5, 26) return itertools.product(instrument, entrySMA, exitSMA, rsiPeriod, overBoughtThreshold, overSoldThreshold) # The if __name__ == '__main__' part is necessary if running on Windows. if __name__ == '__main__': # Load the feed from the CSV files. feed = yahoofeed.Feed() feed.addBarsFromCSV("orcl", "C:\\Users\\Spe\\PycharmProjects\\AlgoPietro\\algoPackage\\data\\orcl-2000.csv") feed.addBarsFromCSV("orcl", "C:\\Users\\Spe\\PycharmProjects\\AlgoPietro\\algoPackage\\data\\orcl-2001.csv") feed.addBarsFromCSV("orcl", "C:\\Users\\Spe\\PycharmProjects\\AlgoPietro\\algoPackage\\data\\orcl-2002.csv") feed.addBarsFromCSV("orcl", "C:\\Users\\Spe\\PycharmProjects\\AlgoPietro\\algoPackage\\data\\orcl-2003.csv") feed.addBarsFromCSV("orcl", "C:\\Users\\Spe\\PycharmProjects\\AlgoPietro\\algoPackage\\data\\orcl-2004.csv") feed.addBarsFromCSV("orcl", "C:\\Users\\Spe\\PycharmProjects\\AlgoPietro\\algoPackage\\data\\orcl-2005.csv") feed.addBarsFromCSV("orcl", "C:\\Users\\Spe\\PycharmProjects\\AlgoPietro\\algoPackage\\data\\orcl-2006.csv") feed.addBarsFromCSV("orcl", "C:\\Users\\Spe\\PycharmProjects\\AlgoPietro\\algoPackage\\data\\orcl-2007.csv") feed.addBarsFromCSV("orcl", "C:\\Users\\Spe\\PycharmProjects\\AlgoPietro\\algoPackage\\data\\orcl-2008.csv") feed.addBarsFromCSV("orcl", "C:\\Users\\Spe\\PycharmProjects\\AlgoPietro\\algoPackage\\data\\orcl-2009.csv") feed.addBarsFromCSV("orcl", "C:\\Users\\Spe\\PycharmProjects\\AlgoPietro\\algoPackage\\data\\orcl-2010.csv") local.run(RSIpietro.RSIpietro, feed, parameters_generator())
self.info("Sell shares at $%.2f" % (tradeInfo.getPrice())) self.position = None def onBars(self, bars): if self.slowsma[-1] is None: return if self.position is None: if self.fastsma[-1] > self.slowsma[-1]: self.position = self.enterLong(self.instrument, 10, True) elif self.fastsma[-1] < self.slowsma[ -1] and not self.position.exitActive(): self.position.exitMarket() # Create Parameter Combinations using itertools def parameters(): nfast = (5, 10, 15, 20, 25, 30) nslow = (20, 25, 30, 40, 50, 100) return itertools.product(nfast, nslow) # Use optimizer from pyalgotrade # If__name__ == '__main__': only needed for Windows if __name__ == '__main__': instruments = ["NIFTY"] # Data Reading feed = csvfeed.GenericBarFeed(bar.Frequency.DAY) feed.addBarsFromCSV(instruments[0], "Data//NIFTY.csv") # Strategy Optimization local.run(MAStrategy, feed, parameters())
#############################################don't change ############################33 from pyalgotrade.cn import csvfeed from pyalgotrade.barfeed import yahoofeed from pyalgotrade.tools import yahoofinance barfeed = csvfeed.Feed(frequency) barfeed.setDateTimeFormat('%Y-%m-%d %H:%M:%S') # feed = csvfeed.Feed(frequency) #feed = yahoofeed.Feed() #feed.addBarsFromCSV("dia",'gdx-2009-yahoofinance.csv') barfeed.loadBars(instrument, market, fromDate, toDate, filepath) if __name__ == "__main__": local.run(thrSMA.thrSMA, barfeed, parameters_generator()) """ #############################################path set ############################33 import os if frequency == bar.Frequency.MINUTE: path = os.path.join('..', 'histdata', 'minute') elif frequency == bar.Frequency.DAY: path = os.path.join('..', 'histdata', 'day') filepath = os.path.join(path, instrument + market + ".csv") #############################################don't change ############################33 from pyalgotrade.cn.csvfeed import Feed
# The if __name__ == '__main__' part is necessary if running on Windows. if __name__ == '__main__': # Config params config = { 'user': '******', 'password': '******', 'host': '127.0.0.1', 'database': 'ibex35', 'raise_on_warnings': True, } logger.log_format = "[%(levelname)s] %(message)s" startDate = datetime.date(2001, 05, 24) endDate = datetime.date(2015, 12, 21) instrument = 'GAS.MC' feed = None if DBFEED: feed = dbfeed.DbFeed(config, [], 100, startDate, endDate) feed.registerInstrument(instrument) else: feed = yahoofeed.Feed() feed.sanitizeBars(True) feed.addBarsFromCSV(instrument, instrument + ".csv") local.run(MyTaLibStrategy, feed, parameters_generator())
# The if __name__ == '__main__' part is necessary if running on Windows. if __name__ == '__main__': # Config params config = { 'user': '******', 'password': '******', 'host': '127.0.0.1', 'database': 'ibex35', 'raise_on_warnings': True, } logger.log_format = "[%(levelname)s] %(message)s" startDate = datetime.date(2001, 05, 24) endDate = datetime.date(2015, 12, 21) instrument = 'GAS.MC' feed = None if DBFEED: feed = dbfeed.DbFeed(config, [], 100, startDate, endDate) feed.registerInstrument(instrument) else: feed = yahoofeed.Feed() feed.sanitizeBars(True) feed.addBarsFromCSV(instrument, instrument + ".csv") local.run(MyBasicStrategy, feed, parameters_generator())
# f. Exit wjen moving average crosses back (regardless of RSI value) #Important Note: maximum value for fastperiod must remain less than the #minimum value for the slowperiod #we want to predict the S&P500 (^GSPC index) instrument = ['AAPL'] fpath = 'C:/Users/Eric/Documents/PyBlockchainProj/' ftype = '.csv' fname = fpath + instrument[0] + ftype #Important Note: maximum value for fastperiod must remain less than the #minimum value for the slowperiod slowPeriod = (50, 60, 80, 100, 150, 170, 200) fastPeriod = (5, 10, 20, 30, 40) rsiPeriod = (2, 3, 5, 7, 10, 14) oversoldThreshold = (10, 20, 30) overboughtThreshold = (70, 80, 90) #===========================================================================# #we can generate all the permutations all = itertools.product(instrument, fastPeriod, slowPeriod, rsiPeriod, overboughtThreshold, oversoldThreshold) #the data is in the CSV file (one row per day) feed = csvfeed.GenericBarFeed(bar.Frequency.DAY) feed.addBarsFromCSV(instrument[0], fname) #we can run the optimization parallel local.run(RSIMovingAverageStrategy, feed, all)
stddev=list(range(20,35)) return itertools.product(instrument,longLine,shortLine,bollingerLenth,stddev) if __name__=='__main__': instrument='002099' stockcode='002099' date=['2016-02-29','2016-03-02','2016-03-11'] path = "../histdata/tick/bak/" # barfeed = tickcsvfeed.TickBarFeed(bar.Frequency.SECOND) barfeed=GenericBarFeed(bar.Frequency.SECOND) for d in date: filepath = path +'stock_'+ stockcode + "_"+d+".csv" barfeed.addBarsFromCSV(instrument, filepath) barfeed.setDateTimeFormat('%Y-%m-%d %H:%M:%S') local.run(bollinger_band,barfeed,parameters_generator())
def testFailingStrategy(self): barFeed = yahoofeed.Feed() instrument = "orcl" barFeed.addBarsFromCSV(instrument, common.get_data_file_path("orcl-2000-yahoofinance.csv")) res = local.run(FailingStrategy, barFeed, parameters_generator(instrument, 5, 100), logLevel=logging.DEBUG) self.assertIsNone(res)
import itertools from pyalgotrade.optimizer import local from pyalgotrade.barfeed import yahoofeed import rsi2 def parameters_generator(): instrument = ["dia"] entrySMA = range(150, 251) exitSMA = range(5, 16) rsiPeriod = range(2, 11) overBoughtThreshold = range(75, 96) overSoldThreshold = range(5, 26) return itertools.product(instrument, entrySMA, exitSMA, rsiPeriod, overBoughtThreshold, overSoldThreshold) # The if __name__ == '__main__' part is necessary if running on Windows. if __name__ == '__main__': # Load the feed from the CSV files. feed = yahoofeed.Feed() feed.addBarsFromCSV("dia", "dia-2009.csv") feed.addBarsFromCSV("dia", "dia-2010.csv") feed.addBarsFromCSV("dia", "dia-2011.csv") local.run(rsi2.RSI2, feed, parameters_generator())
import itertools from pyalgotrade.optimizer import local from pyalgotrade.barfeed import yahoofeed from pyalgotrade.tools import yahoofinance from my_sma_crossover import * def parameters_generator(): instrument = ["ivv"] entrySMA = range(5, 20) exitSMA = range(5, 20) return itertools.product(instrument, entrySMA, exitSMA) # The if __name__ == '__main__' part is necessary if running on Windows. if __name__ == '__main__': # Download the bars. feed = yahoofinance.build_feed(["ivv"], 2008, 2009, ".") local.run(SMACrossOver2, feed, parameters_generator())
def enterLongSignal(self, bar): return bar.getClose() > self.__entrySMA[-1] and self.__rsi[-1] <= self.__overSoldThreshold def exitLongSignal(self, bar): return bar.getClose() > self.__exitSMA[-1] def enterShortSignal(self, bar): return bar.getClose() < self.__entrySMA[-1] and self.__rsi[-1] >= self.__overBoughtThreshold def exitShortSignal(self, bar): return bar.getClose() < self.__exitSMA[-1] def parameters_generator(): entrySMA = range(150, 251) exitSMA = range(5, 16) rsiPeriod = range(2, 11) overBoughtThreshold = range(75, 96) overSoldThreshold = range(5, 26) return itertools.product(entrySMA, exitSMA, rsiPeriod, overBoughtThreshold, overSoldThreshold) # The if __name__ == '__main__' part is necessary if running on Windows. if __name__ == '__main__': # Load the feed from the CSV files. feed = yahoofeed.Feed() feed.addBarsFromCSV("dia", "dia-2009.csv") feed.addBarsFromCSV("dia", "dia-2010.csv") feed.addBarsFromCSV("dia", "dia-2011.csv") local.run(MyStrategy, feed, parameters_generator())
import itertools import utility.windutility as wu from utility import dataframefeed from pyalgotrade import bar from pyalgotrade.optimizer import local from strategy import singleMA instruments = ['000001.SH'] fromDate = '20000101' toDate = '20160314' frequency = bar.Frequency.DAY feed = dataframefeed.Feed() maPeriod = xrange(5, 120) for instrument in instruments: data = wu.wsd(instrument, 'open, high, low, close, volume, adjfactor', fromDate, toDate) data[ 'adjclose'] = data['close'] * data['adjfactor'] / data['adjfactor'][-1] feed.addBarsFromDataFrame(instrument, data) def parameters_generator(): return itertools.product(instruments, maPeriod) if __name__ == '__main__': local.run(singleMA.SingleMA, feed, parameters_generator())