1、按照github中環境准備要求,配置好環境要求。
https://github.com/vnpy/vnpy
mongdb安裝在D:\Program Files\MongoDB\Server\3.4 將MongoDB配置為系統服務 http://blog.csdn.net/Tong_T/article/details/78698122
sc.exe create MongoDB binPath= "\"D:\Program Files\MongoDB\Server\3.4\bin\mongod.exe\" --service --config=\"D:\Program Files\MongoDB\mongod.cfg\"" DisplayName= "MongoDB" start= "auto" 電腦配置信息,注意:我電腦是3.6,別人是3.4版本,一點微小差別就導致不成功,一定要細心。
如果自己手動關掉了,可以win+r 運行中輸入 services.msc 啟動mongodb即可。關掉了MySQL57。可視化工具:robomongo
2、安裝完成后將csv數據導入mongo數據庫。
運行 E:\vnpy0413\examples\CtaBacktesting\loadCsv.py文件,python2版本注銷掉__init__.py文件,ctaHistoryData.py采用絕對引用,修改file,python2和3不一樣。
reader = csv.DictReader(open(fileName, 'r',encoding='utf8'))
3、debug runBacktesting.py文件,流程如下:
engine=BacktestingEngine()實例化回測引擎--->
engine.set()參數設置 --->
engine.initStrategy(AtrRsiStrategy,d)策略初始化 --->ctaBacktesting.py initStrategy(self,strategyClass,setting=None)--->strategyAtrRsi.py
self.strategy.onInit()--->self.putEvent() ---->ctaTemplate.py self.ctaEngine.putStrategyEvent(self.name) pass---> self.strategy.onstart() 策略初始化--->
self.putEvent()--->ctaTemplate.py self.ctaEngine.putstrategyEvent(self.name) pass --->
engine.runBacktesting()--->self.runHistoryDataFromMongo()--->host,port,log=loadMongoSetting() --->vtFunction.py 函數 loadMongoSetting()--->
疑問:
7、為什么會有限價字典?
ctaBacktesting.py def SendOrder(*******): **** self.workingLimitOrderDict[key]=order self.limitOrderDict[key]=order
6、停止單是什么意思?為什么會出現?
5、self.symbol self.exchange self.vtSymbol均沒有賦值,是故意的還是中間有問題?
4、ctaTemplate.py中buy方法,DIRECTION_LONG、OFFSET_OPEN,參數在哪里?
解答:在language文件下面constant.py文件中。
3、strategyAtrRsi.py中的onInit方法,有self.putEvent(),這個方法是在哪里寫的?
解答:繼承了父類的ctaTemplate,父類中有putEvent方法。寫法分別如下
strategyAtrRsi.py
def onInit(self): """初始化策略(必須由用戶繼承實現)""" self.writeCtaLog(u'%s策略初始化' %self.name) # 初始化RSI入場閾值 self.rsiBuy = 50 + self.rsiEntry self.rsiSell = 50 - self.rsiEntry # 載入歷史數據,並采用回放計算的方式初始化策略數值 initData = self.loadBar(self.initDays) for bar in initData: self.onBar(bar) self.putEvent()
ctaTemplate.py def putEvent(self): """發出策略狀態變化事件""" self.ctaEngine.putStrategyEvent(self.name)
2、ctaEngine在哪里入的參數呢?為什么實例化的時候不需要入參?
ctaBacktesting.py def initStrategy(self, strategyClass, setting=None): """ 初始化策略 setting是策略的參數設置,如果使用類中寫好的默認設置則可以不傳該參數 """ self.strategy = strategyClass(self, setting) #為什么沒有入ctaEngine的參數呢?
解答:有ctaEngine的參數,就是self,即在初始化策略的時候,把self作為ctaEngine參數傳入策略類中,self.strategy作為策略類的實例化對象,也為回測引擎的屬性。
每個策略類繼承cta策略模板類:ctaTemplate,策略模板類初始化__init__方法的時候傳入ctaEngine和setting,策略類初始化也有__init__方法,為了傳入策略引擎,需要使用super方法初始化父類(策略模板類)的__init__方法。所有如下寫法:
#strategyAtrRsi.py def __init__(self, ctaEngine, setting): """Constructor""" super().__init__(ctaEngine, setting) ctaTemplate.py def __init__(self, ctaEngine, setting): """Constructor""" self.ctaEngine = ctaEngine self.entrust = 0 self.uncompletedOrders = {} if setting: self.writeCtaLog(u'基類設置參數') d = self.__dict__ for key in self.paramList: if key in setting: d[key] = setting[key]
1、vtglobal.py中的 __file__ 是在什么時候賦值的呢?還是說每個py腳本文件都可以這樣寫?
解答:每個腳本文件都可以這樣寫,是獲得該文件所在位置
print(__file__) E:/exercise/call.py