我想写一个卖一价不超过我设定的最高价格才成交的策略,但是我发现市场上挂单价格明明符合,却策略却不发生成交,直到市场发生交易后,我的策略才能发生交易,请问是什么原因呢
部分主要代码如下:
If(BarStatus == 2 And Q_AskPrice() <= maxPrice And myCount < maxCount And sendOrderCount == 0 and mylimit == 1)
{
Array<Integer> buyorders;
//账户下单操作
Bool ret1 = A_SendOrderEx(Enum_Buy, Enum_Entry, 1, Q_AskPrice(), buyorders, "", A_GetOrderCreateSource);
Print("Buy,A_SendOrderEx:" + IIFString(ret1, "True", "False") + "," + TextArray(buyorders));
If(ret1)
{
sendOrderCount = 1;
}
//创建5秒的定时器
cancelId1 = createTimer(5000);
}
另外,市场没发生交易时,我的委托好像还发出失败了,print的结果是:Buy,A_SendOrderEX:False,[]
这到底是什么原因呢?还是我代码逻辑上有问题
先单独验证你写的语句能不能发单
A_SendOrderEx(Enum_Buy, Enum_Entry, 1, Q_AskPrice(), buyorders, "", A_GetOrderCreateSource);
再研究你的条件能不能发单
If(BarStatus == 2 And Q_AskPrice() <= maxPrice And myCount < maxCount And sendOrderCount == 0 and mylimit == 1)
可以发单的,就是在一个不活跃市场里,要市场出现真实交易时才能发单成功和交易成功,所以想了解了解是不是存在一个如果没有交易数据流就会导致不能发出委托的交易机制,以及如何解决的办法
有真实交易才会有tick推送
而发送委托不需要任何行情
所以你要考虑两边的权衡问题
关于发出委托不需要行情,我找了个交易极其不活跃的品种试验了以下不要条件就开仓的代码,发现并不如老师你说的那样,还是没有真实交易就不发出委托,请问是不是我的代码有问题呢?
If(BarStatus == 2)
{
Array<Integer> buyorders;
//账户下单操作
Bool ret1 = A_SendOrderEx(Enum_Buy, Enum_Entry, 1, Q_AskPrice(), buyorders, "", A_GetOrderCreateSource);
Print("Buy,A_SendOrderEx:" + IIFString(ret1, "True", "False") + "," + TextArray(buyorders));
//创建5秒的定时器
cancelId1 = createTimer(5000);
}