2014年3月25日 星期二

進場開關控制的簡單範例

在這些年的教學經驗中,讓剛要入門的同學了解 Power / Eazy language 這類的程式語法結構,其實只要從交易策略的角度出發,幾個範例的講解後,要了解 coding 的過程模式並不困難。但是,在學會了固定 pattern 現象發生後馬上接著進場的簡單策略類型後,隨著交易想法的多元化,通常同學就滿容易在接下來的策略 coding 過程,卡住了。

於是,我建立了讓同學參與了課程後,還能持續討論與交流的社團:程交小學堂課後社團(秘密社團)。除了讓各期同學提出的策略想法可以共享外,我也會在上面回答同學的提問。

這一篇,我提一個還算是簡單的範例,來解釋如何利用變數來做為進場的"開關",去達成交易策略的部位出場後,有的時候即使仍在突破價外(這會出場馬上再進場),而不要馬上再進場的控制。透過"開關"設計,就可以讓交易策略的設計上更多元變化。



策略描述:以每週週一日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;



我想,上圖跟下圖做個比較,你就可以體會這有什麼差異了。