免費論壇 繁體 | 簡體
公告:SCLUB雲端專屬主機己開放租用
分享
MT4程式(Program)專業代寫服務(請email:letgofortrading@gmail.com) 警告:文章內容可能有大便,不喜請勿入。請不要像動物一樣,不歡迎也請勿自行進來找碴和找大便。私人網頁,後果請自行負責~
返回列表 發帖

程式交易@如何寫程式交易訊號一(Multicharts,速成的方式)

程式交易@如何寫程式交易訊號一(Multicharts,速成的方式)

有朋友在問,剛接觸Multicharts ,但程式完全不懂

想知道如何寫出交易訊號.

就我的學習經驗來說,Multicharts or Tradestation 使用的語法真的不難.

初期只要掌握幾個規則,其實很好入門~

在blog 上的文章都是想到什麼就寫什麼,對於Multicharts 比較初階的教學就沒有寫.

因為初階教學網路上的資源應該蠻多的..



即然有朋友問,就做一個介紹使用速成的方式,假設你什麼都不懂,只想趕快寫出一個訊號)



以RSI 舉例,RSI 大於70買進多單,小於30買進空單 (反之平倉)



程式如下:


inputsrice(close),Len(14);
vars:var1(0);


var1=RSI(Price,len );

if marketposition=0 and  var1 >  70 then begin
buy("buy") next bar at market;  
end;


if marketposition=0 and  var1 <  30 then begin
sellshort("sell") next bar at market;  
end;


if marketposition>0 and  var1  <30 then begin
sell("EXIT_buy") next bar at market;  
end;


if marketposition<0 and  var1 > 70 then begin
buytocover("EXIT_sell") next bar at market;  
end;


說明:

//以下這兩行叫宣告,Inputs: 表示你可以從MC裡去調整的參數, vars: 一般變數宣告

inputsrice(close),Len(14);
vars:var1(0);

//讓變數var1 等於指標RSI
var1=RSI(Price,len );

{接下來講if 用法

if 的語法結構是:  

if  條件 then begin

做什麼..

end;

條件就是RSI>70 or <30

做什麼: 做多還是做空?

marketposition=0 手上沒單

marketposition=1 有多單

marketposition=-1 有空單

buy 進場多單

sellshort 進場空單

sell 多單平倉

buytocover 空單平倉}

//多單進場

if marketposition=0 and  var1  >  70 then begin
buy("buy") next bar at market;  
end;

//空單進場
if marketposition=0 and  var1 <  30 then begin
sellshort("sell") next bar at market;  
end;

//多單平倉
if marketposition>0 and  var1  < 30 then begin
sell("EXIT_buy") next bar at market;  
end;

//空單平倉
if marketposition<0 and  var1 > 70 then begin
buytocover("EXIT_sell") next bar at market;  
end;

這樣就構成一個程式了..

看不太懂沒關係,有個概念就行了.

一開始不用到很懂,只要知道如何套用就行了.



以下開始套用:

======================================================

如果我們的訊號要變成:

(KD) 慢速 K 大於80買進多單,小於20買進空單 (反之平倉)

那要怎麼做呢?

一樣程式不變,把RSI 換成KD 就行了.(注意黃色字)



inputsrice(close),Len(14);
vars:var1(0);


var1=Slow_K(Len );


if marketposition=0 and  var1 > 80 then begin
buy("buy") next bar at market;  
end;


if marketposition=0 and  var1<  20 then begin
sellshort("sell") next bar at market;  
end;


if marketposition>0 and  var1 <20 then begin
sell("EXIT_buy") next bar at market;  
end;


if marketposition<0 and  var1 >80 then begin
buytocover("EXIT_sell") next bar at market;  
end;

就這樣程式完成,RSI 改成SlowK,其它都不變.

======================================================

那如果我們的訊號要變成:

(KD) 慢速 K 向上穿過慢速D買進多單(金乂), 慢速 K 向下穿過慢速D(死乂)買進空單 (反之平倉)

那要怎麼做呢?

一樣程式照Copy 再修改指標.(注意黃色字)

inputsrice(close),Len_Short(9),Len_long(18);
vars:var1(0),var2(0);


var1=Slow_K(Len_Short );

var2=Slow_D(Len_long );

if marketposition=0 and  var1  Crosses Above  var2 then begin
buy("buy") next bar at market;  
end;


if marketposition=0 and  var1 Crosses Under  var2 then begin
sellshort("sell") next bar at market;  
end;


if marketposition>0 and  var1  Crosses Under var2 then begin
sell("EXIT_buy") next bar at market;  
end;


if marketposition<0 and  var1 Crosses Above  var2 then begin
buytocover("EXIT_sell") next bar at market;  
end;

程式完成~

這樣要注意的是 向上穿過,和向下穿過 用Crosses Above  Crosses under

照字面上的意思應該很好理解.

另外因為用到了兩個指標值:慢速K/慢速D.

所以又增加了另一個變數:Var2 讓它等於慢速D

================================================

繼續..

如果我們的訊號要變成:

短週期(20)均線 向上穿過長週期(60)均線買進多單(金乂),

短週期(20)均線 向下穿過長週期(60)均線(死乂)買進空單

(反之平倉)

那要怎麼做呢?

一樣程式不變,把指標改掉就行.



inputsrice(close),Len_Short(20),Len_long(60);
vars:var1(0),var2(0);


var1=SMA(Price,,Len_Short);

var2=SMA(Price,Len_long);

if marketposition=0 and  var1  Crosses Above  var2 then begin
buy("buy") next bar at market;  
end;


if marketposition=0 and  var1 Crosses Under  var2 then begin
sellshort("sell") next bar at market;  
end;


if marketposition>0 and  var1  Crosses Under var2 then begin
sell("EXIT_buy") next bar at market;  
end;


if marketposition<0 and  var1 Crosses Above  var2 then begin
buytocover("EXIT_sell") next bar at market;  
end;

程式完成.

==============================================================

繼續..

如果我們的訊號要變成:

短週期(20)均線 向上穿過長週期(60)均線買進多單(金乂),

短週期(20)均線 向下穿過長週期(60)均線(死乂)買進空單

但平倉條件改成:

RSI 大於70空單平倉,小於30多單平倉

那要怎麼做呢?

一樣程式不變,把指標改掉就行.

inputsrice(close),Len_Short(20),Len_long(60),Len_RSI(14);
vars:var1(0),var2(0),var3(0);


var1=SMA(Price,,Len_Short);

var2=SMA(Price,Len_long);

var3=RSI(Price,Len_RSI);

if marketposition=0 and  var1  Crosses Above  var2 then begin
buy("buy") next bar at market;  
end;


if marketposition=0 and  var1 Crosses Under  var2 then begin
sellshort("sell") next bar at market;  
end;


if marketposition>0 and var3 <30 then begin
sell("EXIT_buy") next bar at market;  
end;


if marketposition<0 and var3>70 then begin
buytocover("EXIT_sell") next bar at market;  
end;

好了,程式完成~

這樣要注意的是因為指標用了3個(短均線,長均線,RSI)

所以要有3個變數.

其實就是一個結構在變化而已..

資料來源:MC程式交易
!qqconnect:connect_viewthread_share_title!: !qqconnect:connect_viewthread_share_to_qzone!!qqconnect:connect_viewthread_share_to_qzone! !qqconnect:connect_viewthread_share_to_weibo!!qqconnect:connect_viewthread_share_to_weibo! !qqconnect:connect_viewthread_share_to_pengyou!!qqconnect:connect_viewthread_share_to_pengyou!
LMAX 顛覆外匯交易經驗/擊敗所有外匯經紀商

返回列表