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
空闲
相似订单
Automatic buy and sell entries. stoploss (sl) take profit (tp) risk management and adjustable lot size. Adjustable risk percentage per trade. Trailing stop maximum number of open trades. Trading hours filter. Ability to backtest and optimize the strategy. Easy to use settings. The EA should work reliably on mt5 and provide the source code. I want the developer to test the EA and provide backtest results before
I am looking to see if you can convert my pinescript into a NinjaTrader bot so I can get automated trading instead of manually doing it in TradingView i would like to get it to just do the trades for me based on my script. let me know who can do this perfectly
Develop an Expert Advisor for MetaTrader 5 that manages existing positions. Features Automatically detect all open positions. Apply Break-Even after price reaches a configurable profit. Partial Close: Close X% of volume at the first target. Move Stop Loss to Break-Even. ATR Trailing Stop (optional). Magic Number filter. Comment filter. Symbol filter. Trading session filter. Retry mechanism for trade operations
Hello! I am searching an experienced programmer to help me fix bugs in NEOLOGICA, PROFIT, Code is written, 0 errors, 0 warnings, but not everything works functionally. Please help me, in general I am searching a programmer for a longer co-operation so this project can open door for other, interesting projects :)
Forex robot 30+ USD
Hello… need an MT5 expert advisor that scans up to five user-selected symbols for bullish and bearish engulfing patterns on a chosen timeframe, displays a signal dashboard with pattern strength scores, and automatically enters trades with risk-based lot sizing, fixed stop-loss and take-profit tied to the engulfing candle’s high or low
Mt5 ea 30+ USD
I have a fast execution ea that need a little touch, it trade on gold and my problem is about the risk ratio the tp is 3pip and stop loss 20 but i cannot get it right to make the average win larger and average loss lower. I would like to know if i can get help to get it right without touching the tragedy and the trade frequency. Those two pictures I attached is the example of what my bot actually do like i explained
Sane 50+ USD
we make money ,we print money I want to help averyone to start making money so if he purchase it you can start earning up 1000 dollars pair week which is enough to help your family and friends
Requirements Specification Here is an example of Requirements Specification for the development of the MACD Sample Expert Advisor, which is available in the MetaTrader 5 standard package. 1. The idea of the trading system is as follows : market entries are performed when MACD's main and signal lines intersect in the current trend direction . 2. Trend is determined based on the Exponential Moving Average with
REWARD! 35 - 200 USD
I will pay you a REWARD, if you find / create an EA that fits ALL the below criteria! Platform : MT4 ONLY! NOT MT5, I repeat: NOT MT5!! Timeframe : doesn’t matter Pair : doesn’t matter Strategy : doesn’t matter Drawdown : no more than 25% Return : minimum 5%, every month Lot sizing : dynamic lots I will backtest the EA with 99.9% tick data accuracy for a period of 20+ years . If the EA can produce minimum 5% returns
Hello, I am looking for an existing MT5 EA for XAUUSD (Gold). I do not want a custom EA from scratch. I need a high-frequency breakout scalping EA with: Buy Stop & Sell Stop (OCO) Fixed Stop Loss Automatic Break-even Tick-by-tick Trailing Stop One trade at a time If you already have such an EA, please send live results, demo, pricing, and videos

项目信息

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