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 want a bot to make the same trade when market opens everyday on Forex. I want the bot to use the same simple technique for every day for the currency pair EUR/USD. I have a video reference for the simple technique I want the bot to carry out
مرفق — مستشار خبير يعمل وتم اختباره مسبقا يعمل على ميتاتريدر 5 للذهب (XAUUSD) يتداول عبر وسيط Equiti. هذا نظام وظيفي، وليس مفهوما مبكرا. أحتاجها ممتدة، لا استبدال. Ali_XAUUSD_SwingClose_H4D1.mq5 البنية الحالية (يرجى فهم ذلك قبل البدء): يحدد النظام الاتجاه العام على الإطار الزمني H4 من خلال تصنيف قوة إغلاق الشمعة (سواء كان الإغلاق بالقرب من أعلى أو أدنى مستوى جسم الشمعة/النطاق)، ثم يبحث في إطار M15 عن "شمعة مرجعية"
Need v22 bot 100+ USD
*V22 Investor account latest Setting Tester* *Price 600$* *Share with friends and Traders💸* Account no : 474461283 Password : V22@scalper Server : Exness-MT5Trial15 I need exactly the same bot. Please log in and check the bot yourself to see exactly how it works, and then create the same bot for me
MT5 EA Audit, Improvement, and Live Auto-Trading Requirements The EA/source code file is attached . Please carefully read and analyze the complete attached code before making any changes. This EA was developed based on my own trading strategy, rules, and indicators. I personally use these same rules for manual trading, and when I identify the required conditions manually on the MT5 chart, I open trades based on them
MT5 EA/Robot Development and Live-Execution Requirements I have developed and attached an MT5 Expert Advisor (EA/robot). The EA was developed with the help of ChatGPT and other AI platforms. However, although the code may compile and appear to work in backtesting, it does not always behave according to the strategy, rules, indicators, and trade-management logic that were originally designed. I do not want another
I need a professional AI-assisted Forex trading Expert Advisor (EA) for MetaTrader 5. The EA should not be based on a simple single indicator strategy. I want a robust multi-factor trading system that can analyze market conditions, trend, momentum, volatility, price action and risk before entering a trade. Requirements: Forex trading on MT5 Automated analysis and trade execution Dynamic entry and exit decisions Stop
Create a fully automated MetaTrader 5 (MT5) Expert Advisor (EA) in MQL5 based on the following exact trading strategy. STRATEGY NAME: Previous Day High/Low Daily Breakout Strategy INSTRUMENTS: 1. XAUUSD — fixed lot size: 0.01 2. EURUSD — fixed lot size: 0.10 TIMEZONE: All strategy times must be calculated in Indian Standard Time (IST / UTC+5:30). The broker's server time may be different, so the EA must correctly
OVERVIEW: I am looking for an experienced MQL developer to build a proprietary Expert Advisor (EA) specifically optimized to PASS evaluation challenges on modern prop firms (specifically targeting The 5%ers execution rules). The EA must rely on momentum and volume expansions, completely avoiding toxic strategies such as Grid, Martingale, or averaging down. Every trade must protect the account's daily drawdown
Hello here, I need someone who can work on pinescript and also with Renko charts. My entries for my strategy would be based on stop orders Kindly let me know if you can work on this for me and i will send necessary file and quote in the chat
Trade XAUUSD only Support MT5 Use Buy Stop and Sell Stop pending orders around a configurable breakout range. When the market breaks the range, activate the corresponding trade. Automatically place Stop Loss and Take Profit immediately with every order. Automatically cancel the opposite pending order after one side is triggered. No Martingale No Grid No averaging down No loss recovery system No unlimited position

项目信息

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