我想還是不少人拿到 TS 的程式碼不知道該怎麼轉成 HTS 的…雖然之前有寫過由 HTS 轉到 TS 的教學 HTS 程式碼轉 TradeStation 程式碼 和 HTS 程式碼轉 TradeStation 程式碼 - 函數篇。不過我想看的人應該不多吧..orz
好吧…首先,當拿到 TS 程式碼的時候…
var:count(0), buyline(99999), sellline(0);
if date[0] <> date[1] then begin
count = 0;
buyline = 99999;
sellline = 0;
end;
if time = 1100.00 then begin
buyline = highest(high, 27);
sellline = lowest(low, 27);
end;
if time > 1100.00 and time < 1230.00 and count = 0 then begin
if open < buyline and close > buyline and opend(0) > closed(1) then begin
buy ("b4") next bar at market;
count = count + 1;
end;
if open > sellline and close < sellline and opend(0) < closed(1) then begin
sell ("s4") next bar at market;
count = count + 1;
end;
end;
if marketposition > 0 and time < 1335.00 and close < closed(1) and count > 0 then begin
exitlong next bar at market;
end;
if marketposition < 0 and time < 1335.00 and close > closed(1) and count > 0 then begin
exitshort next bar at market;
end;
if marketposition > 0 and time = 1335.00 then begin
exitlong next bar at market;
end;
if marketposition < 0 and time = 1335.00 then begin
exitshort next bar at market;
end;
第一步:請先檢查程式裡有沒有用到 input,如果有的話第一個就是把 input 改成 parameter。
第二步:把所有的分號(;)去掉。
第三步:把所有的 begin 去掉。
第四步:再所有的if 結尾的 end 後面加上 if 成為 end if
第五步:如果有時間參數的話,把 1000.00 改為 100000,也就是把小數點去掉。
第六步:檢查程式內有沒有用到 opend()、closed()、highd()、lowd()等在分線讀日線資料的函式,如果有的話比較麻煩,後面再提。
第七步:代換函式…例如把 average 代換為 ma。
應該經過上面的步驟後…可以成功轉換 80% 的 TS 程式碼…其它比較複雜的,我大概也要看到程式碼才知道該怎麼轉換…最後,再提一下如何更改 opend() 等的函式到 HTS。
由於 HTS 並沒有提供 opend() 等函式,只有提供 openofd 這樣的 user function…所以如果 TS 程式碼內有用到這些東西…請先建立一個 var 和一個 array…我的習慣如下:
vars:openOfD0(0), closeOfD1(0)
Array:OoD0[84](-1), CoD1[84](-1)
接著…再去計算 openOfD0(0) 的值
openOfD0 = OpenOfD(0, OoD0)
closeOfD1 = CloseOfD(1, CoD1)
現在,HTS 裡面的 openOfD0 這個值就會等同於 TS 內的 opend(0),如果有用到 highd()、lowd()的,就依樣畫葫蘆吧…
真的最後了…如果還是改不出來…那…留言吧…XD…我有時間就幫忙囉。
哇...有這寶我竟然沒挖到,好好來研讀. 有不懂在麻煩DK大囉.
回覆刪除vars:openOfD0(0), closeOfD1(0)
回覆刪除Array:OoD0[84](-1), CoD1[84](-1)
請教一下dk大[84](-1)為甚麼是84!!若是5分鐘線1天不是只有60根k棒嗎??還請解惑!!感恩!!
真是好問題啊...我一直認為這是固定用法..所以其實我自己也沒去研究這個 84 是怎麼來的..真是不好意思..= =
回覆刪除http://blog.xuite.net/parkson/trader/195142
回覆刪除http://blog.xuite.net/parkson/trader/3468946
Parkson 大的函數 我還改不出來 可以幫忙嗎? 謝謝
James
james: 什麼地方改不出來?
回覆刪除請問DK大大:
回覆刪除我想從TS中的function改成HTS,TS原碼如下
{*******************************************************************
Description: Linear Regression Value (fast calculation)
Provided By: Omega Research, Inc. (c) Copyright 1999
********************************************************************}
Inputs: Price(NumericSeries), Len(NumericSimple), TargetB(NumericSimple);
Variables: X(0), Num1(0), Num2(0), SumBars(0), SumSqrBars(0), SumY(0), Sum1(0), Sum2(0), Slope(0), Intercept(0);
If Len = 0 Then
LinearRegValueFC = 0;
Sum1 = 0;
If CurrentBar = 1 Then Begin
SumBars = SumBars[1];
SumBars = Len * (Len - 1) * .5;
SumSqrBars = (Len - 1) * Len * (2 * Len - 1) / 6;
End;
For X = 0 To Len - 1 Begin
Sum1 = Sum1 + X * Price[X];
End;
SumY = Summation(Price, Len);
Sum2 = SumBars * SumY;
Num1 = Len * Sum1 - Sum2;
Num2 = SumBars * SumBars - Len * SumSqrBars;
If Num2 <> 0 Then
Slope = Num1 / Num2
Else
Slope = 0;
Intercept = (SumY - Slope * SumBars) / Len;
LinearRegValueFC = Intercept + Slope * (Len - 1 + CurrentBar - CurrentBar - TargetB);
我改成HTS如下
param: Price(Numeric), Len(Numeric), TargetB(Numeric)
var: X(0), Num1(0), Num2(0), SumBars(0), SumSqrBars(0), SumY(0), Sum1(0), Sum2(0), Slope(0), Intercept(0),LinearRegValueFC(0)
If Len = 0 Then
LinearRegValueFC = 0
Sum1 = 0
end if
If CurrentBar = 1 Then
SumBars = SumBars[1]
SumBars = Len * (Len - 1) * 0.5
SumSqrBars = (Len - 1) * Len * (2 * Len - 1) / 6
End if
For X = 0 To Len - 1
Sum1 = Sum1 + X * Price[X]
End for
SumY = Sum(Price, Len)
Sum2 = SumBars * SumY
Num1 = Len * Sum1 - Sum2
Num2 = SumBars * SumBars - Len * SumSqrBars
If Num2 <> 0 Then
Slope = Num1 / Num2
Else Slope = 0
Intercept = (SumY - Slope * SumBars) / Len
LinearRegValueFC = Intercept + Slope * (Len - 1 + CurrentBar - CurrentBar - TargetB)
end if
但是經F7檢查後顯示為
LinearRegValueFc(函數)[Line:25,Code:2037]:無法找到可把數值代入函數的命令
hugar 敬上
DK大您好:已改好了如下
回覆刪除param: Price(Numeric), Len(Numeric), TargetB(Numeric)
var: X(0), Num1(0), Num2(0), SumBars(0), SumSqrBars(0), SumY(0), Sum1(0), Sum2(0), Slope(0), Intercept(0)
If Len = 0 Then
LinearRegValueFC = 0
Sum1 = 0
end if
If CurrentBar = 1 Then
SumBars = SumBars[1]
SumBars = Len * (Len - 1) * 0.5
SumSqrBars = (Len - 1) * Len * (2 * Len - 1) / 6
End if
For X = 0 To Len - 1
Sum1 = Sum1 + X * Price[X]
End for
SumY = Sum(Price, Len)
Sum2 = SumBars * SumY
Num1 = Len * Sum1 - Sum2
Num2 = SumBars * SumBars - Len * SumSqrBars
If Num2 <> 0 Then
Slope = Num1 / Num2
Else Slope = 0
Intercept = (SumY - Slope * SumBars) / Len
LinearRegValueFC = Intercept + Slope * (Len - 1 + CurrentBar - CurrentBar - TargetB)
end if
改好就好,不好意思,最近比較忙一點。
回覆刪除大神您好,請問SumBars函數要怎麼在HTS上面表現出來呢?請求指導,謝謝大大分享
回覆刪除SumBars 看起來只是個變數…
刪除您好!請問您是否有HTS的碎形指標源碼呢?或是是否可以請您幫我改TS轉HTS呢?
回覆刪除我的信箱fans2998@gmail.com 麻煩您看到留言,撥空聯絡我喔!
謝謝