一、前言陸續(xù)寫了幾篇關(guān)于極星量化的文章,但似乎并沒有寫清楚如何入門。這里就寫一篇全備一點的入門教程,幫大家零基礎(chǔ)入門,順便就是記錄點心得。 整個內(nèi)容分為三個部分: 1、下載安裝和簡介 2、簡單的界面操作 3、常用函數(shù)介紹 注:極星量化是基于python的,好歹會點編程才玩的轉(zhuǎn),不過現(xiàn)用現(xiàn)學(xué)也不是不可以。 二、 下載安裝和簡介 1、下載安裝 官網(wǎng)下載鏈接:http://www./download?ver=q 需要注意的是要下載的是“極智量化”,而不是極星9.5。 從結(jié)構(gòu)上來說,目前的極智量化是極星9.5+極智量化,因為量化的運行還需要9.5客戶端的支持才行,所以安裝極智量化的同時就自動安裝了9.5客戶端。
下載完成后啟動安裝包就自動安裝了,安裝路徑?jīng)]得選。 2、程序結(jié)構(gòu)
打開安裝目錄可以看到主要包含三個文件夾,其中 epolestar:極星9.5的程序目錄 equant:量化的目錄 Miniconda:python的環(huán)境管理 注1:因為使用了miniconda來管理極智量化的python運行環(huán)境,所以你不需要額外的去安裝python或管理運行環(huán)境,不過若你需要使用python的擴展包就要使用miniconda的pip來安裝,路徑在: “.\Miniconda\Scripts\pip.exe” 3、簡介 1. 極星9.5量化是開源的,所有代碼都在equant目錄下的src目錄,有機會可以再寫個源碼解析。 2. 極智量化目前是基于9.5的,但不清楚取行情和做交易是否是借用的9.5的通道,還是他自己就能獨立做了。反正以后肯定是要獨立運作的。 3. 與市面上其他主流量化平臺相比,極智量化有三個優(yōu)點: 1)結(jié)合極星9.5,這樣在使用量化時可以同步繪制K線圖,還可以自定義一些標(biāo)記、指標(biāo)線在K線上做分析 2)基于python,這樣可擴展性其實很強,很多強大的量化包可以直接使用 3)規(guī)定好了代碼結(jié)構(gòu),這個好處是不需要自己去寫回調(diào)和觸發(fā),常用的功能函數(shù)(取行、畫K線、發(fā)委托等)都封裝好了,門檻一下又降低許多 其實其他量化平臺也都有上述三個特點,但最多只占一兩個,三個全齊的目前就只有極智量化。 三、簡單的界面操作 1、啟動 安裝好后,雙擊“極智量化1.1.0”啟動,這時候啟動的其實是極星9.5,然后在上方的功能欄中點擊“量化>極星量化”啟動量化平臺。
啟動量化后,極星9.5的界面自動跳轉(zhuǎn)到“程序化1”頁面。
這里的程序化1、程序化2、程序化3就是策略運行時的K線展示,默認就是顯示的“基準(zhǔn)合約”,至于啥是基準(zhǔn)合約后面再說。 在極星9.5的程序化頁面中你可以右鍵鼠標(biāo)選取當(dāng)前運行的策略來做K線的切換,因為你可以同時運行多個策略嘛,那顯示哪一個策略的K線是可以選的。
2、極智量化窗口介紹 整個窗口的布局還是比較常規(guī)的,右側(cè)的函數(shù)介紹和函數(shù)檢索功能很實用,里面的介紹也很詳細。策略文件中有一些示例教程,可以先按個看一遍熟悉下常用的函數(shù)。 下方的策略管理可以右鍵運行的策略進行“啟動、停止、刪除”操作,另外還有“投資報告、圖表展示、屬性設(shè)置”,因為我沒咋用這三個功能就不詳細說了。 需要額外說明的是“消息日志”和“報錯信息”。 1. 運行日志>用戶日志 這里顯示的就是LogInfo函數(shù)輸出的信息了,這個完全由用戶自己掌控。 2. 運行日志>信號日志 這里顯示的是python運行過程中輸出的信息,比如有一個list為空,但你做了個取值的操作list[1],這樣的error在python層面,他不會主動報錯到“錯誤信息”里提示你。所以有時候發(fā)現(xiàn)運行異常,但沒有主動報錯信息,可以到這里看看是不是運行過程中有些操作不合法。 3. 運行日志>系統(tǒng)日志 這里顯示的是量化平臺自己的日志信息,比如現(xiàn)在啟動了量化它會有個日志記錄,取到了行情會有個記錄,取不到也會有記錄。比如你合約代碼寫錯了,就是在這個地方提示你“取不到合約”的數(shù)據(jù)或者“提交合約時發(fā)生異?!?。所以如果代碼運行異常又沒有明顯的提示,可以到這里看看是不是哪些參數(shù)設(shè)置錯了。 4. 錯誤信息 這里就是代碼中有語法錯誤,運行不起來會在這里給出提示,而且代碼不會繼續(xù)執(zhí)行。 綜上,除了錯誤信息外,策略運行過程中還需要關(guān)注“信號日志”和“系統(tǒng)日志”,由于量化是一個運行框架(按既定節(jié)奏運行固定代碼),所以很多內(nèi)部錯誤無法拋出來提示。 3、運行一個策略試試 我們運行一個簡單的示例策略“AvrHighLow.py”,內(nèi)容是輸出K線最大值和最小值的平均值。 打開策略文件后,點擊右上角的“運行”按鈕。
此時會先彈出一個“屬性”設(shè)置窗口,啥也不用管直接點“確定”即可。然后你就會發(fā)現(xiàn)界面自動切換到了9.5的“程序化1”頁面,但是是空白的啥也沒有,然后也沒有報錯信息。
這時候就需要到運行日志里去看了,你會發(fā)現(xiàn)在系統(tǒng)日志中有error信息,原來是合約設(shè)置錯誤,"DCE|F|I|1909"這個合約早就過期了,現(xiàn)在系統(tǒng)里沒有這個合約編號,自然是取不到數(shù)據(jù)的。
我們修改合約編號為“DCE|F|I|2001",再運行下就能看到K線了,并且用戶日志中會輸出平均值。
四、常用函數(shù)介紹 1、觸發(fā)函數(shù) 量化一般包含四個過程:初始化、歷史數(shù)據(jù)處理、即時數(shù)據(jù)處理、策略結(jié)束處理。極智量化使用了四個預(yù)設(shè)的觸發(fā)函數(shù)來實現(xiàn)這四個過程,分別是: def initialize(context): 初始化函數(shù),初始化數(shù)值、參數(shù)或者訂閱行情就在這里做 def handle_data(context): 數(shù)據(jù)處理函數(shù),處理K線數(shù)據(jù)就是在這里做的,一般是來一個K線數(shù)據(jù)就觸發(fā)一次這個函數(shù) def hisover_callback(context): 歷史數(shù)據(jù)結(jié)束時觸發(fā)的函數(shù) def exit_callback(context): 策略結(jié)束時觸發(fā)的函數(shù),手動關(guān)閉策略時會觸發(fā) 2、初始化initialize 一般初始化中就只做行情訂閱并設(shè)置觸發(fā)方式, SetBarInterval 行情訂閱 SetTriggerType 觸發(fā)方式,這里設(shè)置的是handle_data的觸發(fā)方式 需要注意的是,點擊運行后彈出的“屬性設(shè)置”窗口,其實里面的內(nèi)容與初始化差不多,如果你在初始化里做了設(shè)置,就不要在“屬性設(shè)置”中做重復(fù)的設(shè)置,系統(tǒng)會使兩個設(shè)置都生效,比如你在initialize設(shè)置了“K線觸發(fā)”,在“屬性設(shè)置”窗口又設(shè)置了“即時行情觸發(fā)”,系統(tǒng)會使兩個設(shè)置都生效,最后的結(jié)果是K線和即時行情都會觸發(fā)handle_data。同理行情訂閱也是一個道理。 3、數(shù)據(jù)處理handle_data 極智量化的數(shù)據(jù)處理邏輯是這樣的,如果你訂閱了歷史行情,那就先觸發(fā)歷史的數(shù)據(jù),接著觸發(fā)最新的數(shù)據(jù)。比如訂閱了2000根歷史K線,同時觸發(fā)方式為K線觸發(fā)。那么handle_data這里會先收到2000個歷史K線數(shù)據(jù),而且這些數(shù)據(jù)是一個接一個來的,也就是handle_data會先被觸發(fā)2000次,你可以通過Open、Close等函數(shù)獲取歷史K線的數(shù)據(jù)。然后每當(dāng)你訂閱的行情有新的K線生成,就會觸發(fā)一次handle_data,通過Open、Close獲取的數(shù)據(jù)就會包含了最新的K線數(shù)據(jù)。 4、回測結(jié)束處理hisover_callback 如果你訂閱了歷史數(shù)據(jù),那么歷史數(shù)據(jù)會先觸發(fā)handle_data,當(dāng)歷史數(shù)據(jù)獲取完畢會觸發(fā)一次hisover_callback函數(shù)。所以我一般是這樣做,訂閱行情時訂閱2000個歷史K線,但觸發(fā)設(shè)置這里我改為“即時行情觸發(fā)”。那么歷史K線不會觸發(fā)handle_data,當(dāng)歷史K線獲取完畢后在hisover_callback中處理歷史數(shù)據(jù)。 5、策略結(jié)束處理exit_callback 手動停止策略時觸發(fā),一般用于保存數(shù)據(jù)什么的。 6、其他常用函數(shù) Open,獲取K線上bar的開盤價,返回的是一個數(shù)組,最新價可以通過Open[-1]獲取 Close,K線上bar的收盤價,與Open類似 HisData,一次性獲取所有歷史數(shù)據(jù),如果在hisover_callback中就是你訂閱的歷史數(shù)據(jù),如果在handle_data中就是訂閱的歷史數(shù)據(jù)和已經(jīng)收到的K線數(shù)據(jù) PlotNumeric,在K線上輸出一個數(shù)值,其實這個可以畫指標(biāo)線,輸出的數(shù)值連起來就是一個指標(biāo)線了 PlotBar,繪制一個bar A_SendOrder,發(fā)送一個委托單 DeleteAllOrders,批量撤單 A_OrderStatus,查詢委托的狀態(tài) 7、如何得到合約的編碼 比如“DCE|F|I|2001" DCE是交易所編碼 F表明是期貨 I是品種編碼 2001是合約編碼 可以自己拼,如果不知道怎么拼,可以在“屬性設(shè)置>合約設(shè)置>增加>商品代碼”中找到所有合約的編碼。
8、訂閱多個行情的問題 前面的示例就只訂閱了一個行情,那如果訂閱了兩個會發(fā)生什么呢? 1)首先9.5的“程序化1”頁面只會顯示基準(zhǔn)合約,也就是你訂閱的第一個合約K線。 2)其次像Open、Close這些函數(shù)如果不指明合約編號就默認使用“基準(zhǔn)合約”。 3)如果你訂閱了歷史行情,那么不是第一個合約先取完再取第二個,也不是輪流獲取,而是隨機獲取。即一會來幾個A合約的K線,一會來幾個B合約的K線,隨機的。所以對于多行情訂閱的情況最好在hisover_callback里處理歷史數(shù)據(jù)。 4)對于實時階段,兩個合約的任何一個行情發(fā)生變化都會觸發(fā)handle_data函數(shù)。 5)如果在代碼里設(shè)置行情就不要在屬性設(shè)置里再設(shè)置了。 五、總結(jié) 本文總結(jié)了這段時間操作極星9.5量化的一點心得,量化平臺里自帶的示例教程可以先看看,然后我寫了一個畫K線的教程和簡單止盈的策略,有注釋可以參考看下。 自定義套利的K線繪制 https://www.cnblogs.com/cation/p/12181835.html 滾動止盈策略 https://www.cnblogs.com/cation/p/12185279.html |
|