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

2010年3月4日 星期四

變數的運用(五)

其實我不太知道這一系列的文章看的人到底多還是少…也許會有人覺得寫這些東西根本一點用也沒有…因為寫出來的策略都是虧損的…不過既然已經說是教學了…那就不要太再意績效了吧。延續上一篇文章的例子,先把程式碼寫出來:



vars: crossStatus(0), openStatus(0);
vars: mc(0), longLine(0), shortLine(0);

mc = marketposition * currentcontracts;

if date <> date[1] then begin
crossStatus = 0;
openStatus = 0;
longLine = 0;
shortLine = 0;
end;

Value1 = MACD(close, 12, 26);
Value2 = XAverage(MACD(close, 12, 26), 9);

if opend(0) > closed(1) then begin
openStatus = 1;
end;

if opend(0) < closed(1) then begin
openStatus = -1;
end;

if openStatus = 1 and Value1 cross under Value2 then begin
crossStatus = 1;
end;

if openStatus = -1 and Value1 cross over Value2 then begin
crossStatus = -1;
end;

if time < 1300 and crossStatus = 1 and Value1 cross over Value2 and Value1 < 50 then begin
longLine = high;
end;

if time < 1300 and crossStatus = -1 and Value1 cross under Value2 and Value1 > 50 then begin
shortLine = low;
end;

if longLine <> 0 then begin
buy next bar at LongLine stop;
end;

if shortLine <> 0 then begin
sell next bar at shortLine stop;
end;

if time = 1330 then begin
exitlong next bar at market;
exitshort next bar at market;
end;

if mc <> mc[1] then begin
openStatus = 0;
crossStatus = 0;
longLine = 0;
shortLine = 0;
end;

setstoploss(10000);



還真是愈寫愈長了…看的下去的人應該也漸漸變少了吧。在上一篇提出練習的時候其實我還沒動手寫這隻程式…寫了才發現…原來符合我一開始預定的條件的交易次數實在少的可憐。

所以這邊就動手修改了一下條件…變成不管第一次交易的 MACD 值,而在第二次 MACD 交叉時,才去限制。作多的第二次限制在 MACD < 50 ,而作空的第二次交叉則限制在 MACD > 50 的情況下。

主要程式碼並沒有太大幅度的修改…不過是把之前的抓高低點再放進來而已。

這隻程式到目前算是結束囉。等我再想下一個主題吧。

8 則留言:

  1. DK:
    我還有持續的FOLLOW噢
    你的教學能力很好阿
    程式碼的由淺入深 讓我學的很輕鬆
    期待你能持續發表
    我也會一直支持你的文章的!

    回覆刪除
  2. Layx: 其實我覺得我教學能力還滿差的…因為我已經想不到可以教些什麼了..哈

    回覆刪除
  3. 小峰TO DK大
    請問我程式是寫 Buy This Bar at Close;
    但Marketposition卻是到下一根K棒的收盤才變化,怎會這樣呢?

    回覆刪除
  4. 小峰:因為就算是寫 this bar at close,TS 還是需要等下一根 k 線的第一個 tick 跳出來才知道原來上一根 k 線已經 close 了。所以,在我的觀念裡面,寫 this bar at close 和 next bar at market 是一模一樣的。當然回測績效會不一樣,不過實際在執行上,是會相同。

    回覆刪除
  5. 小峰TO DK大
    我了解您的意思了,因為已經進到下一根K棒的第一個tick,所以marketposition的變化就是以下一根K棒結束時才變,那如果是半小時的K線那就晚了半小時倉位才會變化,這樣用marketposition來做運算不會有問題嗎?我有觀察到alerts11.mdb才是最即時的,但好像沒有這樣操作的。

    回覆刪除
  6. 小峰:如果你是用 next bar at market 的話我用起來是都不會有什麼問題。

    回覆刪除
  7. DK您好:
    我有一個問題如下:
    多單進場之後,停損點守在近場k棒最低點,我設變數為stopL,如果close < StopL,停損出場,但如果獲利30點後,多單加碼一口,變成二口單,新的停損點,想設在第二口加碼單那跟k棒的低點,如果close < 加碼單的低點,二口多單皆停損出場,想請問一下,是否宣告一個新的變數,stopL2,或者可由原來的變數stopL來處理,煩請DK指導教學一下,要如何處理。謝謝

    回覆刪除
  8. sakura: 用原來的 stopL 就行了。不過我不知道你的加碼單進場是不是用 next bar at market..

    if 加碼單條件 then begin
    buy 1 contracts next bar at market;
    stopL = low;
    end;

    如果是的話這樣就行了。

    回覆刪除

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

Related Posts Plugin for WordPress, Blogger...