一、搭建一個簡單的交易策略
1、策略
-
先看一個非常簡單的交易策略:
每天買100股的平安銀行。
-
為了讓這個策略能讓計算機執行,首先,要使策略符合“初始化+周期循環”框架,像這樣:
初始化:選定要交易的股票為平安銀行 每天循環:買100股的平安銀行
2、什么是“初始化+周期循環”框架?
-
為了將投資靈感高效地轉化成計算機可執行的量化策略,必須基於一種模式來寫,框架就是指這種模式。而此框架包含兩個部分即初始化與周期循環:
-
初始化即指策略最開始運行前要做的事。比如,准備好要交易的股票。
-
周期循環即指策略開始后,隨着時間一周期一周期地流逝時,每個周期要做的事。如例中,周期為天,周期循環的則是每天買100股的平安銀行。
-
能幫助你理解這一框架的是,其實人本身日常做交易就是符合“初始化+周期循環”框架的,初始化就是已存在人腦的交易思想與知識,周期循環就是每天或每分鍾地查看行情、判斷、下單等行為。
3、如何把策略變成計算機可執行的程序?
-
通過編程將策略寫成計算機可識別的代碼,具體說,我們這里是用python這門編程語言。
-
另外可以用聚寬的向導式策略生成器,這種方法是不需編程的,但靈活性上難免是遠不如寫代碼的。
4、如何將策略寫成代碼?
“初始化+周期循環”框架代碼的兩種寫法:
1.寫法一
def initialize(context): 這里是用來寫初始化代碼的地方,例子中就是選定要交易的股票為平安銀行 def handle_data(context,data): 這里是用來寫周期循環代碼的地方,例子中就是買100股的平安銀行
2.寫法二
def initialize(context): run_daily(period,time='every_bar') 這里是用來寫初始化代碼的地方,例子中就是選定要交易的股票為平安銀行 def period(context): 這里是用來寫周期循環代碼的地方,例子中就是買100股的平安銀行
5、代碼應該往哪里寫
1.來到聚寬網站后,通過導航欄-我的策略-策略列表,點擊新建策略
2.進入策略編輯頁,左側就是策略代碼編輯區域,初始會默認給你提供代碼模板,全刪除后寫入我們的代碼就好了。
6、兩種寫法用哪個好?
-
寫法一是從前的老寫法,將逐步棄用,寫法二是聚寬系統改進后的新寫法,推薦使用寫法二。
二、利用框架編寫完整的策略
1、編寫代碼
1.選定要交易的股票為平安銀行
g.security = '000001.XSHE'
2.買100股的平安銀行(市價單寫法):
order(g.security, 100)
3.以寫法二為例把剩下的代碼補上后,完整代碼為
# 導入函數庫 from jqdata import * # 初始化函數,設定基准等等 def initialize(context): run_daily(period,time='every_bar') # 選定要交易的股票為平安銀行 g.security = '000001.XSHE' def period(context): # 買100股的平安銀行(市價單寫法) order(g.security, 100)
2、設置好初始資金與起止時間
比如初始資金100000元,起止時間20160601-20161231),頻率設置成天。點擊編譯運行,運行結束后就可以看到結果
可以看到,若你20160601有初始資金100000元,每個交易日嘗試買100股的平安銀行,到20161231,你的收益曲線將如圖中藍線般增長。圖中紅線是基准收益(默認是滬深300指數,代表整個市場增長水平)
3、接下來,點擊運行回測,運行結束后就可以看到更為詳細的結果,包括下單記錄、持倉記錄等。
4、回測、編譯運行、運行回測都是什么意思?
-
像剛剛那樣,用一段時間內的歷史的真實行情數據,來驗證一個確定的交易策略在這段時間表現如何,這個過程叫回測。
-
運行回測就是是字面意思,讓計算機運行這次回測,運行后會告訴你策略在這段時間表現情況,比如收益率、年化收益率、最大回撤、夏普比率等指標,而且一般也會包括下單記錄、持倉記錄等。
-
編譯運行其實也是讓計算機運行這次回測,不過相比於點擊運行回測,編譯運行的結果比運行回測要簡單,只有收益率等指標,因此也速度更快。所以,當還不必要得到詳細的結果時,或只是想調試下策略的代碼,看是否無誤可運行時,編譯運行就比運行回測更方便。