vnpy交易接口學習


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM