// 新增:OnSignal事件,处理所有信号并反向
OnSignal(ArrayRef<Signal> sigs)
{
Integer i = 0;
For i = 0 To GetArraySize(sigs) - 1
{
SignalRef sig = sigs[i];
// 确保是实时行情且信号没有被其他条件过滤(如我们主动加的 Enum_Signal_NotSend 标记)
// 注:所有信号都带有 Enum_Signal_NotSend,这里检查该标记以确保我们只处理我们产生的信号
If(BitHas(sig.flag, Enum_Signal_NotSend) && QuoteStatus == Enum_QuoteStatus_RealTime)
{
// 准备反向订单的参数
Array<Integer> orders;
Bool ret = False;
// 根据原信号的 side 和 combOffset 进行反向
// 反向规则:买卖方向互换,开平类型保持不变
If(sig.side == Enum_Buy)
{
// 原买入(开多或平空) -> 变为卖出(开空或平多)
A_SendOrderEx(Enum_Sell, sig.combOffset, sig.volume, sig.price, orders);
}
Else If(sig.side == Enum_Sell)
{
// 原卖出(开空或平多) -> 变为买入(开多或平空)
A_SendOrderEx(Enum_Buy, sig.combOffset, sig.volume, sig.price, orders);
}
Else
{
// 其他未知方向,可忽略或按原方向发单
A_SendOrderEx(sig.side, sig.combOffset, sig.volume, sig.price, orders);
}
Print("反向发单: 原side=" + IIfString(sig.side==Enum_Buy,"Buy","Sell")
+ " 新side=" + IIfString(sig.side==Enum_Buy,"Sell","Buy")
+ " 结果=" + IIfString(ret,"成功","失败"));
}
}
}
在策略中加上这段代码,我使用的是888连续合约,模拟盘中可以发出订单,但总是显示订单废单,原因为“申报失败,cs888.DCE,卖出,开仓,委托量1,委托价2688.00,成交量0,TEST38_MR@TEST38_MR@TEST36@cs888_M30,合约不可交易。”
我已在策略单元设置中映射到主力合约,在不用OnSignal事件域,可以正常交易到主力合约。
我需要在哪里设置,通过OnSignal事件域能自动映射到主力合约进行交易。
第一个参数 合约填 mainsymbol 或 relativesymbol

谢谢。我写入mainsymbol后,开仓可以交易了,但是平仓时还是报废单。
我一直有个疑问,这样映射,如果买入后(平仓前),遇到主力合约换月了,还能被平掉吗?
我写入mainsymbol后,开、平仓都可以交易了。
CHAN
的问题,我也很想知道如何解决?