經過前文對量化交易有了一個基本認識以後,咱們開始學習作量化交易。畢竟就像學游泳,有些東西講是講不懂,作過就會懂。python
因爲本教程是基於聚寬量化交易平臺(www.joinquant.com),因此爲了後續的學習,最好去註冊一個聚寬量化交易平臺的帳號。編程
先看一個很是簡單的交易策略:框架
天天買100股的平安銀行。
爲了讓這個策略能讓計算機執行,首先,要使策略符合「初始化+週期循環」框架,像這樣:編程語言
初始化:選定要交易的股票爲平安銀行 天天循環:買100股的平安銀行
爲了將投資靈感高效地轉化成計算機可執行的量化策略,必須基於一種模式來寫,框架就是指這種模式。而此框架包含兩個部分即初始化與週期循環:函數
初始化即指策略最開始運行前要作的事。好比,準備好要交易的股票。學習
週期循環即指策略開始後,隨着時間一週期一週期地流逝時,每一個週期要作的事。如例中,週期爲天,週期循環的則是天天買100股的平安銀行。網站
能幫助你理解這一框架的是,其實人自己平常作交易就是符合「初始化+週期循環」框架的,初始化就是已存在人腦的交易思想與知識,週期循環就是天天或每分鐘地查看行情、判斷、下單等行爲。debug
經過編程將策略寫成計算機可識別的代碼,具體說,咱們這裏是用python這門編程語言。調試
另外能夠用聚寬的嚮導式策略生成器,這種方法是不需編程的,但靈活性上不免是遠不如寫代碼的。日誌
這並不是三言兩語就能說清,尤爲是對於沒有編程基礎的人。因此咱們將經過後續的內容逐步地介紹。首先咱們將學習「初始化+週期循環」框架代碼的寫法。
寫法一
def initialize(context): 這裏是用來寫初始化代碼的地方,例子中就是選定要交易的股票爲平安銀行 def handle_data(context,data): 這裏是用來寫週期循環代碼的地方,例子中就是買100股的平安銀行
寫法二
def initialize(context): run_daily(period,time='every_bar') 這裏是用來寫初始化代碼的地方,例子中就是選定要交易的股票爲平安銀行 def period(context): 這裏是用來寫週期循環代碼的地方,例子中就是買100股的平安銀行
來到聚寬網站後,經過導航欄-個人策略-個人策略進入策略列表,點擊新建策略-
進入策略編輯頁,左側就是策略代碼編輯區域,初始會默認給你提供代碼模板,全刪除後寫入咱們的代碼就行了。
寫法一是從前的老寫法,將逐步棄用,寫法二是聚寬系統改進後的新寫法,推薦使用寫法二。
def、context等都是什麼意思?
實際上是在調用聚寬提供好的函數,展開講很複雜,不理解的話先記住,後面的學習內容會讓你理解。
剩下的兩行代碼這麼寫。徹底理解須要學習後續的內容,此處不要求理解。知道大概什麼樣子往哪裏寫便可。
選定要交易的股票爲平安銀行:
g.security = '000001.XSHE'
買100股的平安銀行(市價單寫法):
order(g.security, 100)
以寫法二爲例把剩下的代碼補上後,完整代碼爲:
是的。以寫法二爲例,如圖把代碼寫到策略編輯區,設置好初始資金與起止時間(好比初始資金100000元,起止時間20160601-20161231),頻率設置整天。點擊編譯運行,運行結束後就能夠看到結果了。
能夠看到,若你20160601有初始資金100000元,每一個交易日嘗試買100股的平安銀行,到20161231,你的收益曲線將如圖中藍線般增加。圖中紅線是基準收益(默認是滬深300指數,表明整個市場增加水平)
接下來,點擊運行回測,運行結束後就能夠看到更爲詳細的結果,包括下單記錄、持倉記錄等。
首先注意,右上角的箭頭按鈕能展開運行日誌。看到日誌中,最後一行是錯誤的提示信息:
SyntaxError: invalid syntax 漢義是 語法錯誤:不合法的語法
最後一行以前的是錯誤的位置信息,通常只看後面就行。
File "user_code.py", line 1 def initialize(context) ^
意思是文件user_code.py(就是你的策略代碼)的第一行,「^」符號指向的位置有錯。你到代碼中的這個位置看下,會發現少個冒號。
爲了順利運行策略,須要耐心解決錯誤,但錯誤的緣由極度的複雜多樣(因此日誌的報錯信息也多種多樣,不止圖上一種),故在此只針對例子講下新手容易犯的錯誤:
編程界每每把錯誤叫bug,而不斷調試去除錯誤的過程叫debug,作量化時也是時常聽到的說法,你們應該知道下。
像剛剛那樣,用一段時間內的歷史的真實行情數據,來驗證一個肯定的交易策略在這段時間表現如何,這個過程叫回測。
運行回測就是是字面意思,讓計算機運行此次回測,運行後會告訴你策略在這段時間表現狀況,好比收益率、年化收益率、最大回撤、夏普比率等指標,並且通常也會包括下單記錄、持倉記錄等。
編譯運行其實也是讓計算機運行此次回測,不過相比於點擊運行回測,編譯運行的結果比運行回測要簡單,只有收益率等指標,所以也速度更快。因此,當還沒必要要獲得詳細的結果時,或只是想調試下策略的代碼,看是否無誤可運行時,編譯運行就比運行回測更方便。
若是策略頻率爲天,是每一個交易日開始生效,從9:30直到15:00(從股市開市到收市),因此例子中是每一個交易日9:30開市循環就開始,一天一次地循環執行買入股票的操做。
若是策略頻率爲分鐘,是每一個分鐘開始時執行,因此例子中的買入股票的操做是每一個交易日從9:30:00開始,而後9:31:00,直到14:59:00。接着下一天9:30:00,如此一分鐘一次地循環執行的。