在策略交易中输入以下代码以后,就显示,没法开启自动交易。用的数据源是 玉米888 180分钟后复权,有效交易时间。请老师们帮忙诊断一下,谢谢
Params
Numeric Length(5); //周期
Numeric Length2(20);
Numeric Constt(0.8); // 通道倍数
Numeric qushi(10);
Vars
plot pen1;
plot pen2;
Series<Numeric> UpLine; //上轨
Series<Numeric> DownLine; //下轨
Series<Numeric> MidLine; //中间线
Series<Numeric> AvgRange;
Numeric thigh;
Numeric tlow;
Series<Numeric> TRange;
Series<Numeric> angle;
Series<Numeric> AvgValue1;
Series<Numeric> AvgValue2;
Series<Numeric> xielv;
Series<Numeric> avgxielv;
Series<Numeric> fcstup;
Series<Numeric> fcstdown;
Series<Numeric> fcstmid;
Numeric money;//开仓资金
Numeric myprice;//委托价格
Numeric lmrate;//多头保证金率
Numeric smrate;//空头保证金率
Numeric lots;//委托数量
Numeric lotsl;//委托数量
Numeric lotss;//委托数量
Global Numeric risk;//账户当前风险程度
Series<Numeric> lposition(0);
Series<Numeric> sposition(0);
Series<Numeric> mylentry;
Series<Numeric> mysentry;
Series<Numeric> trendy(0);
Series<String> entr;
Events
OnInit()
{
AddDataFlag(Enum_Data_RolloverBackWard());
AddDataFlag(Enum_Data_RolloverRealPrice());
AddDataFlag(Enum_Data_AutoSwapPosition());
AddDataFlag(Enum_Data_IgnoreSwapSignalCalc());
SetBeginBarMaxCount(10); //设置最大起始bar数为10
pen1.figure(0);
pen2.figure(0);
}
OnReady()
{
SetBackBarMaxCount(1+Max(Length,Length2));
}
OnBarOpen(ArrayRef<Integer> indexs)
{
Numeric slope;
Numeric angle;
Numeric intercept;
Numeric val;
Bool ret = LinearReg(MidLine[1], Length, 0, slope, angle, intercept, val);//求线性回归
xielv = slope;
avgxielv = AverageFC(xielv,Length);
fcstmid = val;
}
OnBar(ArrayRef<Integer> indexs)
{
risk = A_totalMargin(0) / A_CurrentEquity(0);//定义risk为保证金占动态权益比例
Numeric a;
Numeric result = 1;
for a = 0 to DataSourceSize-1
{
result = result*data[a].BarExistStatus;
}
If (result <> 1) Return;//检查跨周期数据源是否闪烁
MarginRate mRate;//获取账户对应合约的保证金率
A_GetMarginRate(Symbol, mRate);
lmrate = mRate.longMarginRatio;
smrate = mRate.shortMarginRatio;
Position pos;//获取指定合约当前仓位
A_GetPosition(pos, );
lposition = pos.longCurrentVolume;
sposition = pos.shortCurrentVolume;
Numeric slope;
Numeric angle;
Numeric intercept;
Numeric val;
Bool ret = LinearReg(MidLine[1], 2, 0, slope, angle, intercept, val);//求线性回归
pen2.setOption(中线斜率,color,blue);
pen2.setOption(斜率均值,color,red);
pen2.setOption(趋势下限,color,white);
pen2.setOption(趋势上限,color,white);
pen2.setOption(0,color,white);
pen2.line(中线斜率,xielv);
pen2.line(斜率均值, avgxielv);
pen2.line(0, 0);
pen2.line(趋势下限,- qushi);
pen2.line(趋势上限, qushi);
Range[0:0]
{
MidLine = AverageFC((high+low)/2,Length);
AvgRange = Average(TrueRange,Length); // 计算真实波动均值(atr)
UpLine = MidLine + AvgRange*Constt; // 计算通道上轨=均线+1.2倍的10周期真实波动值
DownLine = MidLine - AvgRange*Constt;// 计算通道下轨=均线-1.2倍的10周期真实波动值
Numeric slope;
Numeric angle;
Numeric intercept;
Numeric val;
Bool ret = LinearReg(upLine[1], Length, 0, slope, angle, intercept, val);//求线性回归
fcstup = val;
LinearReg(downLine[1], Length, 0, slope, angle, intercept, val);
fcstdown = val;
PlotNumeric(UpLine,fcstup);
PlotNumeric(DownLine,fcstdown);
PlotNumeric(midLine,fcstmid);
if(CurrentBar >= Max(Length,Length2))
{
Commentary(始动态权益: + Text(A_CurrentEquity));
Commentary(始保证金占用: + Text(A_totalMargin));
Commentary(斜率: + Text(avgxielv));
Commentary(始风险度:+Text(risk));
If(CurrentTime < 0.09 ) Return;
If(CurrentTime < 0.1030 && CurrentTime > 0.1015) Return;
If(CurrentTime < 0.1330 && CurrentTime > 0.1130) Return;
If(CurrentTime < 0.21 && CurrentTime > 0.15) Return;
money = A_CurrentEquity * 0.3;//默认为30%
myprice = Open;//这里使用open,更为精确的是使用委托价格
lotsl = IntPart(money/(myprice*contractunit*BigPointValue* lmrate)); //计算多头开仓手数
mylentry = lotsl;
lotss = IntPart(money/(myprice*contractunit*BigPointValue* smRate)); //计算空头开仓手数
mysentry = lotss;
If(risk <= 0.4 && lPosition == 0 && abs(avgxielv) <= qushi && Q_AskPrice <= fcstmid && trendy >= 0 && BarStatus == 2)//震荡多头开仓1
{
Buy(0,Max(low,fcstmid));//震荡低线做多
Array<Integer> orderids;
A_SendOrderEx(enum_Buy, Enum_Entry, mylentry,Q_AskPrice/rollover(), orderids,,);//低线做多
entr = dl;
}
}
}
}
//------------------------------------------------------------------------
// 编译版本 2024/06/20 220532
// 版权所有 xingn1991
// 更改声明 TradeBlazer Software保留对TradeBlazer平台
// 每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
我的也出现策略执行到95%,就一直停止在这儿了
这是原来正常运行过的代码,不知道出什么故障了
找到原因了,
MarginRate mRate;//获取账户对应合约的保证金率
A_GetMarginRate(Symbol, mRate);
应该改成
MarginRate mRate;//获取账户对应合约的保证金率
A_GetMarginRate(relativeSymbol, mRate);
怎么联系你,我的微信是 q56223481