[TS懶人包] [保險服務]

2008年7月16日 星期三

HTS 程式碼轉 TradeStation 程式碼

最近終於把 Tradestation 搞定了,才發現原來回測 2000 根 k 線真的很少很少很少…
這幾天裡面又寫了幾個程式,回測一年的結果都不錯的情況下,把回測的時間加到兩年、三年,就會發現結果完全不同了…所以說,當沖程式實在是不容易寫出來…只能繼續再把腦袋裡的想法繼續挖出來試試了。

來講講怎麼把 HTS 的程式碼轉成 Tradestation。其實真的沒多大差別,很多東西都是一樣的,也可以看出來 HTS 抄 Tradestation 抄得多兇了…

首先,如果 HTS 的程式裡有用到參數的(parameter),在 Tradestation 裡請改成 input:
parameter:aaa(50) → input:aaa(50);

在每行程式碼的結尾加上分號(;):
aaa = aaa + 100 → aaa = aaa + 100;

如果有用到 if 的地方,HTS 的寫法為:
if (aaa < 100) then

end if


請改為:
if (aaa < 100) then begin
...
end;


也就是在 then 後面都加上 begin,然後在結束的地方把 if 拿掉並加上分號

另外,如果有用到 else if 的,HTS 的寫法為:
if (aaa < 100) then
...
else if (bbb > 100) then
...
end if


同樣的,在每個 then 後面加上 begin,並且每個 if 的結束加上 end,比較重要的是,中間的 end 是不用加分號的,分號只加在最後一個 end 後面:
if (aaa < 100) then begin
...
end
else if (bbb > 100) then begin
...
end;


接著,有用到時間的地方…HTS 的寫法為
time = 100000

TS 的寫法為
time = 1000.00

就這樣了,把你的程式碼丟進 Tradestation 裡有 99% 可以用了,剩下的 1% 大概是用到只有 HTS 有的函數,這樣的東西把功能打進字典查一下,應該都還是找的到對應的 Tradestation 函數可以用…

所以說,HTS 轉到 Tradestation 根本就是無痛升級了…好好的回測自己的程式吧!!

41 則留言:

  1. 請問前輩
    我的HTS程始碼要轉到TS
    Condition用到1~999
    檢查時到Condition100就出現錯誤訊息
    請問是TS的限制嗎?

    小壓

    回覆刪除
  2. 嗯..我記得 condition 是不能超過 99 的...不過你用到 1~999 啊...也許有些一樣的東西可以和在一起吧...

    回覆刪除
  3. 感謝前輩指教

    另外還有一個問題
    在轉HTS 2 TS
    "Step" 與 Exit f3檢查發生錯誤過不去.
    查字點也無解,

    input: Length(3), Times(2.5);
    Variables: DownTrend(True), Counter(0);

    Condition1 = Hammer(Times, Open, High, Low, Close);

    DownTrend = True
    For Counter = Length To 1 Step -1
    If Low[Counter] < Low[0] Then begin
    DownTrend = False
    Exit For
    End;
    End For;


    If DownTrend And Condition1 Then begin

    End;

    小壓

    回覆刪除
  4. 感謝前輩指教

    另外還有一個問題
    在轉HTS 2 TS
    "Step" 與 "Exit" f3檢查發生錯誤過不去.
    查字點也無解,是否前輩有遇到過這類似問題的經驗教導後輩...感恩!

    input: Length(3), Times(2.5);
    Variables: DownTrend(True), Counter(0);

    Condition1 = Hammer(Times, Open, High, Low, Close);

    DownTrend = True
    For Counter = Length To 1 Step -1
    If Low[Counter] < Low[0] Then begin
    DownTrend = False
    Exit For
    End;
    End For;


    If DownTrend And Condition1 Then begin
    End;

    小壓

    回覆刪除
  5. 這程式碼是 HTS的HAMMER槌子
    是否是因為TS缺乏HTS"函數"的因故?

    小壓

    回覆刪除
  6. TS 似乎...沒辦法用減的方式跑 for..也許要改個寫法喔..一次加一..另外也沒有 exit for 可以用..這得要另外用別的方法達成...比如說你在 exit for 的地方改成 length = 結束 之類的..如果你後沒用到 length 的話這是可行的..

    回覆刪除
  7. D.K大
    我在把HTS轉TS語法中遇到問題,一直顯示這部份有問題,但程式不大懂的我又看不出問題點,我哪個部份要改才會過呢?請D.K大指點

    感謝指點
    david

    input:
    Price(close),AvgLength(20),stop1(125),top(0.04),AA(40);


    Vars: El(0),Es(0),close1(0),high1(0),low1(0);

    if date[1] <> date[0] then begin

    IF TIME=1345.00 THEN begin close1=CLOSE; END;

    high1=close1*(1+top);
    low1 =close1*(1-top);

    value0=(close-lowest(low,3))/(highest(high,3)-lowest(low,3))*(100);
    value1 = 2/3*value1[1 +(1/3*value0)
    value2 = 2/3*value2[1]+value1*1/3;
    value3 = 3*value1 - 2*value2;
    value4 = MACD(Close,4,44);
    value5 = XAverage(Value4,5);
    value6 = Value4 - Value5;

    回覆刪除
  8. david: 你填的程式碼不太完整的感覺..目前看到的錯誤有

    if date[1] <> date[0] then begin

    IF TIME=1345.00 THEN begin close1=CLOSE;
    END;
    end;
    這邊少了一個 end

    另外 value1 = 2/3*value1[1 +(1/3*value0);

    最後少了一個分號...

    回覆刪除
  9. D.K大
    感謝指點

    感謝 D.K大的幫忙

    回覆刪除
  10. 試用下單機真的很不錯 , 給一些使用者回應 , 因為日上最近要收費 所以很多使用者都打算轉台 一樣要付費 乾脆找更好的 但是因為用日上久了 應該有不少人會拿來比 , 可以參考一下喔
    1. 策略倉位改變時, 可否加上當時價位,這樣才可以比較成交價位有沒滑價太多?
    2. 畫面無法伸縮耶 加上整體畫面實在很大, 如果要看下單機就會佔了螢幕不少地方, 有時只是想確定它是否活著, 能否在視窗title的地方顯示價位跳動, 也讓畫面能伸縮一下呢
    3. 看到選擇權的欄位, 有計畫發展選擇權下單嗎? 以我的需求是 比如跌破期貨某重要價位 就進場SC, 突破期貨某價位就進場平倉停損, 另外怕OP成交在離譜價位, 可否設一range, 最高或最低價位不得超過XXX 作保護, 大概就是醬, 感謝您的努力

    回覆刪除
  11. jojo: 謝謝你的支持…關於你的意見…
    1:帳戶進場的時候會抓到策略改變時的價位…並填寫在進場價內喔
    2:畫面縮放的話…會讓整個下單機畫面變的很醜..XD...我再考慮一下...另外你提到的 title 跳動價格的部份..比較沒辦法..因為是多策略的..所以有時候商品並不會只有一種..
    3:會準備加入選擇權的部份..你所說的 range 應該就是限價單的功能吧?

    回覆刪除
  12. jojo: 關於第三點..現在想到選擇權似乎只能丟市價單..因為不知道目前選擇權的價位..你所說的功能應該是要自己設定價位的上限值吧..我會加進去的..

    回覆刪除
  13. D.K大
    小弟有一ts轉hts程式 出現create error?
    可麻煩DK大幫我看看哪裡沒寫正確(這是macd修正每日開盤跳空) 感謝
    vars:jumpdiff(0),mclose(0),closeOfD1(0),openOfD0(0)

    Array:CoD[84](-1),OoD[84](-1)

    Parameters: FastMA(10),SlowMA(20),MacdMA(9)
    variables:value1(0)
    value1=MACD(mclose,FastMA,SlowMA)

    jumpdiff=closeOfD(1,Cod)-openOfD(0,OoD)

    if time[0] < > time[1] then mclose=close+jumpdiff
    print(date,time,time[0],time[1],closeOfD(1,Cod),openOfD(0,OoD),close,jumpdiff,mclose)
    end if

    if (value1 cross over EMA(value1,MacdMA)) and close >= open then
    buy("買進") next bar at market
    End if

    If (value1 cross below EMA(value1,MacdMA)) and close < open then
    sell("賣出") next bar at market
    End if

    回覆刪除
  14. 請問板大
    我程式除錯 但verify出現錯誤訊息:The word END was expected before end of file?(我最後一行是End;)請問是哪裡沒寫正確? 感謝

    回覆刪除
  15. james: 看起來是程式內某個地方少了個 end; 喔...檢查一下吧..

    回覆刪除
  16. 系統是一行一行幫我除錯的 一直到最後一行都除好錯了 就是剩最後一個 錯誤 改不掉?

    回覆刪除
  17. james: compiler 不會知道前面還後面的..它只知道從頭到尾少了一個 end; 所以才會在最後一行跟你說少了一個 end;
    不然你算一下囉 .. 有一個 begin 就要有一個 end 對應喔..

    回覆刪除
  18. 請問板大 如何讓跑performance 時wait for data 能出現在run的數字 讓user可確認程式沒當掉?感謝

    回覆刪除
  19. james: 這個沒辦法耶…把 k 線開少一點囉…有時開太多會當掉是沒錯…

    回覆刪除
  20. 請問板大 在TS:
    UpBand = BollingerBand(Close,Length,StdDevUp)
    DnBand = BollingerBand(Close,Length,StdDevDn)
    bollinger band函數
    那在HTS 應如何改寫?感謝

    回覆刪除
  21. 請問板大
    dmi策略: di+ di- 黃金交叉及死亡交叉, when adx(14)>25 等語法 在hts要如何表達?感謝指導

    回覆刪除
  22. james: 布林和 dmi HTS 都有內鍵…直接用就行了…你可以參考指標的算式…套用在策略裡。
    Draw2( Round( MinusDI(Length),3), "-DI", Blue)
    Draw1( Round( PlusDI(Length),3), "+DI", Red)

    回覆刪除
  23. 請問板大 我是這樣寫//dmi
    parameter: adxx(14),len(14)
    value1=(plusdi(len))
    value2=(minusdi(len))

    condition4=value1-value2>0
    condition5=value1-value2<0
    if condition4
    then
    buy("買進") 1 contract next bar at market
    end if
    ...............
    可是只出現一次交易? 請幫忙除錯 感謝

    回覆刪除
  24. 修正
    if condition4 and ADX(adxx)>25....then....

    回覆刪除
  25. 我有print value1(plusdi) value2(minusdi) and adx, 但adx正確 value1 and value2卻與di+ di*線圖數值不合?

    回覆刪除
  26. james: Round( MinusDI(Length),3)
    你有加上 Round 嗎?
    另外買賣的部份把 1 contract 拿掉試試囉..

    回覆刪除
  27. DK大您好
    我有加round,拿掉one contract 還是與D+ D-數值不符?

    回覆刪除
  28. james: 你指標內的 length 和策略內的 length 是一樣的嗎?..應該是不可能數值不一樣才對..

    回覆刪除
  29. 感謝大大 我再檢查看看!!
    另請問 若我要 寫一策略:
    "當(長)30分線買(賣)訊號出現時 則(短)10分線只買進及平倉(賣出及平倉)" 用hts or ts語法 要如何寫? 感謝

    回覆刪除
  30. james: 不好意思…目前我還沒寫過不同時間週期的策略耶…也許你要用到 data 這個東西了…

    回覆刪除
  31. 大大 您好 我是 david
    請問 以下HTS 要如何翻成TS?

    lowd = LOWofd(1, lowarray)
    highd = HIGHofd(1, higharray)
    closed = CLOSEofd(1, closearray)

    回覆刪除
  32. UpBand = BollingerBand(Close,Length,StdDevUp)
    DnBand = BollingerBand(Close,Length,StdDevDn)


    請問大大 在HTS 裡 上面要怎麼改 ?
    我實在不知道該怎麼改

    回覆刪除
  33. david: TS 裡面直接使用 lowd(1), highd(1), closed(1) 即可

    Judy: 請參考 HTS 內的指標 BollingerBands…裡面的 Value1 和 Value2 就是你要的東西了..

    回覆刪除
  34. 請問DK大,
    MinusDI和PlusDI在TS的相對函數名稱是什麼?

    回覆刪除
  35. cswu: DMIMinus 跟 DMIPlus …試試看囉

    回覆刪除
  36. D.K大您好~~
    又來問你笨問題了- -"
    在TS上寫出策略轉到HTS後~~
    比較兩個的回測數據
    每個月的獲利,不一樣耶@@
    而且有些相差蠻多的..- -
    照理來說 應該是要一樣吧...
    那是不是說 我寫錯了....>"<

    回覆刪除
  37. Tai: 如果差異真的很大的話…那應該就是寫錯了…如果有用到技術指標的話…需要把技術指標的資料 print 出來慢慢對了…

    回覆刪除
  38. Inputs: Lenght(numeric);
    Variables: CMO_1(0), CMO_2(0), CMO_Final(0);


    If Close > Close[1] then begin
    CMO_1 = Close - Close[1];
    CMO_2 = 0;
    end
    Else begin

    CMO_1 = 0;
    CMO_2 = Close[1] - Close;
    End;


    Value1 = Sum( CMO_1, Length);
    Value2 = Sum( CMO_2, Length);

    CMO = ( Value1 - Value2 ) / ( Value1 + Value2 ) * 50 + 50;

    卡在Length不是ts語言不知要怎更改呢 感謝

    回覆刪除
  39. 這個你應該隨便開一個內建的 function 出來看就會有參考了才對…

    試試 input: Length(numericsimple);

    回覆刪除

請留下您的大名…匿名者恕不回應…

Related Posts Plugin for WordPress, Blogger...