- 精华
- 0
- 在线时间
- 322 小时
- UID
- 257171
- 积分
- 133
- 帖子
- 99
- 阅读权限
- 40
- 注册时间
- 2017-9-28
- 最后登录
- 2019-11-16
- 精华
- 0
- UID
- 257171
- 积分
- 133
- 帖子
- 99
- 主题
- 32
- 阅读权限
- 40
- 注册时间
- 2017-9-28
- 最后登录
- 2019-11-16
|
俺是新手,请多包涵啊........
双均线策略,A_SendOrder开平仓。
问题1:为何会出现持有2手多仓的情况?是什么原因导致的?
问题2:If(BKcond and TemB==0&&barstatus==2 && KC==True) //此处加上HasBK==0的限制条件,就一直不开仓了,去掉HasBK==0的限制就能正常开仓了,这是为何?错在哪里?
问题3:初始化全局变量if ( BarStatus==0 && GetGlobalVar(0)==InvalidNumeric)这样是正确的吗?这样能避免断线重连后不必要的再次初始化吗?
源码如下
Params
Numeric FastLength(5);
Numeric SlowLength(20);
Numeric OffSet (8);//委托价格偏移
Numeric Lots (1);
Vars
NumericSeries AvgValue1;
NumericSeries AvgValue2;
Numeric TemB;//多头持仓
Numeric TemS;//空头持仓
BooL KC(False);//开仓许可
BooL QC(False);//清仓必须
Bool BKcond(False);
bool SPcond(False);
Numeric HasSP(0);//已平多仓标志
Numeric HasBK (0);//已开多仓标志
Begin
// 集合竞价和小节休息过滤
If(!CallAuctionFilter()) Return;
if ( BarStatus==0 && GetGlobalVar(0)==InvalidNumeric)//初始化全局变量
{
HasSP = 0;
HasBK = 0;
SetGlobalVar (0 ,HasSP);
SetGlobalVar ( 1 , HasBK );
} ELse
{
HasSP = GetGlobalVar (0);
HasBK = GetGlobalVar (1);
Commentary("HasSP" +Text(HasSP));
Commentary("HasBK" +Text(HasBK));
}
KC=time>=0.090000 and time<0.145800 || time>=0.0900 and time<0.1458 || time>=0.210000 and time<0.232800 || time>=0.2100 and time<0.2328;//允许开仓
QC=time>=0.145800 and time<0.150000 || time>=0.1458 and time<0.1500 || time>=0.232800 and time<0.233000 || time>=0.2328 and time<0.2330;//必须清仓
AvgValue1 = AverageFC(Close,FastLength);
AvgValue2 = AverageFC(Close,SlowLength);
PlotNumeric("MA1",AvgValue1);
PlotNumeric("MA2",AvgValue2);
BKcond=CrossOver (AvgValue1[1] , AvgValue2[1]);//开多的条件,
SPcond=CrossUnder (AvgValue1[1] , AvgValue2[1]);
TemB = A_BuyPosition();//多头持仓
TemS = A_SellPosition(); //空头持仓
If(BKcond and TemB==0&&barstatus==2 && KC==True) //此处加上HasBK==0的条件,就不能开仓。
{
A_SendOrder(Enum_buy,Enum_Entry,Lots,Q_AskPrice+OffSet*MinMove*PriceScale);//A_SendOrder开多,
SetGlobalVar(0,0);//允许平多仓
SetGlobalVar(1,1);
}
If(TemB>0)
{
SetGlobalVar(0,0);//允许平多仓,hassp=0
SetGlobalVar(1,1);//hasbk=1
}
If(SPcond and TemB>0&&barstatus==2 && HasSP==0 || TemB>0&&barstatus==2 && QC==True && HasSP==0)
{
A_SendOrder(Enum_Sell,Enum_Exit,TemB,Q_BidPrice-offSet*MinMove*PriceScale);
SetGlobalVar(0,1);//hassp=1
SetGlobalVar(1,0);//hasbk=0
}
End
|
|