- 精华
- 0
- 在线时间
- 35 小时
- UID
- 7457
- 积分
- 110
- 帖子
- 25
- 阅读权限
- 30
- 注册时间
- 2010-3-16
- 最后登录
- 2018-4-20
- 精华
- 0
- UID
- 7457
- 积分
- 110
- 帖子
- 25
- 主题
- 10
- 阅读权限
- 30
- 注册时间
- 2010-3-16
- 最后登录
- 2018-4-20
|
问题描述:使用突破加仓原则,在做历史测试时,如果一根Bar上连续满足了两次突破原则,如何开两次仓?比如说3890元开仓,每向下运动38个点位就加一次仓,那么当第二天价格跌破3814元(即两个38点)时,我在实盘中应该加两次仓。但在历史测试中仅显示加了一次,为什么?如何实现?
源码:Params
Numeric m(4);
Vars
numeric zdkczj;
NumericSeries a;
NumericSeries b;
NumericSeries e;
numeric entrylots;
numericSeries zs;
NumericSeries myatr;
NumericSeries jc;
numericseries scjcss;
Begin
zdkczj=Portfolio_CurrentEquity;
a=(3*c+l+o+h)/6;
b=(20*a+19*a[1]+18*a[2]+17*a[3]+16*a[4]+15*a[5]+14*a[6]+13*a[7]+12*a[8]+11*a[9]+10*a[10]+9*a[11]+8*a[12]+7*a[13]+6*a[14]+5*a[15]+4*a[16]+3*a[17]+2*a[18]+a[20])/210;
e=average(b,m);
myatr=IntPart(AvgTrueRange(10));
zs=1*myatr;
jc=0.5*myatr;
//多头开仓
if(crossover(b,e) and MarketPosition!=1)
{
SetGlobalVar(0,zs);
SetGlobalVar(1,jc);
entryLots= (zdkczj*0.02)/(1.0*zs*ContractUnit);
entryLots = IntPart(entryLots );
Buy(entryLots,C);
scjcss=entrylots;
SetGlobalVar(4,scjcss);
}
//多头开仓结束
//多头加仓
if(b>e and MarketPosition==1 and h>=LastEntryPrice+GetGlobalVar(1))
{
entryLots=Max(Power(0.5,CurrentEntries)*GetGlobalVar(4),1);
entryLots = IntPart(entryLots );
Buy(entryLots,LastEntryPrice+GetGlobalVar(1));
}
//多头加仓结束
//空头开仓
if(Crossover(e,b) and MarketPosition!=(-1))
{
SetGlobalVar(2,zs);
SetGlobalVar(3,jc);
entryLots= (zdkczj*0.02)/(1.0*zs*ContractUnit);
entryLots = IntPart(entryLots );
SellShort(entryLots,c);
scjcss=entrylots;
SetGlobalVar(5,scjcss);
}
//空头开仓结束
//空头加仓
if(b<e and MarketPosition==(-1) and l<=LastEntryPrice-GetGlobalVar(3))
{
entryLots=Max(Power(0.5,CurrentEntries)*GetGlobalVar(5),1);
entryLots = IntPart(entryLots );
SellShort(entryLots,LastEntryPrice-GetGlobalVar(3));
}
//空头加仓结束
//持仓处理
If(BarsSinceEntry!=0)
{
if(MarketPosition==1 and l<=EntryPrice-GetGlobalVar(0)) Sell(0,EntryPrice-getGlobalVar(0));
if(MarketPosition==(-1) and h>=EntryPrice+GetGlobalVar(2)) BuyToCover(0,EntryPrice+getGlobalVar(1));
}
//持仓处理结束
End |
|