名額(Indicator)由三大關鍵元件組成:
1. 實作你名額的類
2. 在ACAlgorithm基類中的Helper方法,用于簡化對你名額實作的調用。
3. 測試方法用于測試名額的表現。
為了實作一個名額,上述所有元件需要實作。下面的教程會帶你浏覽這些元件。我們将會使用 AroonOscillator作為案例。我們不會去介紹名額的基本概念。
你的名額類應該在工程根下的QuantConnect.Indicators項目下實作。它必須是一個單獨的類,不能縮寫,名如“AroonOscillator.cs”。
第一步
名額必須是下面名額基類的一個派生:
Indicator – 如果你的名額隻需要單個值(例如ExponontialMovingAverage),你就可以用Indicator作為基類。
TradeBarIndicator – 如果你的名額需要用到TradeBars,那麼你的名額必須是由TradeBarIndicator類擴充而來的。(例如AroonOscillator)。
WindowIndicator<T> - 如果你的名額需要一個rolling window of data(資料的滾動視窗),那麼你就要繼承這個類。(例如Minimum)。
所有的名額都必須實作下面四個元件,為了在Lean中正常運作。
Constructor – 實作你的構造函數,用于接收和儲存必要的名額配置資訊。例如Aroon名額需要Aroon Up 和 Aroon Down值。
IsReady – 它是一個Boolean值,用于訓示算法是否有了充足的曆史價格資料用于算出名額的值。Aroon隻有當有了n個周期的樣本資料後才能開始計算。
ComputeNextValue()- 用提供的資料,計算和傳回下一個名額的值。這裡是你實作名額具體算法的地方。
保持可擴充性
Aroon作為案例是非常有代表性的,它有多個屬性,Aroon-Up和Aroon-Down。這兩個值在計算Aroon的時候都需要用到,但隻有delta(up – down)會傳回。這個例子中的dela叫做Aroon Percentage(比例)。許多名額會有一個主值(Primary value),多個屬性,用于交易決策。
為了處理這些情況-每個屬性都應該作為子名額(sub-indicator)。你可以檢視下AroonOscillator.cs的源碼。Aroon建立了AroonUp,AroonDown名額作為屬性。這使得你可以單獨的使用這些子名額。
例如下面的代碼:
var smaAroonUp = sma.Of( aroon.AroonUp )
就直接用屬性(子名額)。
現在我們貼出AroonOscillator的代碼:
在你實作了indicator(名額)之後,i需要将它安裝到基類中。名額可以手工的建立和更新,不過我們加你使用helper方法,這樣後面使用起來會簡單很多。
在Aroon的案例中,實作是在AroonOscillator類,但它的helper方法是在QCAlgorithm中。這個helper方法—AROON—總是是大寫的,總是傳回一個名額實作類的執行個體對象。
在helper方法中,你需要建立你名額的一個唯一的名字,使用你名額實作類的構造函數去構造一個名額執行個體,将其注冊(注冊後意味着名額的值會随着symbol(指定證券)的價格資料變動而自動的變動)。
将準備好的測試資料放到QuantConnect.Tests\TestData目錄下。
在QuantConnect.Tests\Indicators下面。可以拷貝已經有的進行改寫。