|
程式交易@如何寫程式交易訊號一(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程式交易 |
|