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 have a specific channel need to copy and modify signal from that channel. It will buy and sell from signal and modify based on signal. I’ll add few more functions in the ea
[Automatic Level Detection Group] - Enable Auto Detection: Yes/No - Number of Levels Required: (Number) 3-5 - Lookback Bars: (Number) 100-200 - Minimum Touches for Strong Level: (Number) 2 - Use Zig Zag Algorithm: Yes/No - Use Level Clustering: Yes/No - Max Cluster Distance (points): (Number) [Display and Drawing Group] - Resistance Line Color: (Color) - Support Line Color: (Color) - Show Info Labels: Yes/No - Lines
Hello, I am searching a good programmed to convert EA from mql5 into pinescript and DX TRADE made automatisation. Source of code required. Budget is negotiable. Thanks for attention and have a nice day
Profitable EA for sell 200 - 1000 USD
I am having 2 very proven and profitable EA which will give you profit and at the end of week you are always in profit. 1 This bot is safe bot and it generates handsome amount of profit with very less drawdown and high accuracy of 75-85%. 2. This bot is very aggressive and will suggest to go with only when you are having big capital and wanted to take more risk. It can make your account multiple fold
Looking for a Marketing Partner for my EAs! I am a developer looking for an experienced partner to help promote and market my Expert Advisors (MT4/MT5). How it works: > * I handle the coding, updates, and technical support. You handle the marketing, outreach, and bringing in traders. Compensation: We work on a Revenue Share / Profit Split basis. If you have an audience of traders or know how to market forex tools
Money wizard 30 - 200 USD
I Malwande Linda require a trading bot that would for me because I don't usually get ft time to seat and analyze the chat. I want a robot that would analyze the market and take trades for me. I want a robot that will make money weekly because I'm a student so Fridays are not busy days for me I want a robot that I can trust. I also would appreciate some indicators on my live account so that even when I'm not using a
EA based on CSV 50+ USD
Hello Developers, I need some consultation to help narrow down an idea and develop an EA. I have a csv file that stores data like this: Date portfolio portfolio_value 18/11/2025 ['EURNZD', 'EURCAD', 'EURJPY', 'EURCHF', 'AUDNZD', 'AUDCAD', 'AUDJPY', 'AUDCHF', 'USDNZD', 'USDCAD', 'USDJPY', 'USDCHF', 'GBPNZD', 'GBPCAD', 'GBPJPY', 'GBPCHF'] 1.7970698812202368 19/11/2025 ['CHFAUD', 'CHFNZD', 'CHFGBP', 'CHFJPY', 'EURAUD'
* For Buy - Time = greater than _______ and Less than ______ Remove SL , Time = greater than _______ Replace SL At _______ and also Spread= Less than ( points) ________ ( Same condition for sell side also ) at opposite direction . * For Buy - Time = greater than ______ and price is Below _______ and spread is lower than ( points) _____ cut loss . ( Same condition for sell side also) At opposite direction
Trading can take us to the top but trading robots would take us to the sky with trades, money and more. Trading is about learning how to make money and become successful without pressure. I need an excellent trading robot with excellent skills and knowledge
The strategy is already fully defined with exact logic, scoring system, entry rules, risk management, and execution protection (spread, slippage, deviation). The strategy is already fully defined with exact logic, scoring system, entry rules, risk management, and execution protection (spread, slippage, deviation). Please follow the specification strictly without any discretionary interpretation

项目信息

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