各位朋友,我有一个程序,TBquant老报信号闪烁,该怎么办,用了跨周期,data0,data1,data2
分别为5分,30分,120分,TBquant老报信号闪烁,该怎么办,帮我看看,改改,谢谢
//------------------------------------------------------------------------
// 简称: MACDjyxt
// data0 data1 data2 分别为5分,30分,2小时周期
// 本系统用于5分图表,,用于日内交易
//------------------------------------------------------------------------
Params
Numeric FastMA(3,3,100,10); //macd短周期值
Numeric SlowMA(5,5,100,10); //macd长周期值
Numeric AvgMA(3,3,100,10); //MACD慢线周期值
Numeric DST(3,3,40,3);
Numeric DZQDST(3,3,8,3);
Numeric ProtectStopLossATRMultiplier(4,2,7,3); // 保护性止损的ATR乘数
Numeric ATRLen(10); //atr周期值
Numeric lots(1);
Numeric pckssj(14.50);//平仓开始时间
Vars
Series<Numeric> MACDLine(0);
Series<Numeric> SignalLine(0);
Series<Numeric> MACDDiff(0);
Series<Numeric> DZQClose(0);
Series<Numeric> CDZQClose(0);
Series<Numeric> DZQBJValue(0);
Series<Numeric> CDZQBJValue(0);
Series<Numeric> AATR(0);
Series<Numeric> ProtectStopLossATR_Long; // 多头基于ATR的保护性止损
Series<Numeric> ProtectStopLossATR_Short; // 空头基于ATR的保护性止损
Global Numeric zdkcj; // 做多开仓价
Global Numeric zkkcj; // 做空开仓价
Global Numeric dtzgd; //最高点
Global Numeric ktzdd; //最低点
Global Numeric kdc; // 1为开了多仓,0为没开多仓
Global Numeric kkc; //1为开了空仓,0为没开空仓
Numeric Con0;
Bool Con1;
Bool Con2;
Bool Con3;
Bool pdctj; // 1为平多仓条件
Bool pkctj; // 1为平空仓条件
Events
OnBar(ArrayRef<Integer> indexs)
{
If(CurrentBar() == 0)
{
kdc = 0;
kkc = 0;
zdkcj = 0;
zkkcj= 0;
dtzgd= 0;
ktzdd= 0;
}
MACDLine = XAverage( data0.Close, FastMA ) - XAverage( data0.Close, SlowMA ) ; //计算macd快线
SignalLine = XAverage( MACDLine, AvgMA ); //计算macd慢线
MACDDiff = MACDLine - SignalLine; //计算macd柱
AATR = AvgTrueRange(ATRLen);
DZQClose =data1.Close; //调用30分Close,
CDZQClose =data2.Close; //调用2小时Close,
DZQBJValue= DZQClose - DZQClose[DZQDST];
CDZQBJValue= CDZQClose - CDZQClose[DZQDST];
Con0 = IIF(Time*100>=pckssj and Time<0.1500 ,1 ,0);
Con1 = CrossOver(MACDLine[1] ,SignalLine[1]); //快线上穿慢线
Con2 = CrossUnder(MACDLine[1],SignalLine[1]); //快线下穿慢线
Con3 = FastMA < SlowMA ; //短周期参数小于长周期参数
pdctj = Con2 OR DZQBJValue[1] < 0 OR CDZQBJValue[1] < 0;
pkctj = Con1 OR DZQBJValue[1] > 0 OR CDZQBJValue[1] > 0;
//记录多头高点
If(kdc == 1 && BarsSinceentry == 0) //当前有持仓,并且当前BAR线是开仓时的BAR线;
{
dtzgd = High;
zdkcj =Open;
}
else if(kdc == 1 && BarsSinceentry >= 1) //当前有持仓,并且当前的BAR线要大于进场时的BAR线;
{
dtzgd = MAX(dtzgd, High); //保存最高价;
}
//记录空头低点
If(kkc == 1 && BarsSinceentry == 0) //当前有持仓,并且当前BAR线是开仓时的BAR线;
{
ktzdd =Low;
zkkcj =Open;
}
else if(kkc == 1 && BarsSinceentry >= 1) //当前有持仓,并且当前的BAR线要大于进场时的BAR线;
{
ktzdd = MIN(ktzdd, Low); //保存最低价;
}
If(kdc == 0 ) //当前没有多仓,清零
{
dtzgd =0;
zdkcj =0;
}
If( kkc == 0 ) //当前没有空仓,清零
{
ktzdd = 0;
zkkcj =0;
}
//------------------------------------------------------------------------
// 多头系统
//------------------------------------------------------------------------
// 系统入场
If(kdc == 0 And kkc == 0 And Vol > 0 And Con0<> 1 And DZQBJValue[1] > 0 And CDZQBJValue[1] > 0 )
{
If( Con1 And Con3 )
{
Buy(lots,open,Enum_Signal_NotSend);
kdc =1;
}
}
// 系统出场
If(kdc ==1 And Vol > 0)
{
// 多头基于ATR的保护性止损
ProtectStopLossATR_Long = dtzgd - ProtectStopLossATRMultiplier * AATR;
// 多头基于ATR的保护性止损
If((Low[1] <= ProtectStopLossATR_Long[1] and ProtectStopLossATR_Short[1] > zdkcj ) OR pdctj)
{
Sell(lots,open,Enum_Signal_NotSend);
kdc =0 ;
}
}
//------------------------------------------------------------------------
// 空头系统
//------------------------------------------------------------------------
// 系统入场
If(kdc == 0 And kkc == 0 And Vol > 0 And Con0<> 1 And DZQBJValue[1] < 0 And CDZQBJValue[1] < 0 )
{
If( Con2 And Con3 )
{
SellShort(lots,open,Enum_Signal_NotSend);
kkc =1;
}
}
// 系统出场
If( kkc ==1 And Vol > 0)
{
// 空头基于ATR的保护性止损
ProtectStopLossATR_Short = ktzdd + ProtectStopLossATRMultiplier * AATR;
// 空头基于ATR的保护性止损
If((High[1] >= ProtectStopLossATR_Short[1] and ProtectStopLossATR_Short[1] < zkkcj ) OR pkctj)
{
BuyToCover(lots,open,Enum_Signal_NotSend);
kkc =0;
}
}
//收盘平仓
if(Time*100>=pckssj and Time<0.1500)
{
if(kkc ==1)
{
BuyToCover(1,Open,Enum_Signal_NotSend);
}
if(kdc ==1)
{
Sell(1,Open,Enum_Signal_NotSend);
}
}
}