以下是一个示例的MQL4代码,可以将所有历史交易记录附加到K线图上:

//+------------------------------------------------------------------+
//|                                            Add Trade History.mq4 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

// 定义全局变量
datetime g_last_trade_time = 0;
int g_last_trade_digits = 0;

//+------------------------------------------------------------------+
//| 自定义指标初始化函数                                             |
//+------------------------------------------------------------------+
int OnInit()
{
    // 设置图表属性
    ChartSetInteger(0, CHART_EVENT_OBJECT_CREATE, true);
    ChartSetInteger(0, CHART_EVENT_MOUSE_MOVE, true);

    return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| 自定义指标计算函数                                               |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
    // 遍历所有历史订单
    for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
    {
        if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
            continue;

        // 获取订单信息
        datetime trade_time = OrderCloseTime();
        double trade_price = OrderClosePrice();
        int trade_digits = MarketInfo(OrderSymbol(), MODE_DIGITS);

        // 检查订单是否已经处理过
        if (trade_time <= g_last_trade_time)
            continue;

        // 计算订单价格位移
        double trade_shift = (trade_price - close[rates_total - 1]) / _Point;

        // 在图表上标记订单
        int draw_result = ObjectCreate(0, "Trade" + IntegerToString(i), OBJ_ARROW, 0, trade_time, trade_price);
        ObjectSetInteger(0, "Trade" + IntegerToString(i), OBJPROP_ARROWCODE, SYMBOL_THUMB_UP);
        ObjectSetInteger(0, "Trade" + IntegerToString(i), OBJPROP_COLOR, clrGreen);
        ObjectSetInteger(0, "Trade" + IntegerToString(i), OBJPROP_WIDTH, 1);
        ObjectSetInteger(0, "Trade" + IntegerToString(i), OBJPROP_SELECTABLE, false);
        ObjectSetInteger(0, "Trade" + IntegerToString(i), OBJPROP_HIDDEN, false);

        // 在订单上标注价格位移
        int text_result = ObjectCreate(0, "TradeText" + IntegerToString(i), OBJ_TEXT, 0, trade_time, trade_price);
        ObjectSetText(0, "TradeText" + IntegerToString(i), trade_shift, 10, "Arial", clrBlack);
        ObjectSetInteger(0, "TradeText" + IntegerToString(i), OBJPROP_COLOR, clrBlack);
        ObjectSetInteger(0, "TradeText" + IntegerToString(i), OBJPROP_BACK, false);
        ObjectSetInteger(0, "TradeText" + IntegerToString(i), OBJPROP_SELECTABLE, false);
        ObjectSetInteger(0, "TradeText" + IntegerToString(i), OBJPROP_HIDDEN, false);

        // 更新全局变量
        g_last_trade_time = trade_time;
        g_last_trade_digits = trade_digits;
    }

    return(rates_total);
}

这段代码将在历史交易记录的关闭时间和价格处绘制箭头,并在箭头上标注价格位移。请将此代码保存为.mq4文件,然后将其添加到MetaTrader 4的“专家顾问”文件夹中。然后,您可以将这个EA应用到任意的K线图上,它将显示所有历史交易记录的箭头和价格位移。

请注意,此代码将只绘制历史订单,不包括当前持仓或待处理订单。如果需要将当前订单也绘制在图表上,您可以在OnCalculate函数中添加适当的代码来处理它们

mql4我想将所有的历史交易记录附加到K线图上复盘请帮我写一个EA

原文地址: https://www.cveoy.top/t/topic/iyD7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录