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

2009年10月22日 星期四

程式交易全攻略 - P.152 移動停損程式修正

之前已經有提到過移動停損點的作法了…請參考這兩篇文章:程式交易 - 移動停損點作法程式交易 - 移動停損點、進場方法,這邊就再另外把書裡的程式錯誤地方修正一下。

這邊的例子是進場後設 20 點為停損點…當獲利大於 50 點時…將停損移動到買進價上 20 點。


vars:exitCount(0), mc(0);

if date <> date[1] then
exitCount = 0;

mc = marketposition * currentcontracts;

if marketposition > 0 then
exitlong next bar at entryprice(0) - 20 stop;

if marketposition < 0 then
exitshort next bar at entryprice(0) + 20 stop;

if marketposition > 0 and high > entryprice(0) + 50 then
exitCount = 1;
if marketposition < 0 and low < entryprice(0) - 50 then
exitCount = 1;

if marketposition > 0 and exitCount = 1 then
exitlong next bar at entryprice(0) + 20 stop;

if marketposition < 0 and exitCount = 1 then
exitshort next bar at entryprice(0) - 20 stop;

if mc <> mc[1] then
exitCount = 0;



這個程式裡面用到了兩個變數…一個是 exitCount 另一個是 mc,exitCount 的作用是拿來記錄目前是否有獲利大於 50 點…當有獲利大於 50 點的時候就把這個變數更改為 1,另一個 mc 變數則是拿來記錄目前的倉位。

基本上我自己在寫程式的時候有很多變數是很常會運用到的…首先就是 mc ,這個變數可以記錄倉位的變化,直接使用 marketposition 只可以知道目前的倉位…但是沒辦法知道上一根的倉位是怎麼樣。所以就利用一個變數來記錄。

接下來就是很簡單的出場語法了…有單的時候就是在進場價虧損 20 點的時候觸價出場。如果有單的時候而且 exitCount = 1 就在進場價獲利 20 點的時候出場。

提供給大家作參考…也很抱歉在校稿的時候乎略了這一部份。

10 則留言:

  1. D.K.大大您好:
    我又來打擾你了,上次k棒量的問題還是沒有完全解決.可否給我您的email;我把相關圖片寄過去給你看一下.
    我的email: s60.z523@msa.hinet.net
    (因為怕說明的不清楚.)
    多有打擾請見諒!!
    謝謝~
    簡略說明問題如下:
    在Chart的k棒下面增加一個量的柱狀圖
    但顯示的量跟劵商不符
    按滑鼠右鍵
    發現參數裡面有O,H,L,C,U,D,volume
    而U=volume,但實際的量應該是 U+D
    口數的量volume也該是等於 U+D
    該如何解決呢?
    (看了三天的omega help還是找不到辦法)

    回覆刪除
  2. Paul: Email 的話在留言版下方就有了。我自己的資料裡面..D 的數值都是 0 就是了。

    回覆刪除
  3. 新手有個問題類似移動停損點,被困住好幾天,想請教D.K.,您這個例子只有寫出場,但我的策略如果用這個方法會衝突到我的進場策略;作多為例,我的狀況點位A>B>C,A為日線固定不變點位,B與C為60分線點位,會隨著下一K棒而變;close>=B則進場,若close<=C則stop出場,若往上突破A+20點以上條件達到,且如果再回跌觸到A就stop出場。現在我遇到的問題是回跌觸到A出場之後,本應不再進場,但卻出現next bar又馬上在開盤價進場,猜測是因為滿足A出場點條件同時又滿足了B點位的進場條件。不好意思麻煩D.K.,有買您的著作,雖想參加集訓營但目前實力及口袋都還不夠深,希望您可以幫個忙可否解決這個困難的問題,感謝~感謝~

    回覆刪除
  4. J.I.: 這個問題我想你需要在進場的條件裡面去限制了..如果你的寫法是 next bar at market 的話..那應該是寫成
    if close[1] < B and close > B then
    buy next bar at market;

    這樣就不會因為出場時同時滿足 close > B 又再進場..

    如果是用 stop 進場的話..可能要用變數去記錄目前的狀況..

    if markeptosition > 0 then
    count = 1;

    if count = 0 then
    buy next bar at B stop;

    大概會類似這樣。

    回覆刪除
  5. 感謝D.K.!!
    剛剛我自己解出來了
    不過您的方式很值得參考~

    回覆刪除
  6. D.K大大您好
    ts是否可以在程式中寫
    只能在每日9:00以前和13:00以後就算有訊號都不出現也不進場
    就是每日都是平倉不留倉
    以利ts資料回測

    感謝大大

    另外若遇到結算時又該如何處理

    感謝

    回覆刪除
  7. 進場的時候加上時間的限制就行囉..
    if time > 900 and time < 1300 then
    buy next bar at market;
    end if
    之類的..
    每天收盤前記得出場,結算的話就是把出場的時間提早就行了。

    回覆刪除
  8. DK大,

    如果盤中遇到快市(例如當根K線的open及close差距超過0.6%)就不交易, 是否這樣寫就可以. if 100*(o-c)c>0.6 then...

    Ken

    回覆刪除
  9. DK大您好,我有買TS程式交易全攻略一書,書中p.296就是上面提到的移動停損,想跟您請教一下就是假設我今天收盤價才進場作多,停損假設設進場價往下20點,這樣的話明天到停損並不會出場耶,因為明天才會是marketposition>0並且出場nextbar at 停損價;換句話說停損價出場無法設在this bar(驗證時不過),不曉得有什麼寫法可以解決這個問題呢?不然的話明天就算到停損價也不會出場,最快後天才會出場,謝謝囉

    回覆刪除
  10. 可以把出場和進場寫在一起。
    大概會像這樣:
    if xxx then begin
    buy this bar at close;
    exitlong next bar at close - 20 stop;
    end;

    回覆刪除

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

Related Posts Plugin for WordPress, Blogger...