You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 06:36:01