
手把手教你使用【python】在京東量化平臺完成簡單策略回測
今天來教大家使用量化平臺中Python的部分,完成一個簡單的策略回測。
首先,回測界面是長這個樣子的
可以看到,左半邊的大部分區(qū)域是編輯代碼的地方,開發(fā)環(huán)境會自動識別Python語言的關(guān)鍵詞。在代碼區(qū)上面的設(shè)置標(biāo)志里面可以個性化調(diào)節(jié)開發(fā)環(huán)境的視覺效果。
Python的回測代碼主要包括init()函數(shù),handle_data()函數(shù),以及其他用戶自定義內(nèi)容。如果在每天開盤前要進(jìn)行額外的處理或計算,可選擇添加before_trade()函數(shù)。
def init(context):
# 這里用來寫策略開始時要做什么
注釋
其中,init()是初始化函數(shù),可以設(shè)置基準(zhǔn),滑點,傭金等回測參數(shù),也可以利用context自定義變量。在Python及大部分其他編程語言中,在局部變量只在該變量定義的函數(shù)體有效,在其他函數(shù)體內(nèi)是無效的。而context被定義為一個局部變量,可以把內(nèi)容在不同函數(shù)代碼之間傳導(dǎo)。該函數(shù)在回測開始時運行一次。
def handle_data(context, data_dict):
# 這里用來寫每天開盤后要做什么,可以是計算,輸出日志,或者下單
注釋
handle_data()是每個交易時間點(分鐘/日)時自動運行一次的函數(shù),可以在此函數(shù)內(nèi)設(shè)置交易判斷和下單,是策略核心邏輯所在。
def before_trade(context):
# 非強制,在這里寫每天開盤之前要做什么,不可下單
注釋
用戶可以按照Python語言規(guī)則定義其他函數(shù),包括運算/數(shù)據(jù)處理函數(shù),也可以通過task()函數(shù)設(shè)置自定義函數(shù)的執(zhí)行頻率和執(zhí)行時間。
III、編譯策略代碼
1、確定策略框架內(nèi)容
舉個栗子,用一個簡單的策略為例來演示這個過程。
策略的內(nèi)容是對貴州茅臺(600519.SH)進(jìn)行擇時
如果前一天收益率大于滬深300收益率,則買入持倉
如果前一天收益率小于滬深300收益率,則不持倉。
只買賣一只股票操作是很簡單的。首先,我們在init()函數(shù)里面設(shè)置我們的股票(貴州茅臺(600519.SH))和比較標(biāo)的(滬深300(000300.SH)):
# init方法是您的初始化邏輯。context對象可以在任何方法之間傳遞。
def init(context):
context.stock = '600519.SH'
context.set_benchmark = '000300.SH'
注釋
1)只要在“#”后面的內(nèi)容都是注釋,不會被Python編譯
2)設(shè)置stock和set_benchmark對象時,一定要在前面加上“context.”,這樣才能傳遞到之后的函數(shù)中。設(shè)置標(biāo)的后,回測中的基準(zhǔn)曲線和收益將采用設(shè)置的指數(shù)。
2、確認(rèn)每個交易日的邏輯:
l 獲取目標(biāo)股票和標(biāo)的的歷史價格
# 日或分鐘或?qū)崟r數(shù)據(jù)更新,將會調(diào)用這個方法
def handle_data(context, data_dict):
price = get_history(2, '1d', 'close')[context.stock]
priceBm = get_history(2, '1d', 'close')[context.set_benchmark]
注釋
1)其中context.stock和context.set_benchmark都在init()函數(shù)中定義好了。
2)get_history()函數(shù)是京東量化平臺封裝的取歷史交易數(shù)據(jù)的函數(shù)。其中“2”代表要取歷史兩天的數(shù)據(jù),以便計算上個交易日的收益?!啊?d’”和“'close’”分別表示數(shù)據(jù)頻率為天,所需數(shù)據(jù)為收盤價。
3)返回的價格為pandas.Series類型。各個平臺函數(shù)的使用方法可以查看幫助板塊中的API文檔。
l 定義收益率
為了方便計算收益率,自定義了一個CalRet()函數(shù),輸入連續(xù)兩天的價格,計算第二天的收益率:
def CalRet(price):
r = (price[1] - price[0]) / price[0]
return r
注釋
1)這段函數(shù)寫在handle_data()之前。自定義函數(shù)編輯的語法符合Python語法即可。
2)這個函數(shù)會返回float類型的r。
l 計算目標(biāo)股票和標(biāo)的的收益率
我們回到handle_data()函數(shù),利用剛剛定義的函數(shù)和獲取的股票及指數(shù)價格計算收益率:
ytdRet = CalRet(price)
bmRet = CalRet(priceBm)
注釋
1)以上函數(shù)可以得到上個交易日股票的收益率ytdRet和指數(shù)收益率bmRet。
3、確認(rèn)股票買入賣出的邏輯:
如果ytdRet大于bmRet,則全倉買入平安銀行股票,否則清倉
if ytdRet > bmRet:
order_target_percent(context.stock, 1)
else:
order_target_percent(context.stock, 0)
注釋
1)order_target_percent()是量化平臺編輯的下單函數(shù),可以設(shè)置某個股票的倉位至一個百分比。
2)平臺同樣支持加減倉,用手?jǐn)?shù),金額等方式下單,詳見API文檔。
4、確認(rèn)所有策略邏輯
以上,所有的策略邏輯就完成啦!
def init(context):
context.stock = '600519.SH'
context.set_benchmark = '000300.SH'
def handle_data(context, data_dict):
price = get_history(2, '1d', 'close')[context.stock]
priceBm = get_history(2, '1d', 'close')[context.set_benchmark]
ytdRet = CalRet(price)
bmRet = CalRet(priceBm)
if ytdRet > bmRet:
order_target_percent(context.stock, 1)
else:
order_target_percent(context.stock, 0)
def CalRet(price):
r = (price[1] - price[0]) / price[0]
return r
完成簡單的策略回測
現(xiàn)在,我們就完成了這個策略的設(shè)計?;販y平臺會自動按照這個邏輯,在回測區(qū)間內(nèi)完成交易。
選定回測的時間區(qū)間。初始金額以及調(diào)倉頻率,如下圖
我們設(shè)置回測區(qū)間為2015年1月1日-2016年1月1日,初始金額為一百萬,調(diào)倉頻率為每天,點擊“運行回測”。結(jié)果如下:
注釋
1)回測:策略回測就是拿到證券市場歷史的財務(wù)數(shù)據(jù)、行情數(shù)據(jù),對現(xiàn)有的策略進(jìn)行歷史回測檢驗,通過回測結(jié)果來修正自己的策略,從而驗證策略在過去市場的有效性以及穩(wěn)定性。
2)回測輸出結(jié)果
I、我們可以看到在回測區(qū)間內(nèi),策略和基準(zhǔn)的凈值曲線,每天盈虧,買賣等圖像,以及回測的技術(shù)指標(biāo)。同時可以查看相對收益,對數(shù)收益等。
II、在左邊的交易詳情,持倉和輸出日志中可以看到回測中的具體情況,方便進(jìn)行歸因分析,調(diào)整策略等等,同時還可以查看歷史回測記錄。
III、我們可以看到,這個策略能夠跑贏大盤。當(dāng)然,這只是一個例子。
3)回測的評判
I、收益,回測收益和基準(zhǔn)收益的對比,收益越高盈利能力越強
II、最大回撤,最大回撤要低,越低代表虧損幅度越低,策略越穩(wěn)定
III、交易頻率,點擊交易詳情可以查看策略交易的頻次,頻率越高,策略越穩(wěn)定
III、把回測的策略發(fā)布到策略榜,還可以分析策略的晨星風(fēng)格及收益歸因分析,多角度的判斷策略的好壞
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動決策的時代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計的實用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時代,BI ...
2025-07-10SQL 在預(yù)測分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢預(yù)判? ? 在數(shù)據(jù)驅(qū)動決策的時代,預(yù)測分析作為挖掘數(shù)據(jù)潛在價值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點,而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗:捕捉數(shù)據(jù)背后的時間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗:數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對策略? 長短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨特的門控機制,在 ...
2025-07-07統(tǒng)計學(xué)方法在市場調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場調(diào)研是企業(yè)洞察市場動態(tài)、了解消費者需求的重要途徑,而統(tǒng)計學(xué)方法則是市場調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03