咱們使用數字貨幣比特幣做爲量化交易標的。使用比特幣的好處有幾個:編程
接下來要作的,就是學習用WeQuant的標準,以完成一份有效的策略。咱們將以比特幣定投爲例(按期自動買入比特幣,來換取比特幣升值收益),做一個簡單的介紹。編程語言
這裏的bar不是指酒吧,是金融交易裏面的行情bar,是一個圖形概念。若是你多多少少看過交易的行情圖,橫向排列的高低不一樣的「小柱子」,每一根柱子都稱爲一個bar。函數
bar跟時間是高度關聯的。bar記錄了固定間隔內,從開始時間到結束時間,價格的信息,常規的bar會記錄以下價格信息:開始價格(開盤價)、結束價格(收盤價)、最高價、最低價。通常來講,bar還會附帶成交數量的信息。工具
bar在咱們的量化系統裏面有什麼用呢?除了提供基礎的價格信息,在WeQuant設計的量化系統裏面,策略是循環不間斷地運轉的,bar是循環的依據。學習
爲何須要bar來支持循環呢?咱們知道,bar是自然帶有時間屬性的信息合集,在圖形裏,左邊的bar比右邊的bar發生的更早,最右邊的bar反映的是當前最新的動態,因而,咱們能夠利用bar的時間屬性,讓程序從左往右依次讀取bar,來實現「從某時至某時」或者「實時不間斷」的信息獲取和計算的目的,既不遺漏,也不重複,時間間隔固定,因而咱們在寫策略的時候,能夠省略掉不少時間定義和處理的步驟,只須要關心在所讀取的當前的bar裏面,設計交易觸發條件「若是 => 那麼」——從而,整個策略的設計和編寫,因爲bar的循環的幫助,變得很是簡單。翻譯
bar就像老式時鐘的鐘擺,每擺一下,時間就往前進一格。只要bar不停地在更新和讀取,咱們的策略就會不斷地運行。bar跟前面幾篇文章提到的行情繫統,有極大的關聯。設計
bar自己有頻率的區分,區別就是每隔多少時長彙總一根bar。WeQuant提供分鐘、小時、天、周級別的bar,來知足執行頻率不一樣的策略的要求。目前WeQuant提供的bar,主要針對數字貨幣交易市場,因爲中間不休市,bar與bar之間所表示的時間區段是連續的,即緊密相連,不存在縫隙。接口
與bar密切相連,因爲bar表示的是固定時間間隔內的價格信息,這裏的frequency就是用來指定固定時間間隔有多長。ip
frequency有個正經的中文翻譯叫頻率,頻率的單位是赫茲(次/秒)。而咱們爲了省略換算的複雜(不少人算不過來),frequency設定的值僅做代指而非學術上的頻率值,例如當frequency爲1分鐘時,實際上咱們說的是給策略指定成「依據1分鐘時長的bar,每1分鐘執行一次策略,所換算出來的頻率值」。這段話獻給特別較真的朋友們。文檔
這是編程語言的概念,不做累述。在WeQuant的策略模板裏面,只須要在策略裏定義清楚兩個函數,策略就能夠生效。具體是哪兩個函數須要定義,後文會做示例講解。
除了用戶須要本身編寫函數以外,WeQuant自己提供了一些列的函數來輔助完成策略的表達,包括但不限於獲取歷史數據、獲取賬號信息、操做訂單、計算和保存變量等等。詳細的定義和使用方法,請在須要的時候移步至專門的API文檔。
因爲策略須要跟量化系統做整合,咱們要求在策略裏添加一些預設的但跟交易邏輯自己無關的變量,讓策略變得機器可讀,使用方法請看示例,詳細說明看API文檔。
咱們對上文進行一個簡單的彙總,一個WeQuant標準的策略應該長這個樣子:
咱們看到,策略分紅三部分,分別定義PARAMS(參數)變量、initialize和handle_data函數(分別須要傳入context參數)。
這個策略什麼意思呢?刨除掉其餘設置的細節(想了解的話,請閱讀API文檔),咱們只看handle_data裏的內容:
代碼的意思是,天天,檢查帳戶裏是否是剩餘超過100塊錢,若是超過,則按照當前的價格買入100塊錢的比特幣。
這樣寫完之後,平臺就自動天天幫你買比特幣了,做爲一個自動化的定投策略,是否是很簡單?
實際的定投策略會比這個更智能一些,那只是下單邏輯有了一些變化,總體的結構仍是同樣的,此處爲了簡化教學目的。
在回測階段,這段代碼也是可用的,並且能夠從回測結果裏面看到,由於比特幣價格在上漲,因此這個定投策略也是掙錢的呢。
基本概念先介紹到這裏。若是但願看更復雜的策略,策略講堂裏面有目前主流經典教科書策略的比特幣版本,但願大家喜歡。