布林帶我之前寫(xiě)過(guò)了一篇如何求解的詳細(xì)解說(shuō),這篇還是寫(xiě)它箭阶,不是重復(fù)之前的內(nèi)容虚茶,而是之前寫(xiě)的交易公式是我野路子出身自己編寫(xiě)的程序,這次看的是科班(系統(tǒng)自帶的)如何寫(xiě)的源代碼仇参,我們可以從這好好學(xué)習(xí)一下嘹叫。
其實(shí)現(xiàn)在我寫(xiě)這些解讀代碼系列,也是一邊學(xué)習(xí)诈乒,一邊就順便寫(xiě)出來(lái)的罩扇,我自己寫(xiě)的代碼,大部分都是有一個(gè)理念了怕磨,就復(fù)制系統(tǒng)寫(xiě)好的喂饥,再照理念添加買(mǎi)賣(mài)條件,大部分都只注意買(mǎi)賣(mài)點(diǎn)的準(zhǔn)確性肠鲫,不能讓實(shí)盤(pán)交易與歷史測(cè)試有出入的员帮,所以總寫(xiě)出有點(diǎn)缺陷的代碼。在這我再次提醒各位朋友导饲,在做程序化的交易時(shí)捞高,一定要把買(mǎi)賣(mài)點(diǎn)位做好準(zhǔn)確,不能有很大的滑點(diǎn)誤差渣锦,否則實(shí)盤(pán)將是一個(gè)悲劇硝岗,這篇文章主要的也就是讓各位明白這買(mǎi)賣(mài)點(diǎn)位的重要性的。
boll通道突破程序化系統(tǒng)基本操作規(guī)則如下:
入場(chǎng)條件:
1袋毙、價(jià)格突破通道上軌型檀,則開(kāi)多倉(cāng)。
2听盖、價(jià)格突破通道下軌胀溺,則開(kāi)空倉(cāng)裂七。
出場(chǎng)條件:
1、價(jià)格突破通道上軌月幌,則平空倉(cāng)碍讯。
2悬蔽、價(jià)格突破通道下軌扯躺,則平多倉(cāng)。
好了蝎困,廢話不說(shuō)了录语,我們直接來(lái)看代碼:
Params
Numeric AvgLen(3); //聲明數(shù)值型參數(shù)AvgLen,其實(shí)就是均線周期的參數(shù)為3.//
Numeric Disp(16); //聲明數(shù)值型參數(shù)Disp禾乘,賦值16.//
Numeric SDLen(12); //聲明數(shù)值型參數(shù)SDLen澎埠,賦值12.//
Numeric SDev(2); //聲明數(shù)值型參數(shù)SDev,賦值2.//
Vars
Numeric Price; //聲明變量?jī)r(jià)格Price始藕。//
NumericSeries AvgVal(0); //聲明序列變量AvgVal蒲稳,其實(shí)也就是中間帶。//
NumericSeries SDmult(0) ; //聲明序列變量SDmult伍派,這個(gè)計(jì)算通道距離江耀。//
NumericSeries DispTop(0); //聲明序列變量DispTop,這個(gè)通道上軌诉植。//
NumericSeries DispBottom(0); //聲明序列變量DispBottom祥国,這個(gè)通道下軌。//
Numeric MinPoint; //聲明MinPoint晾腔,這個(gè)是最小變動(dòng)價(jià)位舌稀。//
Begin
If(!CallAuctionFilter()) Return;// 集合競(jìng)價(jià)和小節(jié)休息過(guò)濾。//
MinPoint = MinMove * PriceScale; //最小變動(dòng)價(jià)位=商品的最小變動(dòng)量 *商品的計(jì)數(shù)單位灼擂。//
Price = Close;//術(shù)語(yǔ)是把收盤(pán)價(jià)賦值給價(jià)格壁查,直白就是價(jià)格等于收盤(pán)價(jià)。//
//下來(lái)就是人家計(jì)算的布林帶剔应。//
AvgVal = Average(Price,AvgLen); //中間帶均線計(jì)算潮罪,3個(gè)周期的收盤(pán)價(jià)移動(dòng)均線。//
SDmult = StandardDev(Price,SDLen,2)*SDev;//求標(biāo)準(zhǔn)差函數(shù)我們說(shuō)過(guò)了领斥,這邊就是計(jì)算12周期以來(lái)收盤(pán)價(jià)的樣本標(biāo)準(zhǔn)差嫉到,再乘以系數(shù)2。//
DispTop = AvgVal[Disp] + SDmult;//中間帶AvgVal[16]月洛,從當(dāng)前k線往回倒騰第16個(gè)值何恶,所以這意思就明白了,上軌=AvfVal[16]+SDmult.//
DispBottom = AvgVal[Disp] - SDmult;//同理的嚼黔,下軌道就是減去通道距離SDmult//
PlotNumeric("DispTop",DispTop);//畫(huà)線了细层,顯示上軌//
PlotNumeric("DispBottom",DispBottom);//顯示下軌//
//接下來(lái)開(kāi)倉(cāng)買(mǎi)入場(chǎng)惜辑。//
If(MarketPosition == 0)//假如當(dāng)前為空倉(cāng),執(zhí)行下列操作疫赎。//
{
If(High >= DispTop[1])//假如最高價(jià)大于等于前一個(gè)上軌價(jià)盛撑,就是突破的意思,執(zhí)行下列買(mǎi)入操作捧搞。//
{
Buy(0,Max(Open,DispTop[1]));//這里的0意思是1手抵卫,Max(Open,DisTop[1])就是兩者中哪個(gè)值大胎撇,就當(dāng)成開(kāi)倉(cāng)價(jià)格了介粘。//
}
}
//系統(tǒng)出場(chǎng)//
If(MarketPosition == 1 and BarsSinceEntry > 0)//假如持多倉(cāng),并且當(dāng)前持倉(cāng)的第一個(gè)建倉(cāng)位置k線大于0晚树,也就是開(kāi)倉(cāng)后起碼從第二根k線開(kāi)始姻采。//
{
If(Low <= DispBottom[1])//假如低價(jià)小于或等于前一個(gè)下軌值,執(zhí)行賣(mài)出操作爵憎。//
{
Sell(0,Min(Open,DispBottom[1])); //平倉(cāng)1手慨亲,Min()同理兩者中哪個(gè)值小,就用它當(dāng)成平倉(cāng)價(jià)宝鼓。//
}
}
//開(kāi)倉(cāng)賣(mài)出操作刑棵。//
If(MarketPosition == 0)//空倉(cāng)時(shí)候。//
{
If(Low <= DispBottom[1])//假如低價(jià)小于或等于前一個(gè)下軌值席函,執(zhí)行賣(mài)出操作铐望。//
{
SellShort(0,Min(Open,DispBottom[1]));//開(kāi)倉(cāng)賣(mài)出1手,Min()兩者中哪個(gè)值小茂附,就用它當(dāng)成平倉(cāng)價(jià)正蛙。//
}
}
//平倉(cāng)操作。//
If(MarketPosition == -1 and BarsSinceEntry > 0)//假如持多倉(cāng)营曼,并且當(dāng)前持倉(cāng)的第一個(gè)建倉(cāng)位置k線大于0乒验,也就是開(kāi)倉(cāng)后起碼從第二根k線開(kāi)始。//
{
If(High >= DispTop[1])//假如最高價(jià)大于等于前一個(gè)上軌價(jià)蒂阱,就是突破的意思锻全,執(zhí)行下列買(mǎi)入操作。//
{
BuyToCover(0,Max(Open,DispTop[1]));//開(kāi)倉(cāng)買(mǎi)入1手录煤,Max()兩者中哪個(gè)值大鳄厌,就用它當(dāng)成平倉(cāng)價(jià)。//
}
}
End
看著結(jié)果還是可以的妈踊,就像我開(kāi)頭提醒的了嚎,對(duì)程序化來(lái)說(shuō)買(mǎi)賣(mài)點(diǎn)位是很重要的,看我把買(mǎi)賣(mài)點(diǎn)位的代碼變下,再對(duì)比一下收益圖歪泳,大家就會(huì)發(fā)現(xiàn)這差距多大了萝勤。變化代碼如下:
Params
Numeric AvgLen(3);
Numeric Disp(16);
Numeric SDLen(12);
Numeric SDev(2);
Vars
Numeric Price;
NumericSeries AvgVal(0);
NumericSeries SDmult(0) ;
NumericSeries DispTop(0);
NumericSeries DispBottom(0);
Numeric MinPoint;
Begin
If(!CallAuctionFilter()) Return;
MinPoint = MinMove*PriceScale;
Price = Close;
AvgVal = Average(Price,AvgLen);
SDmult = StandardDev(Price,SDLen,2)*SDev;
DispTop = AvgVal[Disp] + SDmult;
DispBottom = AvgVal[Disp] - SDmult;
PlotNumeric("DispTop",DispTop);
PlotNumeric("DispBottom",DispBottom);
If(MarketPosition == 0)
{
If(Close[1] >= DispTop[1])
{
Buy(0,Open);
}
}
If(MarketPosition == 1 and BarsSinceEntry > 0)
{
If(Close[1] <= DispBottom[1])
{
Sell(0,Open);
}
}
If(MarketPosition == 0)
{
If(Close[1] <= DispBottom[1])
{
SellShort(0,Open);
}
}
If(MarketPosition == -1 and BarsSinceEntry > 0)
{
If(Close[1] >= DispTop[1])
{
BuyToCover(0,Open);
}
}
End
看到了吧,這兩個(gè)圖對(duì)比一下呐伞,這第二個(gè)代碼這波動(dòng)的讓人難受吧敌卓。再看第三個(gè)嚴(yán)重延誤的買(mǎi)賣(mài)代碼,可以說(shuō)這是個(gè)坑爹的代碼:
Params
Numeric AvgLen(3);
Numeric Disp(16);
Numeric SDLen(12);
Numeric SDev(2);
Vars
Numeric Price;
NumericSeries AvgVal(0);
NumericSeries SDmult(0) ;
NumericSeries DispTop(0);
NumericSeries DispBottom(0);
Numeric MinPoint;
Begin
If(!CallAuctionFilter()) Return;
MinPoint = MinMove*PriceScale;
Price = Close;
AvgVal = Average(Price,AvgLen);
SDmult = StandardDev(Price,SDLen,2)*SDev;
DispTop = AvgVal[Disp] + SDmult;
DispBottom = AvgVal[Disp] - SDmult;
PlotNumeric("DispTop",DispTop);
PlotNumeric("DispBottom",DispBottom);
If(MarketPosition == 0)
{
If(Close >= DispTop[1])
{
Buy(0,Open);
}
}
If(MarketPosition == 1 and BarsSinceEntry > 0)
{
If(Close <= DispBottom[1])
{
Sell(0,Open);
}
}
If(MarketPosition == 0)
{
If(Close <= DispBottom[1])
{
SellShort(0,Open);
}
}
If(MarketPosition == -1 and BarsSinceEntry > 0)
{
If(Close >= DispTop[1])
{
BuyToCover(0,Open);
}
}
End
看到這收益多讓人心動(dòng)啊伶氢,可惜這是錯(cuò)覺(jué)趟径,當(dāng)你實(shí)盤(pán)觀察的時(shí)候,就會(huì)發(fā)現(xiàn)鞍历,開(kāi)倉(cāng)點(diǎn)位總是在延誤舵抹,價(jià)格明明已經(jīng)過(guò)了肪虎,才顯示出來(lái)劣砍,這根本就沒(méi)法操作的,你說(shuō)可以掛單啊扇救,但掛單刑枝,你有那預(yù)見(jiàn)性嗎?或者說(shuō)掛單一定能讓價(jià)格返回來(lái)成交的概率有多少迅腔?
所以装畅,最后還是強(qiáng)調(diào)一遍,程序化必須明確買(mǎi)賣(mài)點(diǎn)位沧烈。