在寫加碼型策略的時候如果有用到 SetStopLoss 或是 SetProfitTarget 等二個指令的時候…通常就是條件符合時就會把單一股腦全出光了。
有時候也許會想要分開出不要一次出… 之前在 TS 的時候就是得自己慢慢寫啦。
而今天用 MC 的情況下,聽到朋友說起這個指令~感覺滿好用的,跟大家介紹一下。
這個指令就是 SetStopShare;
在程式碼內找個地方寫上就可以了,之後這個指令會影響到 SetStopLoss 和 SetProfitTarget 兩個指令。
例如,原本的情況如下:
這裡用的指令是 SetProfitTarget(40000);
可以看到三筆多單都在同一個點位出場了~而這個出場點位剛好是三筆單加起來獲利 40000 的地方。
接下來我們把指令改成:
setstopshare;
setprofittarget(15000);
結果會如下:
可以看到三筆單是分別出場,每筆單獲利是 15000。
停損的狀況也是一樣,下面這是原本的停損,指令下的是: setstoploss(30000);
可以看到三筆單最後停損掉了,總虧損是 30000。
接下來把指令改為:
setstopshare;
setstoploss(10000);
則結果會變如下:
就可以看到三筆單是分別出場了,每筆單是虧損 10000。
滿有趣的,有興趣自己玩玩看吧。
大大您好 我叫蟲蟲 從TS程式交易全攻略,看見您是作者之一
回覆刪除真是榮幸,這本書 讓小弟有了初步的概念,謝謝!
想請教簡單的當沖程式碼
1.如果昨天收紅,今天要在突破昨高進場,收盤出
if C[1]>0[1];
if O<H[1];
then buy next bar H[1] stop;
setexitonclose;
這文法錯在哪QQ
2.如果昨天獲前天收紅,今天要在要在突破昨高或前高進場,收盤出
這樣的話要怎麼加?
感謝再給您帶個路
你好…
刪除1. 文法錯很大… if 後面需加上 then 才是完整句子,而如果不加上 begin 則只能接「一行」程式碼…
所以完整的寫法如下:
if c[1] > o[1] then begin
if o<h[1] then buy next bar at h[1] stop;
end;
setexitonclose;
2. 昨天「或」前天,那就要用上 or,而昨高或前高進,則代表哪個低就要先進了…
if ( o < c or o[1] < c[1] ) then buy next bar at minlist(h, h[1]) stop;
大概是這樣…也許你可以參考看一下我寫的 easy language 教學…
http://ssdkchang.blogspot.com/search/label/1.6%20EasyLanguage%20%E6%95%99%E5%AD%B8
收到 先謝謝 在研究!!!
刪除我想做一個今天開盤大於昨天最高點時進場,收盤出場
回覆刪除input:aa(0);
vars:value1(0);
value1 = h[1]+aa ;
if open>value1
then begin
buy next bar at value1 stop;
end;
setexitonclose;
沒想到,,,這個結果竟然是今天開盤大於昨天最高點時"隔天"進場,,,
請問這要怎麼救,暈了...
看來你是用日線在做…我是比較建議你改用分線來執行~
刪除不然你可以試試這樣:
input:aa(0);
vars:value1(0);
value1 = h+aa ;
if open tomorrow > value1 then begin
buy next bar at value1 stop;
end;
setexitonclose;
因為我程式裡沒有日線資料…所以你自己先試試看囉~
呵 果然 我遇到瓶頸了,IOG問題,我以為回測很好,結果出包,,,
刪除要開啟細部回測,ORZ
刪除------------------
那如果想寫5分K,
開盤在昨日的高低點之間
如果時間在9:00後 13:30分前
則開始
盤中回測昨日低點+-5,不過作日低
則進場作多單(一天出入最多限2次)
收盤出場
這樣的當沖單要怎麼寫?
---------------------
另外如果要加入回測低點"第三次後進場" 這要加入瞎咪
我個人也不用 IOG.. 麻煩很多…
刪除至於你後面的程式…已經不是問題而算代寫了~先自己想想看囉~
好的,有一點曙光了,大大文中有提過,MC試用是看"時間",想請教大大能否給多一點提示,因為我換帳號+換電腦,他的試用期顯示還是過了,真令我傻眼QQ
刪除就是把電腦重灌~連 OS
刪除如果覺得麻煩的話,我建議你去開一下券商版~
請教D.K.一個問題:
回覆刪除我用TradeStation編寫買賣訊號傳至TOUCHANCE到AlgoStars做模擬下單,
我的賣買訊號是使用"限價單"(Limit),發生如下狀況:
TradeStation的Chart上面顯示了買賣訊號,同時記錄了買賣部位,但因為我是用限價單,並不一定會在AlgoStars成交,造成TradeStation紀錄部位,但實際在AlgoStars並沒有部位,造成"不一致"的狀況。而且我程式後面又有setstoploss,因此價位達停損價格,又產生了一個停損單至AlgoStars,後面策略完全亂掉...
那個部位"不一致"的問題可以解決嗎??
看情況是你圖上已經出現訊號,然後下到平台後用 「限價單」 去做單…但是平台那邊卻沒成交對吧…
刪除這個情況就是交易者要自行承擔的風險了~因為就算你下到市場上去也是有可能出現這樣的情況~
不然就是要改用 MC,採用 SA 模式來執行策略, SA 模式是有收成交回報的,會在收到成交回報後才把訊號標在圖上…不過我自己不喜歡這種模式…因為程式一重開訊號就看不到了~
要解決就是改用市價單吧~
感謝D.K.大的回覆,可否再請教一個問題,在TradeStation裡面,如果在Pair Trade進行中,一個變數value在Chart1裡從0變為a,可以將a值在Chart2裡面使用嗎?
回覆刪除(因為我發現當程式run到Chart2,value又被初始化變為0了。)
當然,因為兩個 chart 的變數是獨立的, chart 1 的 value 改變不會影響到 chart 2~
刪除如果你是用 ts2000i 那應該是沒辦法了~改用 MC 或是 TS 8.x 以上的版本還可以試著用 ADE (All Data Everywhere) 來做到你想要的情況~
請問如果用MC的setstoploss指令
回覆刪除要如何在停損後馬上用同價位反手?
這是我目前的作法,但是根本沒訊號出現
if MP[1] > 0 and MP = 0 and exitname = "Stop Loss" then
sellshort ("SE") this bar at close;
應該是不能這樣用的…因為 set 指令並不會有 exitname... 所以如果你要這樣作,那大概就要連停損的指令都自己寫了…
刪除