Params
Numeric AA(20000);
Numeric BB(0.07);
Numeric CC(0.16);
Vars
Bool VAR1(False);
Bool VAR2(False);
Bool VAR3(False);
Bool VAR4(False);
Bool VAR5(False);
Bool VAR6(False);
Bool VAR7(False);
Bool VAR8(False);
Bool VAR9(False);
Numeric Minpoint;
Numeric UPLOTS1;
Numeric DNLOTS1;
Numeric UPLOTS2;
Numeric DNLOTS2;
Series<Numeric> KZS;
Series<Numeric> DZS;
Series<Numeric> COdiff1;
Series<Numeric> COdiff2;
Bool UpTrend(False);
Bool DownTrend(False);
Events
OnBar(ArrayRef<Integer> indexs)
{
// 集合竞价过滤
If(BarStatus == 2 && Time == 0.090000 && CurrentTime < 0.090000) Return;
If(BarStatus == 2 && Time == 0.210000 && CurrentTime < 0.210000) Return;
If(BarStatus == 2 && Time == 0.103000 && CurrentTime < 0.103000) Return;
If(BarStatus == 2 && Time == 0.133000 && CurrentTime < 0.133000) Return;
//涨跌停板过滤
If((Close==Q_LowerLimit) or (Close==Q_UpperLimit)) Return;
COdiff1 = Close[1]-Open[1];
COdiff2 = Close[2]-Open[2];
If(COdiff1>0 && COdiff2>0)
{
UpTrend = True;
}
Else If(COdiff1<-0 && COdiff2<-0)
{
DownTrend = True;
}
Range[0:DataSourceSize() - 1]
{
VAR4 = data0.L>=data0.L[1] AND data0.H>=data0.H[1]+1;
VAR5 = data0.H<=data0.H[1] AND data0.L<=data0.L[1]-1;
VAR6 = data1.L>=data1.L[1] AND data1.H>=data1.H[1]+1;
VAR7 = data1.H<=data1.H[1] AND data1.L<=data1.L[1]-1;
VAR8 = (Time>=0.090500 And Time<=0.101000) Or (Time>=0.103000 And Time<=0.145500) Or (Time>=0.210500 And Time<=0.225500);
VAR9 = (Time==0.093000 And CurrentTime<=0.095800) OR (Time==0.100000 And CurrentTime<=0.101300) OR (Time==0.110000 And CurrentTime<=0.112800) OR (Time==0.133000 And CurrentTime<=0.135800) OR (Time==0.140000 And CurrentTime<=0.142800) OR (Time==0.143000 And CurrentTime<=0.145800) OR (Time==0.213000 And CurrentTime<=0.215800) OR (Time==0.220000 And CurrentTime<=0.222800) OR (Time==0.223000 And CurrentTime<=0.225800);
//KZS = L[BarsSinceEntry];
//PlotNumeric("MA1",KZS);
If(((data0.H[1]-data0.L[1]+2)*0.8)/((data0.H[1]+1)*(BB+0.01))<0.03)
{
UPLOTS1=IntPart((AA*0.8)/((data0.H[1]+1)*5*(BB+0.01)));
}
If(((Data0.H[1]-data0.L[1]+2)*0.8)/((data0.H[1]+1)*(BB+0.01))>=0.03)
{
UPLOTS1=IntPart((AA*0.03)/((data0.H[1]-data0.L[1]+2)*5));
}
If(((data0.H[1]-data0.L[1]+2)*0.8)/((data0.L[1]-1)*(BB+0.01))<0.03 )
{
DNLOTS1=IntPart((AA*0.8)/((data0.L[1]-1)*5*(BB+0.01)));
}
If(((data0.H[1]-data0.L[1]+2)*0.8)/((data0.L[1]-1)*(BB+0.01))>=0.03 )
{
DNLOTS1=IntPart((AA*0.03)/((data0.H[1]-data0.L[1]+2)*5));
}
If(((data1.H[1]-data1.L[1]+2)*0.8)/((data1.H[1]+1)*(BB+0.01))<0.03)
{
UPLOTS2=IntPart((AA*0.8)/((data1.H[1]+1)*5*(BB+0.01)));
}
If(((Data1.H[1]-data1.L[1]+2)*0.8)/((data1.H[1]+1)*(BB+0.01))>=0.03)
{
UPLOTS2=IntPart((AA*0.03)/((data1.H[1]-data1.L[1]+2)*5));
}
If(((data1.H[1]-data1.L[1]+2)*0.8)/((data1.L[1]-1)*(BB+0.01))<0.03)
{
DNLOTS2=IntPart((AA*0.8)/((data1.L[1]-1)*5*(BB+0.01)));
}
If(((data1.H[1]-data1.L[1]+2)*0.8)/((data1.L[1]-1)*(BB+0.01))>=0.03)
{
DNLOTS2=IntPart((AA*0.03)/((data1.H[1]-data1.L[1]+2)*5));
}
//开多1
If((data0.H[1]>data0.H[2] AND data0.L[1]>data0.L[2]) AND (data1.H[1]>data1.H[2] AND data1.L[1]>data1.L[2]) AND VAR4 AND VAR8 and data0.MarketPosition==0)
{
data0.Buy(1,data0.H[1]);
}
//开空1
If((data0.H[1]>data0.H[2] AND data0.L[1]>data0.L[2]) AND (data1.H[1]>data1.H[2] AND data1.L[1]>data1.L[2]) AND VAR5 AND VAR8 and data0.MarketPosition==0)
{
data0.SellShort(1,data0.L[1]);
}
//开多2
If((data0.H[1]<=data0.H[2] AND data0.L[1]>=data0.L[2]) AND (data1.H[1]<=data1.H[2] AND data1.L[1]>=data1.L[2]) AND VAR6 AND VAR8 and data1.MarketPosition==0)
{
data1.Buy(2,data1.H[1]);
}
//开空2
If((data0.H[1]<=data0.H[2] AND data0.L[1]>=data0.L[2]) AND (data1.H[1]<=data1.H[2] AND data1.L[1]>=data1.L[2]) AND VAR7 AND VAR8 and data1.MarketPosition==0)
{
data1.SellShort(2,data1.L[1]);
}
//开多3
If((data0.H[1]<=data0.H[2] AND data0.L[1]>=data0.L[2]) AND (data1.H[1]>data1.H[2] AND data1.L[1]>data1.L[2]) AND VAR6 AND VAR8 and data1.MarketPosition==0)
{
data1.Buy(3,data1.H[1]);
}
//开空3
If((data0.H[1]<=data0.H[2] AND data0.L[1]>=data0.L[2]) AND (data1.H[1]>data1.H[2] AND data1.L[1]>data1.L[2]) AND VAR7 AND VAR8 and data1.MarketPosition==0)
{
data1.SellShort(3,data1.L[1]);
}
//开多4
If((data0.H[1]>data0.H[2] AND data0.L[1]>data0.L[2]) AND (data1.H[1]<=data1.H[2] AND data1.L[1]>=data1.L[2]) AND VAR4 AND VAR8 and data0.MarketPosition==0)
{
data0.Buy(4,data0.H[1]);
}
//开空4
If((data0.H[1]>data0.H[2] AND data0.L[1]>data0.L[2]) AND (data1.H[1]<=data1.H[2] AND data1.L[1]>=data1.L[2]) AND VAR5 AND VAR8 and data0.MarketPosition==0)
{
data0.SellShort(4,data0.L[1]);
}
}
}
为什么将公式进行模拟交易的时候空仓时也不能开仓?如何修改才能保证条件满足后开一次仓,而不是频繁开仓?将marketposition==0这个条件去掉后,能开仓,但发出两个相同的委托单.
不能开仓先检查每个条件是否满足,另外你的图表看上去有多个图层,加载的内容各是什么
加载的内容为两个品种的五分钟K线。我去掉marketposition==0这个限定条件后,能正常开仓,说明那一大串限定条件没问题,可是这样的话系统发出两个相同的委托单,比如公式中为发5手的委托单,系统会发出两个5手的委托单,我觉得问题出在marketposition==0上,是不是不能用这个函数?
是不是A函数和Q函数的问题?