金融量化分析【day112】:量化交易策略基本框架

摘要

  • 策略編寫的基本框架及其實現
  • 回測的含義及其實現
  • 初步學習解決代碼錯誤
  • 週期循環的開始時間
  • 自測與自學

  • 經過前文對量化交易有了一個基本認識以後,咱們開始學習作量化交易。畢竟就像學游泳,有些東西講是講不懂,作過就會懂。python

  • 因爲本教程是基於聚寬量化交易平臺(www.joinquant.com),因此爲了後續的學習,最好去註冊一個聚寬量化交易平臺的帳號。編程

1、策略編寫的基本框架及其實現

一、從一個很是簡單的交易策略開始

  • 先看一個很是簡單的交易策略:框架

    天天買100股的平安銀行。
  • 爲了讓這個策略能讓計算機執行,首先,要使策略符合「初始化+週期循環」框架,像這樣:編程語言

    初始化:選定要交易的股票爲平安銀行
      天天循環:買100股的平安銀行

二、什麼是「初始化+週期循環」框架?

  • 爲了將投資靈感高效地轉化成計算機可執行的量化策略,必須基於一種模式來寫,框架就是指這種模式。而此框架包含兩個部分即初始化與週期循環:函數

  • 初始化即指策略最開始運行前要作的事。好比,準備好要交易的股票。學習

  • 週期循環即指策略開始後,隨着時間一週期一週期地流逝時,每一個週期要作的事。如例中,週期爲天,週期循環的則是天天買100股的平安銀行。網站

  • 能幫助你理解這一框架的是,其實人自己平常作交易就是符合「初始化+週期循環」框架的,初始化就是已存在人腦的交易思想與知識,週期循環就是天天或每分鐘地查看行情、判斷、下單等行爲。debug

三、如何把策略變成計算機可執行的程序?

  • 經過編程將策略寫成計算機可識別的代碼,具體說,咱們這裏是用python這門編程語言。調試

  • 另外能夠用聚寬的嚮導式策略生成器,這種方法是不需編程的,但靈活性上不免是遠不如寫代碼的。日誌

2、策略編寫的實現

那麼如何將策略寫成代碼?

  • 這並不是三言兩語就能說清,尤爲是對於沒有編程基礎的人。因此咱們將經過後續的內容逐步地介紹。首先咱們將學習「初始化+週期循環」框架代碼的寫法。

  • 寫法一

      def initialize(context):
          這裏是用來寫初始化代碼的地方,例子中就是選定要交易的股票爲平安銀行
    
      def handle_data(context,data):
          這裏是用來寫週期循環代碼的地方,例子中就是買100股的平安銀行
  • 寫法二

      def initialize(context):
          run_daily(period,time='every_bar')
          這裏是用來寫初始化代碼的地方,例子中就是選定要交易的股票爲平安銀行
    
      def period(context):
          這裏是用來寫週期循環代碼的地方,例子中就是買100股的平安銀行

代碼應該往哪裏寫?

    • 來到聚寬網站後,經過導航欄-個人策略-個人策略進入策略列表,點擊新建策略-
      1.jpg

    • 進入策略編輯頁,左側就是策略代碼編輯區域,初始會默認給你提供代碼模板,全刪除後寫入咱們的代碼就行了。
      1.jpg

兩種寫法用哪一個好?

    • 寫法一是從前的老寫法,將逐步棄用,寫法二是聚寬系統改進後的新寫法,推薦使用寫法二。

    • def、context等都是什麼意思?

    • 實際上是在調用聚寬提供好的函數,展開講很複雜,不理解的話先記住,後面的學習內容會讓你理解。

框架寫成代碼了,那例子的完整的代碼該怎麼寫呢?

  • 剩下的兩行代碼這麼寫。徹底理解須要學習後續的內容,此處不要求理解。知道大概什麼樣子往哪裏寫便可。

  • 選定要交易的股票爲平安銀行:

      g.security = '000001.XSHE'
  • 買100股的平安銀行(市價單寫法):

      order(g.security, 100)
  • 以寫法二爲例把剩下的代碼補上後,完整代碼爲:

那麼如今這些代碼就能夠運行了嗎?

  • 是的。以寫法二爲例,如圖把代碼寫到策略編輯區,設置好初始資金與起止時間(好比初始資金100000元,起止時間20160601-20161231),頻率設置整天。點擊編譯運行,運行結束後就能夠看到結果了。
    設置並運行.png

  • 能夠看到,若你20160601有初始資金100000元,每一個交易日嘗試買100股的平安銀行,到20161231,你的收益曲線將如圖中藍線般增加。圖中紅線是基準收益(默認是滬深300指數,表明整個市場增加水平)

  • 接下來,點擊運行回測,運行結束後就能夠看到更爲詳細的結果,包括下單記錄、持倉記錄等。
    回測結果.png

策略出錯不能運行?

  • 策略不能運行時,日誌中會報錯並給出必定的提示信息,像這樣:
    缺乏符號錯誤.png
  • 首先注意,右上角的箭頭按鈕能展開運行日誌。看到日誌中,最後一行是錯誤的提示信息:

      SyntaxError: invalid syntax
    
      漢義是 語法錯誤:不合法的語法
  • 最後一行以前的是錯誤的位置信息,通常只看後面就行。

      File "user_code.py", line 1
          def initialize(context)
                                ^
  • 意思是文件user_code.py(就是你的策略代碼)的第一行,「^」符號指向的位置有錯。你到代碼中的這個位置看下,會發現少個冒號。

  • 爲了順利運行策略,須要耐心解決錯誤,但錯誤的緣由極度的複雜多樣(因此日誌的報錯信息也多種多樣,不止圖上一種),故在此只針對例子講下新手容易犯的錯誤:

    • 符號要用英文輸入法。下圖,代碼第一行的冒號是中文的,因此出錯
      中文符號錯誤.png
    • 拼寫不要錯。下圖,security拼寫錯了
      拼寫錯誤1.png
    • 縮進要對齊。下圖,縮進沒對齊。縮進的時候能夠按鍵盤tab鍵或四個空格。
      縮進錯誤.png
  • 編程界每每把錯誤叫bug,而不斷調試去除錯誤的過程叫debug,作量化時也是時常聽到的說法,你們應該知道下。

  • 並且debug一般就是要耗費不低於寫bug寫代碼的時間的,因此會debug是很重要的能力,你們平時debug的時候不妨多思考下,如何更有效率的debug。固然,咱們後續也會介紹些debug的技巧。

回測、編譯運行、運行回測都是什麼意思?

  • 像剛剛那樣,用一段時間內的歷史的真實行情數據,來驗證一個肯定的交易策略在這段時間表現如何,這個過程叫回測。

  • 運行回測就是是字面意思,讓計算機運行此次回測,運行後會告訴你策略在這段時間表現狀況,好比收益率、年化收益率、最大回撤、夏普比率等指標,並且通常也會包括下單記錄、持倉記錄等。

  • 編譯運行其實也是讓計算機運行此次回測,不過相比於點擊運行回測,編譯運行的結果比運行回測要簡單,只有收益率等指標,所以也速度更快。因此,當還沒必要要獲得詳細的結果時,或只是想調試下策略的代碼,看是否無誤可運行時,編譯運行就比運行回測更方便。

週期循環具體是何時開始的呢?

  • 若是策略頻率爲天,是每一個交易日開始生效,從9:30直到15:00(從股市開市到收市),因此例子中是每一個交易日9:30開市循環就開始,一天一次地循環執行買入股票的操做。

  • 若是策略頻率爲分鐘,是每一個分鐘開始時執行,因此例子中的買入股票的操做是每一個交易日從9:30:00開始,而後9:31:00,直到14:59:00。接着下一天9:30:00,如此一分鐘一次地循環執行的。
    minBar.png

  • 雖然頻率只有爲分鐘和天天可選,但經過不一樣的代碼能夠實現按周按月週期循環,並且分鐘級別裏下單時間也是能夠本身選的,不過代碼的寫法則與寫法一和寫法二那樣略有不一樣,後面會講到。

自測與自學

    • 按教程實踐下。
    • 經過搜索自學K線、bug、debug的含義。
相關文章
相關標籤/搜索