2010年11月24日 星期三

[程式交易]HighD與LowD函式的修正


要取得當日或幾日前的最高價與最低價時,我們會使用TradeStation中所提供的HighDLowD這二個內建的函式,但這二個函式若應用於低於6分鐘的K棒週期時,則會出現問題,因為內建的函式在日內只保留50K棒的最高價或最低價當成回傳值,所以當K棒低於6分鐘的週期時,就會開始有最高低或最低價沒被計算到的問題,再加上內建函式是唯讀,所以我們也無法去更動內訂的程式碼,所以只好自己再寫一個HighDLowD的函式,以解決上述之問題。修正後的程式碼如下:

最高價的原始碼:
Inputs: DaysAgo(Numeric);
Variables: Day1Done(0);
Array: HighArray[300](-1);

If DataCompression < 2 Then
        Begin
                If Date > Date[1]  Then
                        Begin
                                Day1Done = Day1Done + 1;
                                For Value1 = 300 DownTo 1
                                        Begin
                                                HighArray[Value1] = HighArray[Value1-1];
                                        End;
                                HighArray[0] = High;
                        End;
                If Day1Done>0 And High > HighArray[0] Then
                        HighArray[0] = High;
                If DaysAgo <= 300 Then
                        _HighD = HighArray[DaysAgo];
        End;

Value1 = _HighD[1];

最低價的原始碼:
Inputs: DaysAgo(Numeric);
Array: LowArray[300](-1);

If  DataCompression < 2 Then
        Begin
                If Date > Date[1] Then
                        Begin
                                For Value1 = 300 DownTo 1
                                        Begin
                                                LowArray[Value1] = LowArray[Value1 - 1];
                                        End;
                                LowArray[0] = Low;
                        End;
       
                If Low < LowArray[0] Then
                        LowArray[0] = Low;

                If DaysAgo <= 300 Then
                        _LowD = LowArray[DaysAgo];
End;

Value1 = _LowD[1];