EA with nested Indicators

MQL5 Indikatoren Experten

Auftrag beendet

Ausführungszeit 19 Stunden
Bewertung des Kunden
I was really happy with the result I got from Nguyen Nga. He is highly recommended 10/10 points to him!
Bewertung des Entwicklers
Nice customer, Thank you.

Spezifikation

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.


Bewerbungen

1
Entwickler 1
Bewertung
(253)
Projekte
358
49%
Schlichtung
24
25% / 50%
Frist nicht eingehalten
80
22%
Frei
2
Entwickler 2
Bewertung
(28)
Projekte
36
17%
Schlichtung
5
20% / 40%
Frist nicht eingehalten
17
47%
Frei
Veröffentlicht: 5 Beispiele
3
Entwickler 3
Bewertung
(1)
Projekte
1
0%
Schlichtung
1
0% / 100%
Frist nicht eingehalten
0
Frei
Ähnliche Aufträge
Trailing Stop Based on Thresholds . Other Necessary Filters already Coded . Live Chart Only . The strategy already coded - needs a fresh new draft . To Start from Signal Trigger
MT5 backtestest helper 30 - 200 USD
Sure 😊 — here’s a simple file-style write-up about your robot that you ordered on MetaTrader 4. You can copy it into Word or save it as a document. Title: My Trading Robot on MetaTrader 4 Introduction I recently ordered a trading robot on MetaTrader 4 to help me trade in the financial markets. A trading robot, also known as an Expert Advisor (EA), is a program that automatically analyzes the market and places trades
I am looking for a partner to invest in a Forex robot. The robot works well in the live market and has a very good profit. A friend who has a large capital, please send a message for cooperation
I am looking for a professional MQL5 developer to build a structured MT5 Expert Advisor. This is NOT a martingale or high-risk grid bot. Platform: • MT5 only (MQL5 source code required) Symbols: • XAUUSD • GBPUSD • GBPJPY Timeframe: • M5 Risk Management: • Adjustable risk per trade (default 0.5% equity) • Daily drawdown protection (max 3%, auto-lock trading for the day) • Maximum 2 open trades • Minimum 120 seconds
hello great developer ’m looking for an experienced NinjaTrader developer to help set up software on my VPS, create custom chart templates with multiple indicators, and build an arbitrage dashboard/trade copier system. The project includes multi-account management and integration with Bookmap. I need a custom dashboard to monitor and control multiple accounts efficiently. Please message me if you have strong
I want to modify my NT8 indicator to change its arrow printing logic so that arrows appear on the first candled dot, not after the series. no repaint and no back painting. all in real time. This will help me get timely signals. Scope of work - Modify NT8 indicator logic to print arrows on the first candled dot. - Ensure arrow print matches 90%+ accuracy compared to the current functionality. - Adjust the indicator to
What informtion would you need for Ninjatrader futures automated trading and how long would it take ? if anyone can give me answer i will be happy to discuss more about the project thanks fill free to bid to the project thanks
Hello, I need a MetaTrader 5 manual trading assistant panel (NOT an auto trading EA). MAIN IDEA This tool should work like the TradingView long/short position tool inside MT5. Trader workflow: 1) Enter Risk % 2) Enter RR ratio 3) Click SET ENTRY 4) Drag Stop Loss line on chart 5) Lot size and Take Profit calculate automatically 6) Press BUY or SELL to execute trade No trailing stop, no breakeven, no automatic trade
MT5 DEV NEEDED 60+ USD
Hello I'm looking to develop an Expert Advisor (EA) based on my existing indicator EA that uses TrendX600 on the 1-minute timeframe. My objective is to create a scalping bot that can successfully capture one box (60-second candle movement) at a time. If the EA can consistently capture one clean 60-second box without spikes, and repeat this process 4 to 5 times within 24 hours, that would meet my trading goal. To work
I have an existing MT4 MACD Convergence\Divergence indicator that I would like converted to a MT5 expert that will execute orders once a trigger is met. The existing indicator draws lines on the chart and provides a MACD indicator window. At a minimum I would like the existing MT4 indicator convert to a MT5 indicator

Projektdetails

Budget
15 - 100 USD
Ausführungsfristen
von 1 bis 5 Tag(e)