對于大部分人來說笨忌,量化交易是非常陌生與神秘的。本篇文章將帶你入門量化交易俱病,全文閱讀約10分鐘官疲。
本篇文章內(nèi)容摘要:
1.理解量化策略的基本框架。
2.十行代碼完成雙均線策略編寫亮隙。
3.開啟策略模擬交易途凫,實(shí)時(shí)接收交易信號(hào)。
1.理解量化策略的基本框架
通常情況下溢吻,完整的量化交易策略至少需要確定兩件事:
A.交易標(biāo)的维费,即買什么;
B.確定交易時(shí)機(jī)促王,即怎么買賣犀盟。
讓我們來設(shè)計(jì)一個(gè)簡單完整的雙均線量化交易策略:
策略交易標(biāo)的:通策醫(yī)療;
策略交易時(shí)機(jī):5日均線與20日均線金叉時(shí)蝇狼,買入阅畴;5日均線與20日均線死叉時(shí),賣出迅耘。
2.十行代碼完成雙均線策略
第一步:登錄MindGo量化交易平臺(tái)贱枣,導(dǎo)航欄上點(diǎn)擊“我的策略”—“策略研究”,點(diǎn)擊右上角藍(lán)色按鈕“+新建策略”颤专,再點(diǎn)擊已創(chuàng)建的策略進(jìn)入策略編譯器頁面纽哥,如下:
第二步:理解量化交易策略框架對應(yīng)的代碼框架。
def init(context):
? ? #初始化函數(shù):確定交易標(biāo)的
def handle_bar(context, bar_dict):
? ? #定時(shí)運(yùn)行函數(shù):確定交易時(shí)機(jī)
框架理解:
1.def init(context)與def handle_bar(context, bar_dict)是兩個(gè)函數(shù)栖秕,函數(shù)格式固定為:def 函數(shù)名(參數(shù))春塌,其中def后面帶空格鍵,函數(shù)末尾必須帶冒號(hào)簇捍。
2.def init(context)函數(shù)是初始化函數(shù)只壳,只運(yùn)行一次,確定初始化條件垦写;def handle_bar(context, bar_dict)函數(shù)是定時(shí)運(yùn)行函數(shù)吕世,平臺(tái)默認(rèn)該函數(shù)定時(shí)運(yùn)行彰触。日級(jí)策略梯投,每日9:30;分鐘級(jí)策略,交易期間內(nèi)的每分鐘分蓖。
3.“#”后面為注釋內(nèi)容尔艇,用于注釋代碼,便于編寫和閱讀么鹤。
第三步:確定交易標(biāo)的:g.stock = '600763.SH'
溫馨提示:
1.g是全局對象终娃,該對象用于存放自定義參數(shù)。這里我們需要確定交易標(biāo)的蒸甜,即:g.stock = '600763.SH'
def init(context):
? ? g.stock = '600763.SH'
def handle_bar(context, bar_dict):
? ? #定時(shí)運(yùn)行函數(shù):確定交易時(shí)機(jī)
第四步:確定交易時(shí)機(jī)棠耕,即為:5日均線與20日均線金叉時(shí),買入柠新;5日均線與20日均線死叉時(shí)窍荧,賣出。 從交易時(shí)機(jī)出發(fā)恨憎,我們需要計(jì)算交易標(biāo)的5日和20日均線蕊退,那么5、20日均線需要用歷史行情數(shù)據(jù)的收盤價(jià)來計(jì)算憔恳。
整個(gè)流程即:獲取歷史行情20日的收盤價(jià)數(shù)據(jù)———計(jì)算5瓤荔、20日均線———判斷5、20日均線钥组,進(jìn)行買賣交易输硝。
A.獲取歷史行情20日的收盤價(jià)數(shù)據(jù):
1.找到函數(shù)歷史數(shù)據(jù)函數(shù):history()
2.填寫函數(shù)參數(shù),獲取到數(shù)據(jù):
i.交易標(biāo)的程梦,即:獲取那個(gè)股票的數(shù)據(jù)腔丧。
ii.數(shù)據(jù)字段:['close']收盤價(jià),即:獲取那個(gè)數(shù)據(jù)作烟。
iii.輸入歷史長度愉粤,即:獲取多長時(shí)間的數(shù)據(jù)。
iv.獲取數(shù)據(jù)的時(shí)間步長拿撩,即:獲取日線級(jí)步長數(shù)據(jù)衣厘。
v.最終結(jié)果即為:history(g.stock, ['close'] , 20, '1d')
3.將獲取到的數(shù)據(jù)儲(chǔ)存,便于計(jì)算压恒,即:price = history(g.stock, ['close'] , 20, '1d')
#獲取證券過去20日的收盤價(jià)數(shù)據(jù)? ?
price = history(g.stock, ['close'] , 20, '1d')
B.計(jì)算5影暴、20日均線:
1.獲取數(shù)據(jù)值,即:price.values探赫。values可以直接獲取儲(chǔ)存中的數(shù)據(jù)值型宙,格式為price.values。溫馨提示:price是我們剛才獲取的數(shù)據(jù)伦吠,但是數(shù)據(jù)有股票妆兑、時(shí)間魂拦、數(shù)值,我們直接用values獲取值用于計(jì)算即可搁嗓。
2.選取數(shù)據(jù)長度芯勘,即:price.values[-5:]。[]用于取值腺逛,我們之前獲取20個(gè)數(shù)據(jù)荷愕,但5日均線只需要過去5日的收盤價(jià),因此[-5:]即為獲取倒數(shù)第五個(gè)到最后一個(gè)數(shù)據(jù)棍矛。溫馨提示:
i.[:]是獲取所有數(shù)據(jù)安疗。
ii.[:x]是從第一個(gè)獲取到第x個(gè),不包括第x個(gè)够委。
iii.[x:y]是從第x個(gè)到第y個(gè)茂契,包括x,但不包括y慨绳。
iv.[-x:]獲取倒數(shù)第x個(gè)到最后一個(gè)數(shù)據(jù)掉冶。
3.計(jì)算均值,即price.values[-5:].mean()脐雪,賦值給MA5厌小。同理MA20=price.values.mean(),即對所有值取平均战秋,相當(dāng)于MA20=close.values[:].mean()璧亚。
#計(jì)算5日均線和20日均線
MA20 = price.values.mean()
MA5 = price.values[-5:].mean()
C.判斷5、20日均線脂信,進(jìn)行買賣交易:
1.if判斷條件癣蟋,即為 if MA5 > MA20:。溫馨提示if判斷函數(shù)的格式為if +添加判斷+:,其中if后面必須帶一個(gè)空格鍵狰闪,其次末尾必須帶冒號(hào)疯搅。
2.當(dāng)MA5大于MA20時(shí),下單買入交易:
i.當(dāng)觸發(fā)MA5大于MA20時(shí)埋泵,我們需要買入股票幔欧,這時(shí)候我們可以使用order_target_percent下單函數(shù),該函數(shù)以目標(biāo)市值百分比下單丽声。
ii.輸入下單函數(shù)的參數(shù)礁蔗,order_target_percent函數(shù)需要輸入兩個(gè)參數(shù):
1.下單的股票,即為g.stock雁社,我們之前將交易標(biāo)的傳入進(jìn)去浴井,可以直接用。
2.目標(biāo)市值百分比霉撵,滿倉即為1
#如果5日大于20日均線磺浙,則滿倉買入
if MA5 > MA20:
? ? order_target_percent(g.stock,1)
3.當(dāng)MA5小于MA20時(shí)洪囤,下單賣出交易:
i.當(dāng)觸發(fā)MA5小于MA20時(shí),我們需要賣出股票屠缭,這時(shí)候我們可以使用order_target下單函數(shù)箍鼓,該函數(shù)以目標(biāo)股數(shù)下單崭参。
ii.輸入下單函數(shù)的參數(shù)呵曹,order_target函數(shù)需要輸入兩個(gè)參數(shù):
1.下單的股票,即為g.stock何暮,我們之前將交易標(biāo)的傳入進(jìn)去奄喂,可以直接用。
2.下單的目標(biāo)股數(shù)海洼,即0跨新,因?yàn)槲覀冃枰獙⒊謧}股票賣出,賣到0股為止坏逢。
#如果5日小于20日均線域帐,則清倉賣出
if MA20 > MA5:
? ? order_target(g.stock,0)
最終結(jié)果:
# 初始化函數(shù)
def init(context):
? ? #設(shè)置需要交易的股票
? ? g.stock = '600763.SH'
#每日運(yùn)行函數(shù)
def handle_bar(context, bar_dict):
? ? #獲取證券過去20日的收盤價(jià)數(shù)據(jù)? ?
? ? price = history(g.stock, ['close'] , 20, '1d')
? ? #計(jì)算5日均線和20日均線
? ? MA20 = price.values.mean()
? ? MA5 = price.values[-5:].mean()
? ? #如果5日大于20日均線,則滿倉買入
? ? if MA5 > MA20:
? ? ? ? order_target_percent(g.stock,1)
? ? #如果5日小于20日均線是整,則清倉賣出
? ? if MA20 > MA5:
? ? ? ? order_target(g.stock,0)
第五步 回測量化交易策略 通過以上4步肖揣,我們已經(jīng)完成了量化交易策略編寫,那么接下來我們需要進(jìn)行量化交易策略回測浮入。
A.首先龙优,我們嘗試去跑通整個(gè)歷史行情,排查代碼錯(cuò)誤事秀。
右上角設(shè)置回測歷史長度彤断,設(shè)置資金,設(shè)置交易頻率易迹。點(diǎn)擊左上角“編譯運(yùn)行”按鈕宰衙,右邊出現(xiàn)量化交易策略在歷史行情中的表現(xiàn)情況
B.當(dāng)量化交易策略能跑通整個(gè)歷史行情后,我們可以確定該代碼正確無誤睹欲,隨后點(diǎn)擊右上角藍(lán)色按鈕“進(jìn)行回測”菩浙。頁面跳轉(zhuǎn)至回測頁面,如下:
3.開啟策略模擬交易句伶,實(shí)時(shí)接收交易信號(hào)
完成策略回測后劲蜻,可在右上角點(diǎn)擊“開啟仿真交易”,即可綁定模擬交易.
在模擬交易頁面右側(cè)考余,可開關(guān)信號(hào)推送先嬉,開啟狀態(tài)下,策略交易信號(hào)通過同花順APP實(shí)時(shí)推送楚堤。