Анализ результатов тестов и оптимизации в тестере стратегий MetaTrader 5 - страница 8

 
может ли кто-нибудь помочь мне построить стратегию?

как я сделал все, но все еще не в состоянии исправить ошибку ,
Ошибка: 'advanctradingapproch.mq5'
advanctradingapproch.mq5 (линия) 1 (столбец) 1
для индикатора не определен индикаторный график 0 0
';' - ожидается открытая скобка advanctradingapproch.mq5 119 61
';' - открытая скобка ожидается advanctradingapproch.mq5 125 63

вот код:

//+------------------------------------------------------------------+
//|                                        advancetradingapproch.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window

input int BuyArrow = 233;
input int SellArrow = 234;

#define  CHART_ARROW_FIRST  0
#define  CHART_ARROW_LAST   1
#define  MODE_MAIN 0
#define  MODE_SIGNAL 1

int BuySignalBar = 0;
int SellSignalBar = 0;
double lastDayClose;
double adxValue, rsiValue, macdMain, macdSignal, stochasticMain, stochasticSignal;
datetime Time[];

double emaBuffer[];
double adxBuffer[];
double rsiBuffer[];
double macdBuffer[];
double stochasticBuffer[];

int OnInit()
{
    emaBuffer[0] = iMA(_Symbol, PERIOD_D1, 8, 0, MODE_EMA, PRICE_CLOSE);
    emaBuffer[1] = iMA(_Symbol, PERIOD_D1, 16, 0, MODE_EMA, PRICE_CLOSE);

    adxBuffer[0] = iADX(_Symbol, PERIOD_D1, 14);
    rsiBuffer[0] = iRSI(_Symbol, PERIOD_D1, 14, PRICE_CLOSE);
    macdBuffer[0] = iMACD(_Symbol, PERIOD_D1, 12, 26, 9, PRICE_CLOSE);
    macdBuffer[1] = iMACD(_Symbol, PERIOD_D1, 12, 26, 9, PRICE_CLOSE);
    stochasticBuffer[0] = iStochastic(_Symbol, PERIOD_D1, 5, 3, 3, MODE_SMA, STO_LOWHIGH);
    stochasticBuffer[1] = iStochastic(_Symbol, PERIOD_D1, 5, 3, 3, MODE_SMA, STO_LOWHIGH);
    
    
    ChartSetInteger(0, CHART_ARROW_FIRST, BuyArrow);
    ChartSetInteger(0, CHART_ARROW_LAST, SellArrow);
    
    ArraySetAsSeries(emaBuffer, true);
    ArraySetAsSeries(adxBuffer, true);
    ArraySetAsSeries(rsiBuffer, true);
    ArraySetAsSeries(macdBuffer, true);
    ArraySetAsSeries(stochasticBuffer, true);

    IndicatorSetInteger(INDICATOR_DIGITS, _Digits);
    SetIndexBuffer(0, emaBuffer);
    SetIndexBuffer(1, adxBuffer);
    SetIndexBuffer(2, rsiBuffer);
    SetIndexBuffer(3, macdBuffer);
    SetIndexBuffer(4, stochasticBuffer);

     return(INIT_SUCCEEDED);
}

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
    double emaDiff = emaBuffer[0] - emaBuffer[1];
    bool isUptrend = emaDiff > 0;
    bool isDowntrend = emaDiff < 0;

    bool emaCrossoverBuy = (emaBuffer[0] > emaBuffer[1]) && (low[0] < emaBuffer[0]);
    bool emaCrossoverSell = (emaBuffer[0] < emaBuffer[1]) && (high[0] > emaBuffer[0]);

    double currentPrice = close[0];

    bool isHighAdx = adxBuffer[0] > 25;
    bool isOversoldRsi = rsiBuffer[0] < 30;
    bool isBullishMacd = macdBuffer[0] > macdBuffer[1];
    bool isBullishStochastic = (stochasticBuffer[0] > stochasticBuffer[1]) && (stochasticBuffer[0] < 80);

    
    if (isUptrend && emaCrossoverBuy) {
        // Generate Buy signal
    } else if (isDowntrend && emaCrossoverSell) {
        // Generate Sell signal
    }

    return(rates_total);
}

void OnTimer()
{
    // Implement timer-related functionality if needed
}

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
    datetime chartTime[];
    double high[], low[];
    datetime time[];

    if(id == CHARTEVENT_OBJECT_CREATE) {
        if(ObjectFind(0, "BuySignalArrow") != -1)
            ObjectDelete(0, "BuySignalArrow");
        if(ObjectFind(0, "SellSignalArrow") != -1)
            ObjectDelete(0, "SellSignalArrow");

        if(BuySignalBar != -1 && BuySignalBar < ArraySize(high) && BuySignalBar < ArraySize(low)) {
           double buyPrice = high[BuySignalBar] + 10 * Point;
            ObjectCreate(0, "BuySignalArrow", OBJ_ARROW, 0, Time[BuySignalBar], buyPrice);
            ObjectSetInteger(0, "BuySignalArrow", OBJPROP_ARROWCODE, BuyArrow);
        }

        if(SellSignalBar != -1 && SellSignalBar < ArraySize(high) && SellSignalBar < ArraySize(low)) {
            double sellPrice = low[SellSignalBar] - 10 * Point;
            ObjectCreate(0, "SellSignalArrow", OBJ_ARROW, 0, Time[SellSignalBar], sellPrice);
            ObjectSetInteger(0, "SellSignalArrow", OBJPROP_ARROWCODE, SellArrow);
        }
    }
}


 
@Ezio Evan # Может ли кто-нибудь помочь мне построить стратегию? Я сделал все, но все равно не могу исправить ошибку ,
Error : 'advanctradingapproch.mq5'
advanctradingapproch.mq5 (линия) 1 (столбец) 1
для индикатора не определен индикаторный график 0 0
';' - ожидается открытая скобка advanctradingapproch.mq5 119 61
';' - открытая скобка ожидается advanctradingapproch.mq5 125 63

вот код:

Пожалуйста, не обращайтесь за помощью к ChatGPT (или другим A.I.) , генерирующим код. Он генерирует ужасный код, смешивая MQL4 и MQL5. Пожалуйста, используйте раздел Freelance для таких запросов.

  • Обычно люди, не умеющие писать код, не получают бесплатной помощи на этом форуме.
  • Если вы покажете свои попытки и четко опишите свою проблему, то, скорее всего, получите ответ от сообщества. При вставке кода используйте кнопку CODE (Alt-S).
  • Чтобы научиться программировать на MQL, вы можете изучить множество доступных статей по этой теме или примеров в Кодовой базе, а также обратиться к онлайн-документации.
  • Если вы не хотите изучать код, это не проблема. Вы можете обратиться к Codebase, если что-то бесплатное уже существует, или к Маркету для платных продуктов (иногда тоже бесплатных). Однако рекомендации или предложения по продуктам Маркета на форуме запрещены, так что вам придется провести собственное исследование.
  • Наконец, у вас также есть возможность нанять программиста в разделе Freelance.
Trading applications for MetaTrader 5 to order
Trading applications for MetaTrader 5 to order
  • 2023.11.30
  • www.mql5.com
The largest freelance service with MQL5 application developers
 
Коллеги, подскажите пожалуйста как в тестере стратегий MT5 при быстрой (генетической) оптимизации не учитывать те проходы которые завершались с принудительным закрытием открытых позиций. То есть когда проход подошел к концу а позиции еще не успели прийти к прибыли. Заранее спасибо! 
 
exes86 #:
Коллеги, подскажите пожалуйста как в тестере стратегий MT5 при быстрой (генетической) оптимизации не учитывать те проходы которые завершались с принудительным закрытием открытых позиций. То есть когда проход подошел к концу а позиции еще не успели прийти к прибыли. Заранее спасибо! 

В советник добавьте input, где прописано время за час до конца интервала тестирования.

В советнике, как только время перешагнуло этот input и есть открытые позиции, либо взводить флаг для обнуления OnTester, либо на всю котлету обнулять баланс за счет спреда.

 
fxsaber #:

В советник добавьте input, где прописано время за час до конца интервала тестирования.

В советнике, как только время перешагнуло этот input и есть открытые позиции, либо взводить флаг для обнуления OnTester,

Спасибо! Буду пробовать.
Причина обращения: