2010年7月12日 星期一

改寫TradeStation的標準差函式

在TradeStation內建的標準差函式中,只要傳入要計算的數列及計算週期即可得到標準差,在其函式中包函了一段先計算平均數後,再計算標準差,這 對於不需要平均值的使用者直接使用是沒有問題的,但是一般在開發指標時,都會需要平均值及標準差搭配使用(如包寧傑通道),此時就會重覆計算平均值的部 份,而浪費運算的時間,所以本篇就是改寫原有的標準差函式,改為可以傳入平均值的函式。要達到個目的有二種寫法,一個是改寫原有的函式,當平均值傳入某一 個特定的值時(如999999.99),則會在函式中重新計算平均值,另一個是重新寫一個標準差的函式,在本文中筆者採用第二種方式,即重新寫一個標準差 的函式。其步驟如下:

首先如圖1所示,在PowerEditor中,按下新增的按鈕,然後新增一個Function. 再來如圖2的畫面中填入函式的名稱、說明後按下OK,則可在圖3中開始編寫程式,其原始碼如文末所列。寫完後按下F3做完Verify後,即可在函式列表 中找到新增的_StdDev的函式。

圖1. 建立一個新函式
 圖2. 填入函式的屬性
 圖3.函式原始碼

原始碼:
{
Price : 價格數列.
MAValue : 平均值.
Length : 計算週期.
}
Inputs: Price(NumericSeries), MAValue(NumericSimple), Length(NumericSimple);
Variables: SumSqr(0), Counter(0);

If Length <> 0 Then Begin
SumSqr = 0;
For Counter = 0 To Length - 1 Begin
SumSqr = SumSqr + (Price[Counter] - MAValue) * (Price[Counter] - MAValue);
End;
_StdDev = SquareRoot(SumSqr / Length);
End
Else
_StdDev = 0;

沒有留言:

張貼留言