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
空闲
相似订单
Description: I need a semi-automatic Expert Advisor (EA) developed for MetaTrader 5 (Hedging account, optimized for Exness Cent accounts) to manage my manual trades on Gold (XAUUSD) using a positive pyramiding trend-following strategy. Detailed Specifications: 1. Multi-Basket Management (Crucial): The EA does NOT open the initial trade. It waits for me to open a manual trade (Buy or Sell). If I open another manual
Live chart [ expert is not executing trades on xauusd ] , Deleting Existing Parameter not in use , Live Chart Adjustments Only , No Need to Change anything else , expert will be live testing Throughout
El 3aksiyat 0 35+ USD
//@version=6 indicator("منظومة El_3aksiiya 0 المتكاملة", overlay=true, max_labels_count=500, max_boxes_count=500, max_lines_count=500) // الألوان color_accum = color.new(#0000FF, 85) color_manip = color.new(#FFFF00, 80) color_dist = color.new(#FFC0CB, 80) color_elliot = #FF8C00 color_fib = #FFFF00 color_entry = #00FFFF color_tp = #00FF00 rsiVal = ta.rsi(close, 14) // نموذج AMD var int barCount = 0 if
Prepare expert for xauusd live chart [ expert is not executing trades on xauusd ] . Deletion and cleaning code . Trailing Stop Rule to follow the given method . Live Chart Only
SNIPER X AI 30 - 120 USD
I need help in building a Robot SNIPER X AI — FINAL BUILD Trading System Type AI Scalping + Sniper Entry Expert Advisor Platforms MetaTrader 4 MetaTrader 5 Supported Brokers � exness.com � justmarkets.com � deriv.com Universal MT4/MT5 broker support FINAL CORE FEATURES ✅ AI Scalping Engine ✅ Sniper Entries ✅ Auto Buy/Sell ✅ EMA Trend Detection ✅ RSI Momentum Filter ✅ Smart Stop Loss ✅ Dynamic Take Profit ✅ Trailing
Hello, I am looking for a serious and experienced MQL5 developer who also has practical trading experience , not only programming skills. The goal is to develop a professional-grade Expert Advisor / semi-automated trading system suitable for prop firm trading , with a strong focus on: ✅ Quality ✅ Robustness ✅ Risk control ✅ Realistic execution ✅ Professional backtesting ✅ Prop firm-friendly logic This is not a simple
//+------------------------------------------------------------------+ //| $10 Smart Scalping Bot for MT5 | //| EURGBP + AUDUSD + XAGUSD Optimized | //+------------------------------------------------------------------+ #property strict #include <Trade/Trade.mqh> CTrade trade; //========================= INPUTS ================================== input double LotSize = 0.01; input int FastEMA = 20; input int SlowEMA =
1. Project Overview & Strategic Objective We are seeking an elite, senior-level MQL developer to design and engineer a bulletproof, proprietary MT4 non-standard bar generation application. The primary objective of this project is to build an independent, institutional-grade charting infrastructure to permanently eliminate third-party plugin dependency risks (highlighted by legacy solutions like AZ-INVEST going
Hello, I am looking to develop a commercial-grade Expert Advisor for MT5 specifically optimized for XAUUSD (Gold). The underlying logic should be an intelligent, trend-filtered cost-averaging grid system focused on capital preservation. The EA must include the following functional architecture: 1. Core Strategy Structure: - Must feature a multi-strategy logic entry module. I want to use a combination of 3-4 standard
MT5 Indicator – QML (Quasimodo Left) Pattern I need an experienced MQL5 developer to build a custom MT5 indicator based on the QML Quasimodo pattern as used in SMC/ICT trading. I will attach reference screenshots showing exactly how the pattern should look. The indicator must detect and draw: 1. QML pattern structure — HH, HH, HL, LL swing labels with the QML level drawn as a horizontal dotted line at the last Higher

项目信息

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