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
空闲
相似订单
KOKIE FX 30 - 200 USD
PROGRAM: PSMI Market Intelligence Engine v1.0 OBJECTIVE: Analyse the market from higher timeframes to lower timeframes, build a market narrative, and only allow execution when every condition is confirmed. ========================================================= STEP 1 LOAD DATA ========================================================= Read: Monthly (future) Daily H4 H1 M15 M5
Hello, I am looking for someone to Run and Monitor the EA and Signals in the account. Should be able to monitor daily and fix any issue in the signal Copying and EA running. The Settings and configuration to be checked and updated periodically. Should be available to report and update on daily basis. Tell me the cost and your previous experience for the same. Thanks
Looking for an Experienced MQL4/MQL5 Developer to Build a Professional Scalping Expert Advisor (EA) I am looking for an experienced MQL4/MQL5 developer to build a professional Expert Advisor (EA) for MetaTrader 4 or MetaTrader 5 from scratch. My goal is to develop a high-quality scalping system with strong risk management and long-term profitability potential. I am not looking for unrealistic promises or "100%
void OnTick() { // Check if we already have an open trade if(OrdersTotal() == 0) { // Get the value of a 14-period Moving Average double ma = iMA(Symbol(), 0, 14, 0, MODE_SMA, PRICE_CLOSE, 0); // Basic Condition: If current close price moves above the MA, buy if(Close[0] > ma) { int ticket = OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, 0, 0, "My First Bot", 0, 0, clrGreen); } } }
i brought an EA called profit hunter killer and the file is not working any more its a scalper type EA can anyone here decomplie the file as i cam not abe to reach the seller i brought it on Shopee malaysian website
Recently I have backtested more than 100 EAs and I have come to a conclusion that in the long-term all of them produce catastrophic results. I used 99.9% data quality and whenever possible decades of data. In the short-term almost all of them can have nice gains. But there is hardly any EA that could survive even just 3-5 years, let alone decades ! This got me thinking: if almost all EAs are unfit for long-term
I need to connect my online store to the NinjaTrader API for automated order fulfillment and license creation/revocation. If you have experience integrating with the NinjaTrader Ecosystem API or implementing vendor licensing, please contact me with your relevant experience and approach
I am looking for an experienced MQL5 developer to convert a TradingView indicator into an MT5 indicator. The objective is to recreate the TradingView indicator in MQL5 so that it produces the same calculations, plots, values, and signals as closely as possible. Requirements: Convert the TradingView Pine Script into an MT5 indicator (.mq5). Ensure the MT5 version matches the TradingView version as accurately as
EA WILL BE FOR GBPUSD ON M5 TIMEFRAME. IT IS A REJECTION/REVERSAL STRATEGY. IT FOCUSES ON BREAK OF LEVEL (M5 CANDLE CLOSE ABOVE HIGH, BELOW LOW (ASIA HIGH/LOW, YESTERDAYS HIGH/LOW, LAST WEEK HIGH/LOW, AND THEN ALSO SWING LEVELS BREAK AND REVERSALS BOTH INSIDE AND OUTSIDE PRICE ACTION) IN THIS STRATEGY WICKS ARE IGNORED, ONLY A SOLID CANDLE BREAK AND CLOSE AND REVERSAL CONSTITUTES AS A VALID TRADE. * EA TIME START +
1) The EA must identity CRT High and CRT Low ,,,,, it must wait for liquidity sweep before entering a trade ,,,to confirm the trade only after sweep and market structure confirmation and support buy and sell trades ,,,,risk. Should be adjustable (default 1% per trade) ,,stop loss should be placed beyond the liquidity sweep ,,take profit should be adjustable with risk reward from 1:2 to 1:5 ,,should allow trading only

项目信息

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