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

2011年10月17日 星期一

程式交易 - SetStopShare 指令

在寫加碼型策略的時候如果有用到 SetStopLoss 或是 SetProfitTarget 等二個指令的時候…通常就是條件符合時就會把單一股腦全出光了。

有時候也許會想要分開出不要一次出… 之前在 TS 的時候就是得自己慢慢寫啦。

而今天用 MC 的情況下,聽到朋友說起這個指令~感覺滿好用的,跟大家介紹一下。



這個指令就是 SetStopShare;

在程式碼內找個地方寫上就可以了,之後這個指令會影響到 SetStopLoss 和 SetProfitTarget 兩個指令。

例如,原本的情況如下:



這裡用的指令是 SetProfitTarget(40000);

可以看到三筆多單都在同一個點位出場了~而這個出場點位剛好是三筆單加起來獲利 40000 的地方。

接下來我們把指令改成:

setstopshare;
setprofittarget(15000);

結果會如下:


可以看到三筆單是分別出場,每筆單獲利是 15000。

停損的狀況也是一樣,下面這是原本的停損,指令下的是: setstoploss(30000);


可以看到三筆單最後停損掉了,總虧損是 30000。

接下來把指令改為:

setstopshare;
setstoploss(10000);

則結果會變如下:


就可以看到三筆單是分別出場了,每筆單是虧損 10000。

滿有趣的,有興趣自己玩玩看吧。


16 則留言:

  1. 大大您好 我叫蟲蟲 從TS程式交易全攻略,看見您是作者之一

    真是榮幸,這本書 讓小弟有了初步的概念,謝謝!

    想請教簡單的當沖程式碼

    1.如果昨天收紅,今天要在突破昨高進場,收盤出
    if C[1]>0[1];
    if O<H[1];
    then buy next bar H[1] stop;
    setexitonclose;

    這文法錯在哪QQ

    2.如果昨天獲前天收紅,今天要在要在突破昨高或前高進場,收盤出

    這樣的話要怎麼加?

    感謝再給您帶個路

    回覆刪除
    回覆
    1. 你好…

      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

      刪除
    2. 收到 先謝謝 在研究!!!

      刪除
  2. 我想做一個今天開盤大於昨天最高點時進場,收盤出場

    input:aa(0);
    vars:value1(0);
    value1 = h[1]+aa ;
    if open>value1
    then begin
    buy next bar at value1 stop;
    end;
    setexitonclose;

    沒想到,,,這個結果竟然是今天開盤大於昨天最高點時"隔天"進場,,,
    請問這要怎麼救,暈了...

    回覆刪除
    回覆
    1. 看來你是用日線在做…我是比較建議你改用分線來執行~

      不然你可以試試這樣:

      input:aa(0);
      vars:value1(0);
      value1 = h+aa ;
      if open tomorrow > value1 then begin
      buy next bar at value1 stop;
      end;
      setexitonclose;

      因為我程式裡沒有日線資料…所以你自己先試試看囉~

      刪除
    2. 呵 果然 我遇到瓶頸了,IOG問題,我以為回測很好,結果出包,,,

      刪除
    3. 要開啟細部回測,ORZ

      ------------------
      那如果想寫5分K,

      開盤在昨日的高低點之間

      如果時間在9:00後 13:30分前

      則開始

      盤中回測昨日低點+-5,不過作日低

      則進場作多單(一天出入最多限2次)

      收盤出場

      這樣的當沖單要怎麼寫?
      ---------------------

      另外如果要加入回測低點"第三次後進場" 這要加入瞎咪

      刪除
    4. 我個人也不用 IOG.. 麻煩很多…

      至於你後面的程式…已經不是問題而算代寫了~先自己想想看囉~

      刪除
    5. 好的,有一點曙光了,大大文中有提過,MC試用是看"時間",想請教大大能否給多一點提示,因為我換帳號+換電腦,他的試用期顯示還是過了,真令我傻眼QQ

      刪除
    6. 就是把電腦重灌~連 OS

      如果覺得麻煩的話,我建議你去開一下券商版~

      刪除
  3. 請教D.K.一個問題:
    我用TradeStation編寫買賣訊號傳至TOUCHANCE到AlgoStars做模擬下單,
    我的賣買訊號是使用"限價單"(Limit),發生如下狀況:

    TradeStation的Chart上面顯示了買賣訊號,同時記錄了買賣部位,但因為我是用限價單,並不一定會在AlgoStars成交,造成TradeStation紀錄部位,但實際在AlgoStars並沒有部位,造成"不一致"的狀況。而且我程式後面又有setstoploss,因此價位達停損價格,又產生了一個停損單至AlgoStars,後面策略完全亂掉...

    那個部位"不一致"的問題可以解決嗎??

    回覆刪除
    回覆
    1. 看情況是你圖上已經出現訊號,然後下到平台後用 「限價單」 去做單…但是平台那邊卻沒成交對吧…

      這個情況就是交易者要自行承擔的風險了~因為就算你下到市場上去也是有可能出現這樣的情況~

      不然就是要改用 MC,採用 SA 模式來執行策略, SA 模式是有收成交回報的,會在收到成交回報後才把訊號標在圖上…不過我自己不喜歡這種模式…因為程式一重開訊號就看不到了~

      要解決就是改用市價單吧~

      刪除
  4. 感謝D.K.大的回覆,可否再請教一個問題,在TradeStation裡面,如果在Pair Trade進行中,一個變數value在Chart1裡從0變為a,可以將a值在Chart2裡面使用嗎?
    (因為我發現當程式run到Chart2,value又被初始化變為0了。)

    回覆刪除
    回覆
    1. 當然,因為兩個 chart 的變數是獨立的, chart 1 的 value 改變不會影響到 chart 2~

      如果你是用 ts2000i 那應該是沒辦法了~改用 MC 或是 TS 8.x 以上的版本還可以試著用 ADE (All Data Everywhere) 來做到你想要的情況~

      刪除
  5. 請問如果用MC的setstoploss指令
    要如何在停損後馬上用同價位反手?
    這是我目前的作法,但是根本沒訊號出現
    if MP[1] > 0 and MP = 0 and exitname = "Stop Loss" then
    sellshort ("SE") this bar at close;

    回覆刪除
    回覆
    1. 應該是不能這樣用的…因為 set 指令並不會有 exitname... 所以如果你要這樣作,那大概就要連停損的指令都自己寫了…

      刪除

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

Related Posts Plugin for WordPress, Blogger...