1、委托价格可以不是最小变动价格的整数倍,函数内部会进行四舍五入。
2、如果设置了后复权,盘口价格Q_AskPrice、Q_BidPrice也会被复权了,不是真实价格,不能直接用这个价格进行委托,万一忘记了除权/ rollover,就会超出涨跌停板,但是不会产生废单,函数内部会自动以涨跌停价进行委托,单子量大的话,很容易把价格打得很远。所以盘口价格Q_AskPrice、Q_BidPrice被复权,个人觉得不合理。
3、Enum_Exit也能把上期所的今单平掉,可能也是函数内部判断了一下然后自行把它换成Enum_ExitToday发出去了。而文华没有这一层的封装,不对委托价格的处理、不对平今的处理,直接就报出去了,产生废单,有利有弊吧。
4、
Bool A_SendOrderEx(String symbol, Integer BuyOrSell, Integer EntryOrExit, Numeric lot, Numeric price, ArrayRef<Integer> orderIds, String userNote = "", String createSource = "", Integer accountIndex = 0)
这个函数有问题:1、返回值一直是False,但是单子已经成功发出去了,也成交了;2、调用完之后orderIds是空的,只能在OnOrder里面才能得到报单ID。
以上问题都是经过模拟盘验证过的。
orderIds为空模拟测试存在,而且orderIds设定为全局变量也没用,我测试onorder里也是空的,你是怎么拿有数据的?
这两天再测试,orderId已经不为空了。
返回值一直是false的问题应该不存在。
模拟测试:
if(A_SendOrderEx(Enum_Buy, Enum_Entry, 1, h,orderIds) == false)每tick一次开仓,到满仓停止。
if(A_SendOrderEx(Enum_Buy, Enum_Entry, 1, h,orderIds) == true),直接秒满。
这问题似乎解决了?
A_SendOrderEx返回值一直是False这个真的很危险,如果像这样失败了一直重新发单的:While(A_SendOrderEx(MapSymbol, Enum_Buy, Enum_Entry, 1, price, orderIds) == False);一下就打满仓了
重复发单问题难以解决,交易状态失控已经把我搞废了。
不知道为啥设计成这样,只能onoder才能生成订单结构体。下单就应该有个下单的结构体。期货公司回报下单成功在onorder在形成订单结构体,成交回报之后再形成成交订单结构体。程序小白很迷惑!
它这个地方难道是要等挂单成功的回报过来才true?