iQuant 極速策略交易平臺(tái),以下簡(jiǎn)稱 iQuant 平臺(tái),本文檔主要介紹 iQuant 平臺(tái) Python API 的使用方法。內(nèi)容較多,可使用 Ctrl + F 進(jìn)行關(guān)鍵字搜索。
(相關(guān)資料圖)
iQuant 平臺(tái)與其他普通股票軟件最大的不同點(diǎn)就是其提供歷史數(shù)據(jù)下載、模型編輯、模型回測(cè)、模型交易、算法交易及交易風(fēng)控等完整量化交易功能。通過(guò) iQuant 平臺(tái),用戶可以快速的將自己的轉(zhuǎn)化為計(jì)算機(jī)代碼,形成自己的交易策略,讓計(jì)算機(jī)幫助用戶實(shí)現(xiàn)策略的回測(cè)檢驗(yàn)并實(shí)現(xiàn)無(wú)人值守自動(dòng)化交易。
在量化策略編寫語(yǔ)言的支持上,iQuant 平臺(tái)目前支持 Python 。在后續(xù)的規(guī)劃中,iQuant 平臺(tái)將全面支持市面上主流的量化編程語(yǔ)言。
隨著量化在國(guó)內(nèi)的深入發(fā)展以及大量專業(yè)編程人員進(jìn)入量化這個(gè)領(lǐng)域,市場(chǎng)上的量化投資者對(duì) Python 的需求越來(lái)越大,iQuant 平臺(tái) 的 Python API 就是為了滿足這部分投資者而量身打造。iQuant 平臺(tái)的 Python API 既可以高效使用 iQuant 平臺(tái)底層的數(shù)據(jù)接口及交易接口,也可以方便地引入 Python 支持的第三方庫(kù),極大地便利了量化投資者的模型策略需求。
1. 創(chuàng)建策略
1.1. 策略示例
1.1.1. 一個(gè)簡(jiǎn)單的 Python 策略
簡(jiǎn)單的Python策略
上圖展示了如何在 iQuant 平臺(tái)上用 Python 寫一個(gè)輸出 hello world 的模型。圖中的模型實(shí)現(xiàn)了一個(gè) Python 模型 必須實(shí)現(xiàn)的兩個(gè)接口:** init()** 與 handlebar()。輸出窗口展示了這個(gè)模型的運(yùn)行輸出。平臺(tái)首先調(diào)用 init() 方法輸出了 hello init,隨后在每根 K 線上調(diào)用一次 handlebar() ,輸出一次 hello handlebar。
1.2. 運(yùn)行機(jī)制
1.2.1. 重要概念
(1)Bar的概念
我們把單根 K 線稱之為 Bar,每根 Bar 由 tick(分筆)組成。
分鐘 Bar 示例
iQuant 平臺(tái)的模型是根據(jù)行情驅(qū)動(dòng),逐 K 線運(yùn)行,每根 K 線調(diào)用一次 Python 模型中的 handlebar(ContextInfo) 函數(shù)。
根據(jù)選擇的運(yùn)行周期不同,handlebar(ContextInfo) 函數(shù)的運(yùn)行次數(shù)也不同。如選擇在日線上運(yùn)行策略,則 handlebar(ContextInfo) 函數(shù)每天被調(diào)用一次(盤中雖會(huì)每個(gè) tick 調(diào)用一次,但只有最后一個(gè) tick 才會(huì)判定交易函數(shù)是否被調(diào)用)。
(2)Init
init是一個(gè)Python模型的初始化方法。在模型加載的時(shí)候,平臺(tái)會(huì)調(diào)用init方法,做一些必要的初始化,比如初始化股票池、初始化資金賬號(hào)、初始化全局變量等。如果用戶的模型無(wú)需做初始化,可以在方法體中寫pass,但方法的定義必須存在,否則模型的運(yùn)行會(huì)報(bào)錯(cuò)。
Init 初始化
(3)Handlebar
handlebar 是整個(gè) Python 模型中的核心執(zhí)行函數(shù)。當(dāng)模型從數(shù)據(jù)層獲取到運(yùn)行所需要的數(shù)據(jù)之后,會(huì)對(duì)數(shù)據(jù)集上的每一根 bar,調(diào)用一次 handlebar 函數(shù),處理當(dāng)前這根 bar 上的數(shù)據(jù)。也就是說(shuō),用戶模型的核心邏輯都是寫在該函數(shù)中的,如獲取數(shù)據(jù),設(shè)置下單條件等。在 handlebar 中處理完數(shù)據(jù)后,用戶可以通過(guò) paint 方法將需要繪圖輸出的結(jié)果返回給界面。界面會(huì)將輸出結(jié)果如實(shí)的展示出來(lái)。
(4)ContextInfo
ContextInfo 是整個(gè) Python 框架中的一個(gè)核心對(duì)象。它包含了各種與 Python 底層框架交互的 API 方法,也是一個(gè)全局的上下文環(huán)境,可以在 init 以及 handlebar 這兩個(gè)函數(shù)中自由地傳遞用戶創(chuàng)建的各種自定義數(shù)據(jù)。
用戶在界面上提交請(qǐng)求后,在最終看到結(jié)果前會(huì)經(jīng)歷兩步:
(1)創(chuàng)建模型,初始化環(huán)境,發(fā)送數(shù)據(jù)請(qǐng)求;
(2)數(shù)據(jù)到達(dá)后,調(diào)用 Python 的 init 函數(shù)進(jìn)行 Python 初始化,然后運(yùn)行 handlebar 方法;
ContextInfo 是 Python 模型中的全局對(duì)象,其中封裝了 benchmark,universe 等變量,也封裝了 get_history_data 等重要函數(shù),是 init 與 handlebar 之間,以及各個(gè) handlebar 之間進(jìn)行信息傳遞的重要載體。用戶也可以在其中封裝自己想要定義的全局變量或函數(shù),但注意不要與原有的重名。
init 和 handlebar 是 Python 模型中最重要的方法,也是唯二由 C++ 直接調(diào)用的方法,所有的執(zhí)行代碼都盡量寫在這兩個(gè)方法中或由其中的函數(shù)調(diào)用。
init 是 Python 的初始化方法,負(fù)責(zé)初始化模型運(yùn)行所需的初始變量,如對(duì)于基準(zhǔn) benchmark 和股票池 universe 的初始化。
handlebar 是 Python 的核心執(zhí)行函數(shù)。在 K 線圖上運(yùn)行時(shí)會(huì)根據(jù)主圖的時(shí)間軸,每個(gè)時(shí)間點(diǎn)會(huì)進(jìn)入相應(yīng)的 handlebar 方法,可在 handlebar 中使用 ContextInfo.barpos 來(lái)獲取當(dāng)前的 bar 索引位置。
獲取當(dāng)前 Bar 位置
*注:
索引:索引的作用相當(dāng)于圖書(shū)的目錄,可以根據(jù)目錄中的頁(yè)碼(索引號(hào))快速找到所需的內(nèi)容。
時(shí)間戳:時(shí)間戳是指格林威治時(shí)間 1970 年 01 月 01 日 00 時(shí) 00 分 00 秒(北京時(shí)間 1970 年 01 月 01 日 08 時(shí) 00 分 00 秒)起至現(xiàn)在的總秒數(shù)。通俗的講,時(shí)間戳是一份能夠表示一份數(shù)據(jù)在一個(gè)特定時(shí)間點(diǎn)已經(jīng)存在的完整的可驗(yàn)證的數(shù)據(jù)。
iQuant 平臺(tái)模型是根據(jù)行情驅(qū)動(dòng),逐 K 線運(yùn)行的。即點(diǎn)擊運(yùn)行模型時(shí),模型是從第 0 根 K 線開(kāi)始運(yùn)行到最后一根 K 線(如想加快模型運(yùn)行速度,可以策略編輯器 - 基本信息中設(shè)置快速計(jì)算,限制計(jì)算范圍,只計(jì)算最新的指定數(shù)量的 K 線范圍),每根 K 線調(diào)用一次 Python 模型中的 handlebar(ContextInfo) 函數(shù)。
逐 K 線運(yùn)行:從第 0 根 K 線一直調(diào)用 handlebar(ContextInfo) 運(yùn)行到最后一根
在盤中,最后一根 K 線每變動(dòng)一次,handlebar(ContextInfo) 函數(shù)被執(zhí)行一次。這根 K 線的最后一個(gè) tick 判定模型信號(hào)是否成立,如果模型信號(hào)成立,交易函數(shù)被調(diào)用,則在下一根 K 線的第一個(gè) tick 發(fā)出下單信號(hào),生成下單任務(wù)。
每個(gè) tick 數(shù)據(jù)來(lái)時(shí),最后一根 K 線會(huì)隨著變動(dòng)
一個(gè)模型判定:當(dāng)收盤價(jià) > 開(kāi)盤價(jià)時(shí)產(chǎn)生模型信號(hào)觸發(fā)下單
如上圖,當(dāng)盤中運(yùn)行到最后一根 K 線的時(shí)候,每個(gè) tick 數(shù)據(jù)來(lái)時(shí)都會(huì)判定一下這個(gè)條件是否成立,當(dāng)不是這根 K 線的最后一個(gè) tick,之前的所有的 tick 成立的產(chǎn)生的信號(hào)就是虛的信號(hào)。只有當(dāng)這個(gè) K 線確定時(shí),產(chǎn)生的信號(hào)才是有效信號(hào),才會(huì)觸發(fā)下單。
模型運(yùn)行在日 K 線周期及日 K 線以上周期時(shí),因?yàn)槭窃谙乱桓?K 線的第一個(gè) tick(最新行情 tick )發(fā)出下單信號(hào),而下一個(gè) K 線就是第二日了。所以模型運(yùn)行當(dāng)日無(wú)法下單,除非:
(1)設(shè)置 passorder 函數(shù)中的 quickTrade 參數(shù)為 1 ,立即下單;
(2)使用 do_order(ContextInfo) 函數(shù)。
quickTrade 參數(shù)設(shè)置為 1 可實(shí)現(xiàn)最后一根 K 線沒(méi)有走完生成的模型信號(hào)也發(fā)出下單信號(hào)。
do_order(ContextInfo) 函數(shù)被調(diào)用后會(huì)把上一根 K 線生成的模型信號(hào)立刻發(fā)出,且只發(fā)一次,解決交易函數(shù)必須是在下一根 K 線的第一個(gè) tick 數(shù)據(jù)時(shí)發(fā)信號(hào)的問(wèn)題。
標(biāo)簽:
Copyright © 2015-2022 太平洋獸藥網(wǎng) 版權(quán)所有 備案號(hào):豫ICP備2022016495號(hào)-17 聯(lián)系郵箱:93 96 74 66 9@qq.com