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

2008年12月8日 星期一

程式交易 - 加減碼程式寫法

加減碼的方式研究很久才成功…進場大概沒什麼問題…在減碼的部份卻只要有訊號就會全部都出掉…這就有問題了…不過加減碼的時機卻也是一個大問題啊…還得再想想看…這邊先把加減碼的簡易寫法寫出來讓大家參考一下囉…

要執行加減碼得先把 HTS 或 TS 的加減碼功能打開…設定的位置加下圖所示:




這樣才能在訊號同方向時再做進場的動作…接著…程式加碼的寫法加下:

if marketposition*currentcontracts = 0 and xxxx then
buy("b1") 1 contracts next bar at market;
if marketposition*currentcontracts = 1 and xxxx then
buy("b2") 1 contracts next bar at market;

也就是把進場的絛件分開來寫..
在 TradeStation 裡面… marketposition 只有 0、-1、1,這三個數值…0 代表空手、-1 代表是空單而 1 則代表是多單。

另外 currentcontracts 只有正數…也就是即使現在是空單 10 口在手…currentcontracts 的數值還是 10,所以利用 marketposiiton*currentcontracts 就可以得到目前是空單幾口或是多單幾口。

接著…再減碼的部份…如果用的是

if marketposition > 0 and xxxx then
exitlong 1 contracts next bar at market;


程式在執行的時候還是會把所有的多單全部出光光…所以得改用下面的寫法:

if marketposition*currentcontracts = 1 and xxxx then
exitlong("exL1") 1 contracts from entry("b1") next bar at market;
if marketposition*currentcontracts = 2 and xxxx then
exitlong("exL2") 1 contracts from entry("b2") next bar at market;


也就是針對進場的訊號名稱來做出場…這樣就不會變成一次出場全部出場了。當然如果是停損要全部都出那就沒這個問題了。

以上,就是加減碼的寫法…目前看到的策略來說…有包含加減碼策略的還很少見…也許是加碼時機實在是不容易找到吧。

21 則留言:

  1. 請教DK大大,TS或HTS語法要怎麼寫比較好呢?

    早上9點整的5分K棒若大於MA5,則進多單;反之則下空單,直到下午1點43分時一律出場不留單.


    小弟感謝DK大大!

    回覆刪除
  2. if time = 900.00 and close > average(close, 5) then
    buy next bar at market;

    if time = 1340.00 and marketposition > 0 then
    exitlong next bar at market;

    如果要限定到 1:43 是比較麻煩一點..

    回覆刪除
  3. DK大 有個HTS裡面的函數轉TS的問題向您請教:
    --------------------------------
    Parameter: Price(Numeric), FastMA(Numeric), SlowMA(Numeric)

    MACD = (EMA(Price, FastMA) - EMA(Price, SlowMA))
    --------------------------------
    上面HTS函數內的EMA在TS應該怎麼轉,不曉得你知道嗎?

    回覆刪除
  4. 嗯嗯..."xaverage",我有去比對TS的xaverage,發現長得跟EMA有點像!! 用這個來試試. 謝囉~~

    回覆刪除
  5. 要限定1:43平倉...
    之前好像聽說用"IF QTime = 1343.00 "好像可以(沒試過), 但好像在K線上不會出現訊號; DK大 你有試過嗎?

    回覆刪除
  6. 只有最後一根才會有 q_time 的時間..所以你要盤中測一下才會知道喔..

    回覆刪除
  7. 請問大大
    如果我要寫當沖的程式
    time >= 0930 and time <=1330
    這樣寫的話
    是不是訊號只會在0930到1330這裡面出現呢

    回覆刪除
  8. 皮皮小金鋼: 是的..把你的進出場條件加上時間限制即可

    回覆刪除
  9. 大大 想請問一下 有關TS的出場條件
    就是如果我有五個部位 我想要固定設定停利點為 第一個部位+500

    還有 如果萬一我還沒累積到第五個部位 已經達到我第一部位+500 我也是要出場

    請問這樣要怎麼寫 非常謝謝

    回覆刪除
  10. 你可以設定一個變數來存第一個部份的進場
    vars:firstentry(0);
    if marketposition = 1 then
    firstentry = entryprice(0);

    再用這個變數去判斷是不是已經達到停利點..

    回覆刪除
  11. 你可以設定一個變數來存第一個部份的進場
    vars:firstentry(0);
    if marketposition = 1 then
    firstentry = entryprice(0);

    再用這個變數去判斷是不是已經達到停利點..

    感謝 多單停利點ok
    但空單我也是一樣要這個策略
    但是點位好像不能設定 firstentry=entryprice(0)了

    還有如果我想要在停利後設定 交易延遲
    譬如停利後略過10根k線 只有在停利後
    也不知道要如何寫
    小弟感謝大大了

    回覆刪除
  12. 空單也一樣..
    if marketposition = -1 再存另一個變數...
    延遲的話...給你個想法
    if close[1] < 停利點 and close > 停利點 then
    變數 = barnumber

    進場的時候檢查 barnumber 是否大於變數 + 10

    回覆刪除
  13. DK大 最近在研究程式加減碼...上來爬爬您之前討論過的這篇文章; 有一問題請教:
    關於exitlong/exitshort會將單子出光光,但改成"exitlong("exL1") 1 contracts from entry("b1") next bar at market;"...這樣雖然在程式回測上可以,不知在真實下單時是否可行?
    關於這一點,是否跟下單機有關呢?

    回覆刪除
  14. STK: 可行...當然跟下單機有關..XD..有些下單機只支援 -1, 0, 1 等三種策略訊號格式..這樣的情況就不能用加減碼囉..

    回覆刪除
  15. DK大, 請問有什麼函數可以表示加碼後的各種進場點價位? entryprice好像只能顯示第一筆進場價位, 之後加碼的進場價位該如何得知?

    回覆刪除
  16. judy: entryprice 只能顯示第一筆單…另外有一個 avgentryprice 可以用…他可以顯示多筆單的均價…用這個應該就行了

    回覆刪除
  17. D k 大大
    這段可以給我HTS的語法ㄇ

    回覆刪除
  18. hts 的部份只要用到 currentcontracts 就行了..
    marketposition 可以拿掉

    回覆刪除
  19. D K 大
    還是不行
    ENTRY("XX") 這好像不能用

    可以麻煩您給我完整的hts寫法ㄇ
    感謝您

    回覆刪除

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

Related Posts Plugin for WordPress, Blogger...