//代理信号事件,该事件会接管当前策略单元的所有信号,用户要在该事件内处理要不要发单。
OnSignal(ArrayRef<Signal> sigs)
{
//只有实时行情的Bar才处理发单
If( BarStatus<>2 )
return;
Integer i;
Integer j;
Bool ret = False;
String Type;
Numeric ordPrice = 0;
//查询指定合约的最新Tick
Tick tickData;
Array<Integer> orderIds;
//遍历所有信号
For i = 0 To GetArraySize(sigs) - 1
{
SignalRef sig = sigs[i];
//历史信号不处理
If( BitHas(sig.flag,Enum_Signal_History) )
continue;
//不是实时行情,不处理
If( BitHas(QuoteStatus,Enum_QuoteStatus_RealTime)==False )
Continue;
ret = GetTick( ActiveSymbol, tickData );
If( sig.side==Enum_Buy )
{
type = \"买\";
ordPrice = tickData.bidask1.askP+1;
}
Else If( sig.side==Enum_Sell )
{
type = \"卖\";
ordPrice = tickData.bidask1.bidP-1;
}
Range[j=0:A_AccountCount()-1]
{
ret = A_SendOrderEx(RelativeSymbol,sig.side,sig.combOffset,sig.volume,ordPrice,orderIds,\"主力发单\",A_GetOrderCreateSource(),j);
Print(\"OnSignal \"+\"账户\"+Text(j)+\" \"+ActiveSymbol+\" \"+type+\" 价格=\"+Text(ordPrice)+\" 手数=\"+Text(sig.volume)+ IIFString(ret, \" 成功\", \" 失败\"));
Print(\"OnSignal \"+\"GetArraySize(orderIds)=\"+Text(GetArraySize(orderIds)));
}
}
}
上面代码A_SendOrderEx执行后总是返回失败,orderIds没有内容,请问可能是什么原因?
对,我的辅助K线图是橙色脸。
橙色脸和绿脸区别在哪儿,和代码有关系吗,或怎么通过系统界面设置?
账户在界面关联了,代码也显示关联成功;
开启自动交易虽然返回False但账户交易成功,请问A_SendOrderEx发单必须依靠自动交易来完成账户交易吗?
我猜测,你是用策略交易的交易单元运行的a函数,然后打开了辅图k线,看到辅图k线上print了false,是吗?
是的。我现在没办法,就不管他返回值了,反正自动交易模式下,交易是正常的,委托后的处理就交给交易助手吧
你看到的false,是辅图k线的公式回报的结果。这个辅图的脸应该不是绿脸。
你看到的成功的报单,是策略单元的执行结果。
两边不是一回事。
辅图并不是展示策略单元,而是以策略单元的参数配置重新新建一个k线图表,等于说克隆一个。所以如果你辅图k线如果也启动自动交易,变成绿脸,就变成双份报单了。
您的意思是说,实际交易成交是交易助手接管理论信号的执行结果,代码里接管信号发出的A函数还是失败的?
你这个概念好像有点混乱嘛
你这里用a函数报单,跟交易助手无关,跟信号也无关,你的问题我都看不懂
a函数执行完,如果符合报单状态并成功执行了报单业务操作,就返回true,这个时候账户的委托列表里必定会生成一个单子
如果返回false,那委托列表里就没有,大概率是因为没启动自动交易或者账户没关联。
右上方的脸是表示当前自动交易状态的一个标志,具体建议去帮助中心查看一下对应的状态说明。
另外,建议跟着官方的0基础教学视频先掌握基础常识,否则无法有效沟通
好的,谢谢您的耐心回答,我再仔细看看教程!
确实之前概念比较混乱,现在明白了,辅助K线因没有自动交易所以返回False,量化看盘里日志是正常的。
sendorder返回false一般是没有关联账户或者没开启自动交易
补充一下测试过程:
在策略交易中,策略单元加载000指数,绑定TB模拟账户,此操作正确;
发单的合约ActiveSymbol是获取到的主力合约代码,订阅了主力Tick数据且获取正确;
策略运行模式我分别测试了自动交易和不自动交易两种情况:启动自动交易情况,账户下单及成交正常,但自己写的发单代码A_SendOrderEx返回False;不选择自动交易仅启动策略,A_SendOrderEx也返回False,且账户没有发生任何交易。