QuantConnect與Quantopian一樣,是一個提供回測服務的量化平台,但它的商業模式與Quantopian不太一樣,Quantopian主要的商業模式是成為外包型的基金公司(把好的策略挑出來,包裝成一個基金商品),而QuantConnect主要是擔任一個技術服務商的角色,它提供免費的回測服務,但要實盤交易的話便需要付費訂閱成為付費會員,而近年,QuantConnect也推出一個新的服務-Alpha Streams,這是一個販賣策略的市場,主要是想要媒合獨立的策略開發者以及一些想要購買策略的基金公司,基金公司可以付費在Alpha Streams上面訂閱策略。
以下我們會簡單介紹如何在QuantConnect上面開發一個最簡單的Buy and Hold策略,這也是官方教學的一部份內容
在註冊帳號後並登入,在右上角的Lab按鈕點進入
可看到一個create algorithm選項
點入之後在右方可以看到數個方塊,但可以先忽略它們,讓我們直接點右下角-Create Algorithm
接下來就進入編輯器的畫面,編輯器的預設編輯語言將會是在註冊會員時選的偏好語言,我們會使用Python作為演示語言。
以下為程式碼
[python]
class ResistanceUncoupledRadiator(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2017, 6, 1)
self.SetEndDate(2017, 6, 15)
self.aapl = self.AddEquity('AAPL',Resolution.Minute)
def OnData(self, data):
self.MarketOrder("AAPL",100)
#4. Debug the AveragePrice of AAPL
self.Debug(str(self.Portfolio['AAPL'].AveragePrice))
[/python]
這邊可以看到,我們的回測策略是寫成一個class的形式,並且繼承了QCAlgorithm物件,這邊我們需要寫初始化條件-Initialize以及在每個時間切片下的應對方式-OnData。
首先在初始化的時候,我們設定了回測的開始時間與結束時間
[python]
self.SetStartDate(2017, 6, 1)
self.SetEndDate(2017, 6, 15)
[/python]
分別從2017年6月1號到2017年6月15號。這邊SetStartDate以及SetEndDate可以想為已經內建好的方法。
而我們接下來使用AddEquity這個內建好的方法將蘋果股票加入我們可慮的投資資產之中。其中Resolution.Minute參數決定了資料頻率為分鐘。
[python]
self.aapl = self.AddEquity('AAPL',Resolution.Minute)
[/python]
接下來的OnData部份,這個部份會在每一個對應的時間切片被呼叫,像這個例子,因為我們選得時間切片為分鐘,所以每一分鐘,程式都會執行在OnData裡面的程式碼。
[python]
def OnData(self, data):
self.MarketOrder("AAPL",100)
self.Debug(str(self.Portfolio['AAPL'].AveragePrice))
[/python]
在這個例子,我們對AAPL進行下單,並且輸出AAPL的價格。
接下來我們就可以執行右上角的Backtest,再回測跑完之後。
我們可以在回測結果下方的Orders看到,程式確實在每分鐘對AAPL進行100單位的下單
但由於我們的本金以及槓桿設定不足的關係,後面便會顯示insufficient buying power,後面的下單就無法被滿足了。
以上便是簡單的QuantConnect入門。