下面代码中OnSignal中捕获到buy/sell信号后,信号中的comoffset在用A函数发送委托时能够自动适应合约的平仓、平今或者平昨吗?
OnSignal(ArrayRef<Signal> sigs)
{
Integer i = 0;
For i = 0 To GetArraySize(sigs) - 1
{
SignalRef sig = sigs[i];
If(!BitHas(sig.flag, Enum_Signal_NotSend) && QuoteStatus == Enum_QuoteStatus_RealTime)
{
Array<String> symbols;
String sy = MainSymbol;
integer side =sig.side;
Integer offset =sig.combOffset;
Integer thisvolume =sig.volume;
Array<Integer> orders;
Tick val;
ret = GetTick(sy, val);
Numeric minmoveValue=minmove*pricescale;
Numeric orderprice =val.last;
if(side==Enum_Buy)
{
orderprice =val.bidask1.askP+10*minmoveValue;
if (orderprice>val.limitUp)
{orderprice=val.limitUp;}
}Else
{
orderprice =val.bidask1.bidP-10*minmoveValue;
if (orderprice<val.limitdown)
{orderprice=val.limitDown;}
}
ret = A_SendOrderEx(sy,side, offset, thisvolume, orderprice, orders);
}
}
}
默认是平仓自动的。
目前交易所的规则是按交易所设置的优先级,基本上不是你想平今或者平昨就能平的。
交易所会设置具体品种的优先级,如果设置的是优先平昨,你就算标记了平今也是不行的。反过来同理
也就是说对于上海、能源的交易品种,A函数平仓指定Enum_Exit或者Enum_ExitToday都可以。TB系统发单时会根据账户持仓自动优先判断实际委托的平今平昨?
每个品种不一样的
有的品种优先让你平昨,有的优先平今,有的你可以自己选。
最好向期货公司或者交易所问清楚