老师:
您好,我在OnBar运行两腿套利的程序发送信号到OnSignal,在OnSignal中用A函数发单开平仓,模拟交易已经有成交持仓了,但A_SendOrderEx()的返回值为False 。下面是OnSignal中的程序:
Onsignal(ArrayRef<Signal> sigs)
{
signal mysig0;
signal mysig1;
SignalRef sig = sigs[i];
Integer i = 0;
For i = 0 To GetArraySize(sigs) - 1
{
If(sig.index==0)
{
mysig0=sig;
If(!BitHas(sig.flag,Enum_Signal_NotSend)&&QuoteStatus==Enum_QuoteStatus_RealTime )
{
If(mysig0.side==1 and condition==0 )
{
Bool ret0=data0.A_SendOrderEx(Enum_Buy,mysig0.combOffset,mysig0.volume, mytick.bidask1.bidP,myorderId);
condition==1;
Print("data0.A_SendOrderEx:" + IIFString(ret0,"True","False");
}
If(mysig0.side==2 and condition==0)
{
Bool ret0=data0.A_SendOrderEx(Enum_Sell,mysig0.combOffset,mysig0.volume, mytick.bidask1.askP,myorderId);
condition==1;
Print("data0.A_SendOrderEx:" + IIFString(ret0,"True","False"));
}
}
}
If(sig.index==1)
{
mysig1=sig;
If(!BitHas(sig.flag,Enum_Signal_NotSend)&&QuoteStatus==Enum_QuoteStatus_RealTime)
{
If(mysig1.side==1 and condition==0 )
{
Bool ret1=data1.A_SendOrderEx(Enum_Buy, mysig1.combOffset, mysig1.volume, mytick.bidask1.bidP,myorderId);
condition==1;
Print("data1.A_SendOrderEx:" + IIFString(ret1,"True","False"));
}
If(mysig1.side==2 and condition==0)
{
bool ret1=data1.A_SendOrderEx(Enum_Sell, mysig1.combOffset, mysig1.volume, mytick.bidask1.askP,myorderId);
condition==1;
Print("data1.A_SendOrderEx:" + IIFString(ret1,"True","False"))
}
}
}
}
}
@WangKaiMing
王老师,请帮我解决一下上面的A_SendOrderEx()返回值为False的问题。我开启了自动交易,BarStatus==2,而且发单都已成交了,但返回值就是为False,在OnOrder中也查不到OrderId
A_SendOrderEx()是在最新Bar上发送的(BarStatus==2)
@Kyover
老师,请你看一下上面两个截图,我的策略单元是打开了自动交易的(绿色笑脸显示),但IsTradeEnabled()返回值仍为False.
老师,请帮帮我,我卡在这里进展不了,A_SendOrderEx()返回值也为False
@Kyover
老师,现在我发个截图给你,请你帮我诊断一下,我实在是找不到原因。谢谢老师!
@Kyover
好的,谢谢老师指导!
今天观察到的Sig.Flag==0, A_SendOrderEx()的返回值仍为False, 开启了自动交易的,而且成交了的。不明白是为什么
建议你多写几句print 把发单时的bar序号,bar日期时间,机器日期时间等等都输出了,找到信号是历史bar还是实时bar发的单
老师,我开启自动交易了