要執行加減碼得先把 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;
也就是針對進場的訊號名稱來做出場…這樣就不會變成一次出場全部出場了。當然如果是停損要全部都出那就沒這個問題了。
以上,就是加減碼的寫法…目前看到的策略來說…有包含加減碼策略的還很少見…也許是加碼時機實在是不容易找到吧。
請教DK大大,TS或HTS語法要怎麼寫比較好呢?
回覆刪除早上9點整的5分K棒若大於MA5,則進多單;反之則下空單,直到下午1點43分時一律出場不留單.
小弟感謝DK大大!
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 是比較麻煩一點..
DK大 有個HTS裡面的函數轉TS的問題向您請教:
回覆刪除--------------------------------
Parameter: Price(Numeric), FastMA(Numeric), SlowMA(Numeric)
MACD = (EMA(Price, FastMA) - EMA(Price, SlowMA))
--------------------------------
上面HTS函數內的EMA在TS應該怎麼轉,不曉得你知道嗎?
EMA 啊...用 xaverage 吧..
回覆刪除嗯嗯..."xaverage",我有去比對TS的xaverage,發現長得跟EMA有點像!! 用這個來試試. 謝囉~~
回覆刪除要限定1:43平倉...
回覆刪除之前好像聽說用"IF QTime = 1343.00 "好像可以(沒試過), 但好像在K線上不會出現訊號; DK大 你有試過嗎?
只有最後一根才會有 q_time 的時間..所以你要盤中測一下才會知道喔..
回覆刪除請問大大
回覆刪除如果我要寫當沖的程式
time >= 0930 and time <=1330
這樣寫的話
是不是訊號只會在0930到1330這裡面出現呢
皮皮小金鋼: 是的..把你的進出場條件加上時間限制即可
回覆刪除大大 想請問一下 有關TS的出場條件
回覆刪除就是如果我有五個部位 我想要固定設定停利點為 第一個部位+500
還有 如果萬一我還沒累積到第五個部位 已經達到我第一部位+500 我也是要出場
請問這樣要怎麼寫 非常謝謝
你可以設定一個變數來存第一個部份的進場
回覆刪除vars:firstentry(0);
if marketposition = 1 then
firstentry = entryprice(0);
再用這個變數去判斷是不是已經達到停利點..
你可以設定一個變數來存第一個部份的進場
回覆刪除vars:firstentry(0);
if marketposition = 1 then
firstentry = entryprice(0);
再用這個變數去判斷是不是已經達到停利點..
感謝 多單停利點ok
但空單我也是一樣要這個策略
但是點位好像不能設定 firstentry=entryprice(0)了
還有如果我想要在停利後設定 交易延遲
譬如停利後略過10根k線 只有在停利後
也不知道要如何寫
小弟感謝大大了
空單也一樣..
回覆刪除if marketposition = -1 再存另一個變數...
延遲的話...給你個想法
if close[1] < 停利點 and close > 停利點 then
變數 = barnumber
進場的時候檢查 barnumber 是否大於變數 + 10
DK大 最近在研究程式加減碼...上來爬爬您之前討論過的這篇文章; 有一問題請教:
回覆刪除關於exitlong/exitshort會將單子出光光,但改成"exitlong("exL1") 1 contracts from entry("b1") next bar at market;"...這樣雖然在程式回測上可以,不知在真實下單時是否可行?
關於這一點,是否跟下單機有關呢?
STK: 可行...當然跟下單機有關..XD..有些下單機只支援 -1, 0, 1 等三種策略訊號格式..這樣的情況就不能用加減碼囉..
回覆刪除DK大, 請問有什麼函數可以表示加碼後的各種進場點價位? entryprice好像只能顯示第一筆進場價位, 之後加碼的進場價位該如何得知?
回覆刪除judy: entryprice 只能顯示第一筆單…另外有一個 avgentryprice 可以用…他可以顯示多筆單的均價…用這個應該就行了
回覆刪除D k 大大
回覆刪除這段可以給我HTS的語法ㄇ
hts 的部份只要用到 currentcontracts 就行了..
回覆刪除marketposition 可以拿掉
D K 大
回覆刪除還是不行
ENTRY("XX") 這好像不能用
可以麻煩您給我完整的hts寫法ㄇ
感謝您
參考新的文章囉
回覆刪除