於是,我建立了讓同學參與了課程後,還能持續討論與交流的社團:程交小學堂課後社團(秘密社團)。除了讓各期同學提出的策略想法可以共享外,我也會在上面回答同學的提問。
這一篇,我提一個還算是簡單的範例,來解釋如何利用變數來做為進場的"開關",去達成交易策略的部位出場後,有的時候即使仍在突破價外(這會出場馬上再進場),而不要馬上再進場的控制。透過"開關"設計,就可以讓交易策略的設計上更多元變化。
策略描述:以每週週一日K的高低點,作為關鍵價突破追進的策略。但是停損/停利出場後,必須等到價格再回到突破價以內之後,才做突破再度進場。
通常,如果你只是很簡單的訂出兩個關鍵價,去做突破追進的話,直觀描述出來就會如下這樣。(停損50點、停利100點)
var:BB(99999),SS(0);
var:MP(0),lastWay(0);
var:toDO(true);
if dayofweek(D)=1 and sessionlastbar then begin
BB= highD(0);
SS= lowD(0);
end;
MP= marketposition;
if MP<=0 then
buy next bar BB stop;
if MP>=0 then
sellshort next bar SS stop;
if MP<>0 then begin
setstoploss(50*bigpointvalue);
setprofittarget(100*bigpointvalue);
end;
你就會看到圖表上面出現這樣的訊號,獲利出場後下一根馬上再進場,弄得好像出場的動作是做好玩的?這通常就不是做”突破”的人想要的狀況。
所以,我們就得對要不要進場的判斷,在除了是否突破關鍵價外,加上一個”開關”來做控制:讓出場之後把進場開關關掉,必須等待價格回到突破價以內,才把進場的開關再度打開。下面程式碼中的 toDO 就是進場開關。
var:BB(99999),SS(0);
var:MP(0),lastWay(0);
var:toDO(true);
if dayofweek(D)=1 and sessionlastbar then begin
BB= highD(0);
SS= lowD(0);
end;
MP= marketposition;
if MP[1]<>0 and MP=0 then begin
toDo= false;
if MP[1]>0 then lastWay=1;
if MP[1]<0 then lastWay=-1;
end;
if C<BB and lastWay>0 then
toDO= true;
if C>SS and lastWay<0 then
toDO= true;
if MP<=0 and toDO=true then
buy next bar BB stop;
if MP>=0 and toDO=true then
sellshort next bar SS stop;
if MP<>0 then begin
setstoploss(50*bigpointvalue);
setprofittarget(100*bigpointvalue);
end;
我想,上圖跟下圖做個比較,你就可以體會這有什麼差異了。