博庭公司推出的金魔方軟件繼承了飛狐交易師優(yōu)秀的技術(shù)分析功能,并且增加了許多新特性,尤其是在公式系統(tǒng)和程序化交易方面,祝愿金魔方再創(chuàng)輝煌!
金魔方用于編寫(xiě)公式的語(yǔ)言稱為金語(yǔ)言(KingLanguage,KL),它有許多增強(qiáng)的特性,我們將逐步講解。金魔方在公式樹(shù)中增設(shè)了一項(xiàng)新的智能交易公式類型,它與舊的交易系統(tǒng)公式相似而又不同。
舊交易系統(tǒng)的范式是:交易信號(hào): 條件表達(dá)式
新智能交易的范式是:If 條件表達(dá)式Then 交易指令
與交易系統(tǒng)的四種信號(hào)對(duì)應(yīng),新智能交易也有四種基本指令,如下所示:
交易類別:老交易系統(tǒng)信號(hào) –> 新智能交易指令
開(kāi)多、多頭開(kāi)倉(cāng)、買入開(kāi)倉(cāng)、買入:ENTERLONG–> Buy
平多、多頭平倉(cāng)、賣出平倉(cāng)、賣出:EXITLONG–> Sell
開(kāi)空、空頭開(kāi)倉(cāng)、賣出開(kāi)倉(cāng)、空頭賣出:ENTERSHORT–> SellShort
平空、空頭平倉(cāng)、買入平倉(cāng)、空頭回補(bǔ):EXITSHORT–> BuyTocover
舊交易系統(tǒng)只能定義交易信號(hào),但無(wú)法在公式中進(jìn)行倉(cāng)位控制等復(fù)雜操作。
新智能交易公式可以通過(guò)交易指令的參數(shù)以及許多交易相關(guān)函數(shù)進(jìn)行各式各樣的精細(xì)控制。
最好的學(xué)習(xí)方法是多實(shí)踐。讓我們開(kāi)始創(chuàng)建公式,在公式樹(shù)【智能交易】下【新建文件夾】,命名為“攻略”,然后在其下【新建公式】,輸入名稱“例1_1”,確定后,出現(xiàn)公式編輯器,輸入以下源代碼:
//-------金魔方智能交易公式--------------
//例1_1 均線交叉延時(shí)過(guò)濾買賣策略
{策略:
1.收盤(pán)價(jià)金叉30周期均線,且在其上延時(shí)幾個(gè)周期后買入
2.收盤(pán)價(jià)死叉30周期均線,且在其下延時(shí)幾個(gè)周期后賣出
3.外部參數(shù)切換多種類型均線
}
input:
均線周期數(shù)(30,5,200,5), //缺省值,最小值,最大值,步長(zhǎng)
延時(shí)周期數(shù)(0,0,6,1), 均線類型(1,1,5,1);
switch 均線類型 begin
case 1: MA1 := MA(C,均線周期數(shù));
case 2: MA1 := MA((H+L+C)/3,均線周期數(shù));
case 3: MA1 := EMA(C,均線周期數(shù));
case 4: MA1 := WMA(C,均線周期數(shù));
case 5: MA1 := SMA(C,均線周期數(shù),1);
end
Plot(MA1,'均線'); //顯示均線
bEnterLong := BarsLast(Cross(C, MA1))=延時(shí)周期數(shù) And C>MA1;
bExitLong := BarsLast(Cross(MA1,C))=延時(shí)周期數(shù) And C<MA1;
if bEnterLong then Buy;
if bExitLong then Sell;
{
注解:
1.用 input 語(yǔ)句聲明公式參數(shù),好處是便于修改、復(fù)制。
其中的最小值、最大值、步長(zhǎng)用于今后的參數(shù)優(yōu)化。
2.均線類型在外部參數(shù)設(shè)置,可用于參數(shù)優(yōu)化
公式中用 switch case語(yǔ)句選用均線類型
3.Plot函數(shù)輸出指標(biāo)線到主圖
4.交易條件先賦給 bEnterLong 等中間變量,便于今后修改、替換,
但語(yǔ)句多了影響運(yùn)行效率,若執(zhí)行速度很重要,就直接把條件表達(dá)式寫(xiě)在If后。
5.Buy類交易函數(shù)其實(shí)有很多參數(shù),但從后到前可以取缺省值不用寫(xiě)出}
編寫(xiě)好公式后,點(diǎn)擊工具欄第1個(gè)按鈕進(jìn)行編譯,如果無(wú)誤,編譯信息窗會(huì)提示編譯通過(guò),這就可以應(yīng)用公式了。此時(shí)可以看到“攻略”文件夾下多了個(gè)“例1_1”公式,雙擊它或拖放到主圖上,這時(shí)出現(xiàn)【策略設(shè)置】,有【屬性】【自動(dòng)交易】【公式參數(shù)】三個(gè)頁(yè)面,先初略看看,不管細(xì)節(jié),點(diǎn)確定后:
可以看到,收盤(pán)價(jià)上穿均線后的次周期開(kāi)盤(pán)價(jià)出現(xiàn)紫色的三角箭頭指示買入價(jià)位,收盤(pán)價(jià)下穿均線后的次周期開(kāi)盤(pán)價(jià)出現(xiàn)反向的三角箭頭指示賣出價(jià)位,這兩個(gè)箭頭間紫色連線表示這筆交易盈利,藍(lán)色則表示虧損。把鼠標(biāo)移到三角箭頭,出現(xiàn)浮動(dòng)信息窗,可以看到交易詳情,包括數(shù)量、價(jià)格、開(kāi)平倉(cāng)配對(duì)等信息。在主圖左上角公式名稱處,右鍵菜單【查看測(cè)評(píng)報(bào)告】,選擇【交易明細(xì)】頁(yè)面,可以看到交易詳情:
在主圖左上角公式名稱處,右鍵菜單【策略設(shè)置】,點(diǎn)選【公式參數(shù)】頁(yè)面,修改這3個(gè)參數(shù)的值,點(diǎn)確定后看看均線和交易信號(hào)發(fā)生了什么變化?
金魔方的智能交易公式可輸出指標(biāo)線以及畫(huà)線、文字等對(duì)象,便于核對(duì)交易信號(hào)與指標(biāo)線的關(guān)系、提示報(bào)警等,甚至可直接代替技術(shù)指標(biāo)等其它類型的公式。與飛狐公式逐行執(zhí)行不同,它的運(yùn)行模式是逐根計(jì)算的,才能實(shí)現(xiàn)復(fù)雜的倉(cāng)位控制。
我們看到期指主連的K線圖下邊有復(fù)權(quán)標(biāo)記,這是因?yàn)楣芍钙谪洿嬖趽Q月價(jià)差,為了走勢(shì)的連續(xù)性和指標(biāo)、測(cè)評(píng)的正確性,需要做復(fù)權(quán)處理,把鼠標(biāo)移到復(fù)權(quán)標(biāo)記處可看到換月價(jià)差信息。
Buy、Sell表示操作股票時(shí)的買入、賣出,如果我要操作期貨呢?既做多也做空,我們?cè)囋囅旅娴墓剑?/font>
//-------金魔方智能交易公式--------------
//例1_2 自適應(yīng)均線轉(zhuǎn)向多空策略
{策略:
1.自適應(yīng)均線上拐一定幅度后,平空反手開(kāi)多
2.自適應(yīng)均線下拐一定幅度后,平多反手開(kāi)空
}
input:
N(10), Pct(0.05);
AMA1: AdaptiveMovAvg(C, N, 2, 30);
bEnterLong := (AMA1[0]/AMA1[1])>(100+Pct)/100;
bEnterShort := (AMA1[0]/AMA1[1])<(100-Pct)/100;
if bEnterLong then Buy;
if bEnterShort then SellShort;
{
注解:
1.AdaptiveMovAvg為自適應(yīng)移動(dòng)平均線,其參數(shù)FL=2,SL=30為Kaufman在其《精明交易者》中所用的數(shù)值
2.序列下標(biāo)表示K線位置,AMA1[0]表示取當(dāng)前周期的值,AMA1[1]表示取前一個(gè)周期的值
3.當(dāng)AMA1上升且大于前值百分之Pct時(shí)買多,反之賣空
}
如圖所示,多了藍(lán)色箭頭表示空頭交易,我們發(fā)現(xiàn),多頭平倉(cāng)交易與空頭開(kāi)倉(cāng)交易同時(shí)執(zhí)行,查看交易明細(xì)證實(shí)了這一點(diǎn)。這是因?yàn)椋?/font>
1、 單一策略只能持多倉(cāng)、持空倉(cāng)、無(wú)持倉(cāng)三種狀態(tài),不允許多空雙向同時(shí)持倉(cāng)。
2、 某交易指令開(kāi)倉(cāng)時(shí),如果已有反向持倉(cāng),先自動(dòng)平掉舊倉(cāng)再反手開(kāi)新倉(cāng)。
本例在市場(chǎng)中始終持倉(cāng),空頭開(kāi)倉(cāng)時(shí)會(huì)自動(dòng)先平掉原有的多頭持倉(cāng),反之亦然。多空交易交錯(cuò)發(fā)生,不需要寫(xiě)平倉(cāng)指令。
這種機(jī)制使得編寫(xiě)公式特別簡(jiǎn)潔,如果允許同時(shí)持有多頭和空頭倉(cāng),公式的邏輯和函數(shù)、語(yǔ)句將變得很復(fù)雜,難以掌握。雖然單一策略不能同時(shí)有多頭和空頭的持倉(cāng),但不同策略可以持有不同方向的倉(cāng)位,例如策略A持有多頭,策略B持有空頭,它們互不干擾,而且,不同的策略可以編寫(xiě)在同一個(gè)公式文件中,如何實(shí)現(xiàn)?敬請(qǐng)持續(xù)關(guān)注本攻略!
以上例子屬于趨勢(shì)交易策略,我們?cè)僭囋囉貌剂滞ǖ缹?shí)現(xiàn)振蕩交易策略。
//-------金魔方智能交易公式--------------
//例1_3 布林通道振蕩策略
{策略:
1.最低價(jià)低于下軌后開(kāi)多,最高價(jià)高于中線后平多
2.最高價(jià)高于上軌后開(kāi)空,最低價(jià)低于中線后平空
3.可連續(xù)同向開(kāi)倉(cāng)3次
}
input:
M(20,5,200,5), N(2), S(3);
//計(jì)算布林通道
Mid : MA(C,M);
Upper: Mid + N*STD(C,M);
Lower: Mid - N*STD(C,M);
AllowSameEntries(S);
bEnterLong := L < Lower; //多頭開(kāi)倉(cāng)條件
bExitLong := H > Mid; //多頭平倉(cāng)條件
bEnterShort := H > Upper; //空頭開(kāi)倉(cāng)條件
bExitShort := L < Mid; //空頭平倉(cāng)條件
if bEnterLong then Buy;
if bExitLong then Sell;
if bEnterShort then SellShort;
if bExitShort then BuyToCover;
{
注解:
1.AllowSameEntries函數(shù)設(shè)置允許連續(xù)同向開(kāi)倉(cāng)最大次數(shù)
默認(rèn)不能連續(xù)開(kāi)同向倉(cāng)}
如圖所示,可以用AllowSameEntries函數(shù)控制同方向連續(xù)開(kāi)倉(cāng)的最大次數(shù),如果沒(méi)有用到這個(gè)函數(shù),或者把S參數(shù)設(shè)置為1,則在已有持倉(cāng)情況下,不再連續(xù)開(kāi)同方向的倉(cāng),大家可以試試。默認(rèn)不能連續(xù)開(kāi)同向倉(cāng),也是為了使大多數(shù)策略的公式編寫(xiě)簡(jiǎn)單,邏輯清晰。
從以上的例子,我們知道,不帶任何參數(shù)的交易指令是在信號(hào)發(fā)生的下一周期開(kāi)盤(pán)時(shí)進(jìn)行交易的,因?yàn)楸局芷谑毡P(pán)時(shí)才能確定信號(hào)最終不變的狀態(tài),但那一瞬間卻是下不到單的。
在公式編輯器中把鼠標(biāo)移到Buy函數(shù)名處,出現(xiàn)浮動(dòng)信息窗,看到函數(shù)說(shuō)明,我們發(fā)現(xiàn)其實(shí)它有很多參數(shù),如何應(yīng)用這些參數(shù)?如何使用其它的下單方式、控制下單時(shí)機(jī)、價(jià)位和數(shù)量嗎?如果想在收盤(pán)時(shí)下單怎么辦呢?另外,默認(rèn)的交易數(shù)量是如何定的呢?回想起【策略設(shè)置】中有“委托數(shù)量”的設(shè)置,是在那里設(shè)置的嗎?