联系我们:微信:qhltcn | QQ:116589960
返回列表 发帖

[转载]布林强盗交易系统源码编写原理与思路

[转载]布林强盗交易系统源码编写原理与思路

基于Bollinger Bands(布林通道)的趋势跟踪系统;根据持仓周期调整跟踪止损。该系统包含以下四个要素:布林带、均线、ROC、计数器。


入场条件:




  价格突破布林带上轨即做多;




价格跌破布林带下轨即做空;




ROC为正的情况下才能做多;




ROC为负的情况下才能做空。


出场条件:




  持多仓的情况下,N周期的收盘价小于布林带上轨,即在下个Bar平仓。




持空仓的情况下,N周期的收盘价大于布林带下轨,即在下个Bar平仓。




N的值根据持仓周期变化。刚开仓为50,每持仓Bar,即将N值减1,最小到10。


参数定义:




布林带的周期数50;




布林带标准差的倍数1.25;




ROC的周期数30;




跟踪止损算法的周期数50;


----------------------------------------------------------------------------------------------------------------------------------------------------------------------------



Part I:Bollinger Bandit System


参数定义代码:


Params


Numeric BBLength(50);



Numeric NumsStdDev(1.25);



Numeric ROCLength(30);



Numeric ExitLength(50);

布林带算法:
定义上轨为UpBand,下轨为DnBand;
UpBand = AverageFC(Close, BBLength) + StandardDev(Close, BBLength,2)* NumsStdDev;
DnBand = AverageFC(Close, BBLength) -StandardDev(Close, BBLength,2)* NumsStdDev;
这里使用的样本标准差。
实际交易讯号的产生是根据上一周期的布林带,因为我们将算法中的Close修改为Close[1];
也可以将UpBand和DnBand设为序列变量,判断UpBand[1]]的值讯号条件;
UpBand = AverageFC(Close[1], BBLength) +StandardDev(Close[1], BBLength,2)* NumsStdDev;
DnBand = AverageFC(Close[1], BBLength) -StandardDev(Close[1], BBLength,2)* NumsStdDev;

计算Roc值
定义变量RocValue
Numeric RocValue;
RocValue = Close-Close[RocLength];


开多仓条件写法:
If(MarketPosition<>1 && RocValue > 0)
{
If(High>=UpBand)


{

MyPrice = UpBand;
If(Open>MyPrice) MyPrice = Open;  
Buy(1,MyPrice);


}

}



开空仓条件的写法类似:
If(MarketPosition<>-1 && RocValue < 0)
{
If(Low<=DnBand)


{

MyPrice = DnBand;
If(Open<MyPrice) MyPrice = Open;  
SellShort(1,MyPrice);


}

}



动态计算跟踪止损的周期数:
先定义一个变量:
NumericSeries exBars;
在公式开始部分添加如下代码:
If(MarketPosition==0)
{
exBars = ExitLength;
}else
{
exBars = exBars[1] - 1;
}



根据动态计算的周期数,求出前一周期的均线:
StopAvgClose = Average(Close[1],exBars);
持有多仓的情况下,当前价格如果跌破StopAvgClose 即止损。
If(MarketPosition==1 && Low<= StopAvgClose )
{
MyPrice = StopAvgClose ;
If(Open<MyPrice) MyPrice = Open;  
Sell(1,MyPrice);
}






持有空仓的情况下,当前价格如果突破StopAvgClose 即止损。
If(MarketPosition==-1 && High>= StopAvgClose )
{
MyPrice = StopAvgClose ;
If(Open>MyPrice) MyPrice = Open;  
BuyToCover(1,MyPrice);
}



对于BBS系统的完善:
1.我们可以替换Close为其他算法,比如:

Typical Price = (high + low + close)/3


Weighted Price = (high + low + close + close)/4

2.增加固定比例止损额,限制单笔交易的最大亏损;
3.增加连续亏损的控制,由此我们引申出下一部分内容。

期货论坛管理员,官方开户、量化、广告以及合作事宜,联系微信:qhltcn  QQ:116589960

返回列表