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 的情況下。
主要程式碼並沒有太大幅度的修改…不過是把之前的抓高低點再放進來而已。
這隻程式到目前算是結束囉。等我再想下一個主題吧。
DK:
回覆刪除我還有持續的FOLLOW噢
你的教學能力很好阿
程式碼的由淺入深 讓我學的很輕鬆
期待你能持續發表
我也會一直支持你的文章的!
Layx: 其實我覺得我教學能力還滿差的…因為我已經想不到可以教些什麼了..哈
回覆刪除小峰TO DK大
回覆刪除請問我程式是寫 Buy This Bar at Close;
但Marketposition卻是到下一根K棒的收盤才變化,怎會這樣呢?
小峰:因為就算是寫 this bar at close,TS 還是需要等下一根 k 線的第一個 tick 跳出來才知道原來上一根 k 線已經 close 了。所以,在我的觀念裡面,寫 this bar at close 和 next bar at market 是一模一樣的。當然回測績效會不一樣,不過實際在執行上,是會相同。
回覆刪除小峰TO DK大
回覆刪除我了解您的意思了,因為已經進到下一根K棒的第一個tick,所以marketposition的變化就是以下一根K棒結束時才變,那如果是半小時的K線那就晚了半小時倉位才會變化,這樣用marketposition來做運算不會有問題嗎?我有觀察到alerts11.mdb才是最即時的,但好像沒有這樣操作的。
小峰:如果你是用 next bar at market 的話我用起來是都不會有什麼問題。
回覆刪除DK您好:
回覆刪除我有一個問題如下:
多單進場之後,停損點守在近場k棒最低點,我設變數為stopL,如果close < StopL,停損出場,但如果獲利30點後,多單加碼一口,變成二口單,新的停損點,想設在第二口加碼單那跟k棒的低點,如果close < 加碼單的低點,二口多單皆停損出場,想請問一下,是否宣告一個新的變數,stopL2,或者可由原來的變數stopL來處理,煩請DK指導教學一下,要如何處理。謝謝
sakura: 用原來的 stopL 就行了。不過我不知道你的加碼單進場是不是用 next bar at market..
回覆刪除if 加碼單條件 then begin
buy 1 contracts next bar at market;
stopL = low;
end;
如果是的話這樣就行了。