EA with nested Indicators

MQL5 指标 专家

工作已完成

执行时间19 小时
客户反馈
I was really happy with the result I got from Nguyen Nga. He is highly recommended 10/10 points to him!
员工反馈
Nice customer, Thank you.

指定

MetaTrader 5, Version: 5.00 build 1375, 15 Jul 2016

Hello, I have one Expert Advisor (EA) which loads 2 indicators. Indicator 1 is a moving average (IND_MA / top indicator) and Indicator 2 is a custom indicator (IND_CUSTOM / bottom indicator) which reads the information from the moving average indicator on every tick and output the values of IND_MA rounded to the third digit after the floating point, producing what you can see on the following image:

The EA needs the IND_CUSTOM for it's own functionality. So that's a requirement for it. It outputs the following on the Toolbox / Experts window:


My problem is that the EA works OK on the terminal but on the Strategy Tester (ST) the IND_CUSTOM doesn't get any value. as you can see on the following image:

I need the IND_CUSTOM gets the values on the ST, so I can do backtesting.

Below you have the code of the IND_CUSTOM and the EA. Please, try it on the terminal first to see how it works, then try it on the ST.

// File: ProblemIndicator.mq5

#property indicator_separate_window
#property indicator_buffers                             1
#property indicator_plots                               1
#property indicator_type1                               DRAW_LINE
#property indicator_color1                              clrBlue
#property indicator_style1                              STYLE_SOLID
#property indicator_width1                              1

input int handle_base;                                  // Handle of the base indicator
input int handle_base_buffer;                   // Buffer index of the base indicator

double buffer[];
double data_base[];

int OnInit() {

        be_aware_of_indicators_available();     // needed here at the beginning

        if (!is_valid_indicator_handle(handle_base)) {
                printf("The handle of the base indicator: %d, is invalid", handle_base);
                return -1;
        }

        ArraySetAsSeries(buffer, true);
        ArraySetAsSeries(data_base, true);

        IndicatorSetInteger(INDICATOR_DIGITS, _Digits + 1);

        PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, 0);
        SetIndexBuffer(0, buffer, INDICATOR_DATA);

        return 0;
}

int OnCalculate(const int rates_total,          // number of bars in history at the current tick
                                const int prev_calculated,      // number of bars calculated at previous call
                                const int begin, const double &price[]
        ) {
        int count = rates_total - prev_calculated;
        CopyBuffer(handle_base, handle_base_buffer, 0, count, data_base);

        for (int i = count - 1; i >= 0; i--)
                buffer[i] = MathRoundDecimals(data_base[i], 3);

        return rates_total;
}

void get_chart_indicators_handle(int &handles[]) {
        ArrayResize(handles, 0);
        int total = (int) ChartGetInteger(0, CHART_WINDOWS_TOTAL);
        for (int w = 0; w < total; w++) {
                for (int i = 0; i < ChartIndicatorsTotal(0, w); i++) {
                        string name = ChartIndicatorName(0, w, i);
                        ArrayResize(handles, ArraySize(handles) + 1);
                        handles[ArraySize(handles) - 1] = ChartIndicatorGet(0, w, name);
                }
        }
}

void be_aware_of_indicators_available() {
        int handles[];
        get_chart_indicators_handle(handles);
}

bool is_valid_indicator_handle(int handle) {
        ENUM_INDICATOR type;
        MqlParam parameters[];
        int result = IndicatorParameters(handle, type, parameters);
        if (MQL_TESTER && GetLastError() == ERR_FUNCTION_NOT_ALLOWED) // on ST "IndicatorParameters" is not allowed
                return true;
        else
                return (result != -1);
}

double MathRoundDecimals(double num, int decimals) {
        return MathRound(num * MathPow(10, decimals)) / MathPow(10, decimals);
}
// File: ProblemEA.mq5

int handle_1, handle_2;

int OnInit() {

        ChartSetInteger(0, CHART_SCALE, 3);
        ChartSetInteger(0, CHART_MODE, CHART_CANDLES);

        int i = 0;

        MqlParam params_1[4];
        params_1[0].type = TYPE_INT;
        params_1[0].integer_value = 20;
        params_1[1].type = TYPE_INT;
        params_1[1].integer_value = 0;
        params_1[2].type = TYPE_INT;
        params_1[2].integer_value = MODE_SMA;
        params_1[3].type = TYPE_INT;
        params_1[3].integer_value = PRICE_CLOSE;
        handle_1 = IndicatorCreate(_Symbol, PERIOD_CURRENT, IND_MA, ArraySize(params_1), params_1);
        ChartIndicatorAdd(0, i, handle_1);

        MqlParam params_2[3];
        params_2[0].type = TYPE_STRING;
        params_2[0].string_value = "ProblemIndicator";
        params_2[1].type = TYPE_INT;
        params_2[1].integer_value = handle_1;
        params_2[2].type = TYPE_INT;
        params_2[2].integer_value = 0; // buffer index to use
        handle_2 = IndicatorCreate(_Symbol, PERIOD_CURRENT, IND_CUSTOM, ArraySize(params_2), params_2);
        ChartIndicatorAdd(0, ++i, handle_2);

        return (INIT_SUCCEEDED);
}

void OnTick() {
        double last_1 = get_last_indicator_value(handle_1);
        double last_2 = get_last_indicator_value(handle_2);
        printf("values: %f %f", last_1, last_2);
}

double get_last_indicator_value(int handle) { // just first buffer
        double values[1];
        int result = CopyBuffer(handle, 0, TimeCurrent(), 1, values);
        return values[0];
}

Any question, please let me know.

Regards, Cyberglassed.


反馈

1
开发者 1
等级
(253)
项目
358
49%
仲裁
24
25% / 50%
逾期
80
22%
空闲
2
开发者 2
等级
(28)
项目
36
17%
仲裁
5
20% / 40%
逾期
17
47%
空闲
发布者: 5 代码
3
开发者 3
等级
(1)
项目
1
0%
仲裁
1
0% / 100%
逾期
0
空闲
相似订单
I am looking for an MT5 Expert Advisor designed as a high-precision Forex volumizer. The primary purpose is to generate controlled trading volume for rebates, while still maintaining low-risk, stable account growth over time. I am not looking for aggressive profit chasing, martingale, grid systems, or high-risk recovery logic. The EA should: - trade major Forex pairs only - use intelligent and disciplined entry logic
I need a skilled MQL5 developer to build a fully functional Expert Advisor (EA) for MetaTrader 5 based on a simple but strict trading strategy. The EA will use EMA 50/200 trend detection combined with breakout and retest logic for entries. It must operate only during London and New York sessions and include solid risk management (fixed % risk, SL/TP, trade limits, and basic protection rules). APPLY ONLY IF YOU HAVE
Looking for an EA that has been previously tested and can pass prop firm challenges. You will need to demonstrate the EA to showcase true nature. Please only apply if you have a system ready. This can be a previous job you already done for someone or have something in the files
VWAP BB Sniper EA Quantum VWAP Scalper SmartFlow FX Bot Institutional Edge EA 🧠 PRODUCT OVERVIEW VWAP + Bollinger Bands Auto Trading System A high-precision forex scalping bot designed to capture institutional price movements using: VWAP (fair value tracking) Bollinger Bands (volatility & entry timing) 👉 Built for fast, consistent intraday profits
hello check on this so basically this is a repair job of a strategy I hired a guy to do that doesn't quite workas I intended it to but is very close. So should be fairly simple to fix . I have enclosed a video file. Its important to understand that the take profit and stop loss were added by the guy who coded it but arent central to the strategy. The main thing is that the system must reference the prior bar and sell
Hello traders, I have Quantum queen v3.52, which is the latest version, available for $500 only. The price on the platform is around $1800, but I am offering it for a much lower price for serious buyers. Details: Product: Quantum queen Version: v3.52 Price: $500 Condition: Serious buyers only
I need a Telegram-to-MT4 automation bot for a funded account. This is NOT a basic trade copier. It must include: • Automatic lot size based on 0.5% risk per trade • Stop loss required (no trade if missing) • Max 5 open trades • Minimum 60 seconds between trades • No weekend trading • Trade blocking if rules are violated • Logging of blocked trades The goal is risk control, not speed. Can you build this?”
Wise 30 - 1000 USD
Hello, I am looking for access to MT5 trading accounts connected to the market, either demo or live, specifically running a trading robot (Expert Advisor) designed for prop firm trading. Investor (read-only) password access is sufficient, as I only need to log in through MetaTrader 5 to monitor and verify trading performance, including trade history, risk management, drawdown control, and consistency of results over
Early Killer EA 30+ USD
It must have automated stop loss. Something that can end poverty and kill the market early.It must take the trades for me whenever I start it it must work on tradeport ea
I WANT TO CONVERT MY INDICATOR TO ROBOT, BUT I DONT HAVE THE SOURCE CODE , THE PROGRAMMER WILL DEVELOP THE SOURCE CODE FOR THE JOB. THE STRAGY IS SIMPLE , THE ROBOT WILL EXECUTE A TRADE WHEN THE SIGNAL FROM THE INDICATOR APPEARS. BUY SIGNAL IS WHEN THE ARROW APPEAS ON THE LOWER ZONE ( SUPPORT ZONE) SELL SIGNAL WHEN THE ARROW APPEARS ON THE UPPER ZONE ( RESISTANCE ZONE).THE ROBOT WILL HAVE THE FOLLWING FEATURES (1)

项目信息

预算
15 - 100 USD
截止日期
 1  5 天