以多頭開平倉函數(shù)為例:
Buy('Symbol'='',Size=DEFAULT,Price=0,Slippage=0,OT=OT_MARKET,OB=OB_NEXTBAR,EntryName='')
Sell('Symbol'='',Size=DEFAULT,Price=0,Slippage=-1,OT=OT_MARKET,OB=OB_NEXTBAR,ExitName='')<from 'EntryName'>
括號里面表示函數(shù)的參數(shù),之所以見到有賦值,表示如果不寫這個參數(shù),其默認值為等號后面的值,實際應(yīng)用時填入需要指定的值,而不是寫賦值語句。
例如:
Buy; 等價于 Buy('', DEFAULT, 0, 0,OT_Market, OB_NextBar, '');
Buy('',2); 等價于 Buy('', 2, 0, 0,OT_Market, OB_NextBar, '');
Buy('',2, 0,1); 等價于 Buy('', 2, 0, 1,OT_Market, OB_NextBar, '');
Buy('',2, 1000,0,OT_LIMIT); 等價于 Buy('', 2, 1000, 0,OT_LIMIT, OB_NextBar, '');
也就是說,如果你不寫從后到前的參數(shù),系統(tǒng)會自動替你填進那些參數(shù),怎么填呢?就是格式中等號后面的那些值。
平倉函數(shù)后有尖括號括起來的<from 'EntryName'>,表示這是可選的,需要用到時才寫。
這類函數(shù)可以設(shè)置交易商品、委托類型、時機、數(shù)量、價格、滑移價差,還可以指定一個開倉名EntryName,用于標識不同的交易信號所開的倉,以及今后的單獨控制;平倉函數(shù)則可指定一個平倉名ExitName,并且用from 表示平其中某種信號開的倉。
函數(shù)的參量后若有等號,表示等號后的值是默認值,這樣的參數(shù)按照從后到前的順序,可以省略不寫。省略所有參數(shù)的交易指令,其委托數(shù)量是取用【策略設(shè)置】中的數(shù)值,可以為固定數(shù)量,也可以由資金自動計算下單量。缺省的交易時機和類型是次周期(OB_NEXTBAR)市價單(OT_MARKET),市價單是要求立即成交的委托單,次周期市價單在歷史測評時以下一周期的開盤價作為委托成交價,在實際交易中以周期開始時的市價下單,委托價格一般在買入時為賣一價,賣出時為買一價,有時再加減允許的滑移價差,以保證立即成交。
更詳細的參數(shù)說明可參看公式編輯器里的函數(shù)說明,我們還是多做些實驗吧。
//-------金魔方智能交易公式--------------
//例2_1 一目均衡多空策略
{策略:
1.轉(zhuǎn)換線金叉基準線,本周期收盤時平空反手做多
2.轉(zhuǎn)換線死叉基準線,本周期收盤時平多反手做空
3.多頭自開倉20周期后平倉
}
input:
SN(26), FN(9);
基準線: (HHV(H,SN)+LLV(L,SN))/2;
轉(zhuǎn)換線: (HHV(H,FN)+LLV(L,FN))/2;
bEnterLong := CrossOver(轉(zhuǎn)換線, 基準線);
bEnterShort := CrossUnder(轉(zhuǎn)換線, 基準線);
if bEnterLong then Buy('', DEFAULT, 0, 0, OT_CLOSE, OB_THISBAR);
if bEnterShort then SellShort ('', DEFAULT, 0, 0, OT_CLOSE, OB_THISBAR);
if BarsSinceEntry(0) >= 20 then Sell;
if BarsSinceEntry(0) >= 20 then BuyToCover;
{
注解:
1.CrossOver函數(shù)等同于Cross函數(shù)
2.開倉DEFAULT指定的下單量為[策略設(shè)置]中的委托數(shù)量
平倉函數(shù)里的DEFAULT表示全部平倉
3.OT_CLOSE 與 OB_THISBAR 配合指定本周期收盤時交易,歷史回測時以本周期收盤價作為成交價格,
實盤自動交易時,對于分鐘線周期,其實是在本周期結(jié)束,下一周期開始時下市價單的,
對于日線周期,或者對于分鐘線當天收盤的最后一個周期,
則下單時機在[策略設(shè)置]-[自動交易]中的“日收盤交易在(n)秒前下單”指定。
}
對于例1_3的布林通道振蕩策略,若想在價格達到上下軌或均線時下單,公式如下:
//-------金魔方智能交易公式--------------
//例2_2 布林通道振蕩策略之二
{策略:
1.價格跌至下軌時開多,價格升至中線時平多
2.價格升至上軌時開空,價格跌至中線時平空
}
input:
M(20,5,200,5), N(2), S(3);
Mid : MA(C,M);
Upper: Mid + N*STD(C,M),Shift1;
Lower: Mid - N*STD(C,M),Shift1;
Buy('', 1, Lower, 0, OT_LIMIT);
Sell('', 1, Mid, 0, OT_LIMIT);
SellShort('', 1, Upper, 0, OT_LIMIT,OB_NEXTBAR);
BuyToCover('', 1, Mid, 0, OT_LIMIT,OB_NEXTBAR);
{
注解:
1.Shift1 使指標線向右偏移1個周期,使得它顯示時與NEXTBAR的交易時機對上。
}
如圖所示,當價格跌到前周期的下軌值時買入,然后價格達到前周期的均線值時賣出,因本周期未結(jié)束時,指標值是不定的,所以我們用上一周期的指標值,那么,交易指令的OB參數(shù)還是OB_NEXTBAR,可省略,表示在下一周期用本周期的指標值下單,下單類型為OT_LIMIT限價單,限定價格Price參數(shù)為布林線下軌Lower等指標值。
這個策略在行情盤整時看起來不錯,但在趨勢行情時會虧損,那么,我們再來個反向操作策略,并且把布林通道改為肯特納(Keltner)通道,公式如下:
//-------金魔方智能交易公式--------------
//例2_3 肯特納(Keltner)通道趨勢策略
{策略:
1.價格升破上軌時開多,價格跌至中線時平多
2.價格跌破下軌時開空,價格升至中線時平空
}
input:
M(20,5,200,5), N(2);
Mid : EMA(C,M);
Upper: Mid + N*ATR(10),Shift1;
Lower: Mid - N*ATR(10),Shift1;
Comment('突破買入價: ', Upper[1]:8:2), ColorRed;
Comment('突破賣空價: ', Lower[1]:8:2), ColorBlue;
Buy('', 2, Upper+MinDiff, -1, OT_STOP);
Sell('', DEFAULT, Mid, -1, OT_STOP);
SellShort('', 2, Lower-MinDiff, -1, OT_STOP);
BuyToCover('', DEFAULT, Mid, -1, OT_STOP);
{
注解:
1.ATR(10)為10周期平均真實波幅,均線加減ATR倍數(shù)即形成肯特納(Keltner)通道
2.Comment('突破買入價: ', Upper[1]:8:2)在主圖左上角顯示提示信息,
此處指定輸出的數(shù)字串為8個字符長度,帶2位小數(shù);可以指定顏色
3.平倉函數(shù)委托數(shù)量為DEFAULT表示全部平倉
}
如圖所示,這次的開平倉正好和前例是反著的,因為下單類型為OT_STOP停損單,它與限價單正好是相反的,當我們要買入時,限價單是埋在當前市價的下方,等待價格下跌到限價時成交,而停損單是在當前市價的上方,等待價格向上突破時成交。賣出時方向相反。對于停損單這個術(shù)語,賣出停損容易明白,對于買入開倉,可以這樣理解,因為我是要買入的,價格在不斷往上行,少賺也是一種虧損,所以在價格升到一定位置時買入“停損”。
需要注意的是,停損價之后的Slippage參數(shù)都被設(shè)為-1,這表示只要價格突破停損價就交易,例如次日跳空高開,不管多高都要買入。如果要限制交易價格,太高了就不買入,那就設(shè)置Slippage參數(shù)為允許的范圍,這種單叫做停損限價單,請自行修改測試。
這次我們在公式的交易指令函數(shù)中指定委托數(shù)量為2,可以把鼠標移到交易箭頭處或查看測評報告中的交易明細。
以上的趨勢和振蕩策略實例在貼圖中都用于日線周期,自動交易常用于日內(nèi)交易,這類公式有些什么特殊的編制技巧呢?