最近一直在写订单流策略,今天调试的时候,发现使用【A_SellShort】和【A_BuyToCover】的【空头下单操作】后,在【OnOrder事件域】通过打印ord结构体的成员combOffset,发现TBQ会发生自动【开平互转】的问题,将所有【空头操作】转成【反向的多头操作】,但是在【账户透视】的【委托成交明细】却是可以正常显示【空头操作】。同时观察【多头下单操作】使用【A_Buy】和【A_Sell】却不会发生【开平互转】。
虽然我的TBQ默认设置启用了开平互转,但是上面截图模拟盘运行品种是【RM409.CZCE】,不是中金所的品种。
https://www.tbquant.net/forumDetail?cur=tbquan&id=2435&cid=undefined
https://www.bilibili.com/read/cv17662024/?spm_id_from=333.999.0.0
https://kdocs.cn/l/cv25RhZzEz4V
嘿嘿 看我发现了什么
晕倒,原来是这个问题啊!年纪大了,眼睛看花了!
谢谢,王老师,排除这个问题的原因后,看来我的程序,是其他地方有错误。
Vars
//此处添加变量
Global array<Integer> a1;
Defs
//此处添加策略函数
Events
//此处实现事件函数
//初始化事件函数,策略运行期间,首先运行且只有一次
OnInit()
{
data1.SetBasePeriod(1m);
CreateTimer(5000,0,5);
}
OnTimer(Integer Id, Integer millSecs)
{
A_SellShort(Symbol,1,close,a1);
A_BuyToCover(Symbol,1,close,a1);
}
//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组
OnOrder(OrderRef ord)
{
string a = IIFString(ord.side == enum_buy ,买入,卖出);
string s = IIFString(ord.combOffset == Enum_Entry ,开仓,平仓);
print(ord.side:+a);
print(ord.combOffset:+s);
}
王老师,我就特别想知道,今天是周六白天,你是用了什么魔法,可以驱动OnOrder事件域,打印出信息的?免费吗?真的是羡慕啊,你的TBQuant可以同时显示超过4个以上的图层K线,现在连周六、周日7*24小时都能驱动订单流事件域。
图看不到啊
确实开平互转是平台系统规则里的内容,默认是只对中金所处理的,rm这种品种默认不会开平互转的
建议整理一段能复现问题的代码,发上来我复现试试
换了个账号?
图好像挂了
ord.side和ord.combOffset 判断买入和卖出 +开仓标志平仓标志
订单里的结果是实际的结果,不开平互转(或者讲已经是转好的结果了)
A_SellShort 和A_buy也是一套 应该不存在单边的情况
盘中我们再看下