MQL4中使用OrderOpenTime获取多空订单对应入场K线时间的咨询
解决方法
你只需要在原有订单遍历逻辑中增加订单类型判断,即可分别计算多单、空单各自对应的入场K线日期时间:
- 调用
OrderType()函数判断当前选中订单的方向,返回OP_BUY为多单,返回OP_SELL为空单 - 分别为两类订单创建独立的存储变量/数组,存放对应计算出的K线偏移、时间参数
修正后代码示例
// 可根据需求选择用普通变量或动态数组存储结果,此处用动态数组适配多笔同方向订单场景 int buy_shift[]; // 存储多单对应K线索引 datetime buy_bar_time[]; // 存储多单对应K线时间 int sell_shift[]; // 存储空单对应K线索引 datetime sell_bar_time[]; // 存储空单对应K线时间 // 初始化数组 ArrayResize(buy_shift, 0); ArrayResize(buy_bar_time, 0); ArrayResize(sell_shift, 0); ArrayResize(sell_bar_time, 0); for(int i = OrdersTotal() - 1; i >= 0; i--){ if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break; if(OrderMagicNumber() != MagicNumber) continue; if(OrderSymbol() != Symbol()) continue; // 计算该订单对应K线偏移,已修正你原有代码的变量拼写错误oder_shift→order_shift int order_shift = iBarShift(Symbol(), Period(), OrderOpenTime(), false); datetime bar_time = iTime(Symbol(), Period(), order_shift); // 按订单方向分别存储计算结果 if(OrderType() == OP_BUY){ ArrayResize(buy_shift, ArraySize(buy_shift)+1); ArrayResize(buy_bar_time, ArraySize(buy_bar_time)+1); buy_shift[ArraySize(buy_shift)-1] = order_shift; buy_bar_time[ArraySize(buy_bar_time)-1] = bar_time; } else if(OrderType() == OP_SELL){ ArrayResize(sell_shift, ArraySize(sell_shift)+1); ArrayResize(sell_bar_time, ArraySize(sell_bar_time)+1); sell_shift[ArraySize(sell_shift)-1] = order_shift; sell_bar_time[ArraySize(sell_bar_time)-1] = bar_time; } }
补充说明
- 如果仅需要取最新1笔多单和1笔空单的对应K线时间,无需使用数组,直接用普通变量分别赋值即可
iBarShift返回的偏移值可以直接传入iTime、iOpen、iHigh等系列函数,获取该订单入场对应K线的所有行情数据
内容的提问来源于stack exchange,提问作者kouzi2000
相关产品推荐
相关产品推荐

