Analyse der Testergebnisse und Optimierung im MetaTrader 5 Strategie-Tester - Seite 8

 
Kann mir jemand helfen, eine Strategie zu entwickeln?

Ich habe alles getan, aber ich bin immer noch nicht in der Lage, den Fehler zu beheben,
Error : 'advanctradingapproch.mq5'
advanctradingapproch.mq5 (Zeile) 1 (Spalte) 1
kein Indikatorplot für Indikator definiert 0 0
';' - offene Klammer erwartet advanctradingapproch.mq5 119 61
';' - offene Klammer erwartet advanctradingapproch.mq5 125 63

hier ist der Code:

//+------------------------------------------------------------------+
//|                                        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 # Kann mir jemand helfen, eine Strategie zu entwickeln? Ich habe alles getan, aber ich kann den Fehler immer noch nicht beheben,
Error : 'advanctradingapproch.mq5'
advanctradingapproch.mq5 (Zeile) 1 (Spalte) 1
kein Indikatorplot für Indikator definiert 0 0
';' - offene Klammer erwartet advanctradingapproch.mq5 119 61
';' - offene Klammer erwartet advanctradingapproch.mq5 125 63

hier ist der Code:

Bitte bitten Sie nicht um Hilfe für ChatGPT (oder andere KI) generierten Code. Es erzeugt schrecklichen Code, der MQL4 und MQL5 vermischt. Bitte benutzen Sie die Freelance Sektion für solche Anfragen.

  • Normalerweise erhalten Leute, die nicht programmieren können, keine kostenlose Hilfe in diesem Forum.
  • Wenn Sie Ihre Versuche zeigen und Ihr Problem klar beschreiben, werden Sie höchstwahrscheinlich eine Antwort von der Community erhalten. Verwenden Sie die CODE-Taste (Alt-S), wenn Sie Code einfügen.
  • Um die MQL-Programmierung zu erlernen, können Sie die vielen verfügbaren Artikel zu diesem Thema oder Beispiele in der Codebase durchsuchen, sowie die Online-Dokumentation zu Rate ziehen.
  • Wenn Sie nicht programmieren lernen wollen, ist das kein Problem. Sie können entweder in der Codebase nach sehen, ob es bereits etwas Kostenloses gibt, oder auf dem Markt nach kostenpflichtigen Produkten (manchmal auch kostenlos) suchen. Allerdings sind Empfehlungen oder Vorschläge für Market-Produkte im Forum nicht erlaubt, Sie müssen also selbst recherchieren.
  • Schließlich haben Sie auch die Möglichkeit, im Bereich Freelance einen Programmierer zu beauftragen.
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
 

Hallo Leute,

Ich bin auf der Suche nach den idealen Komponenten eines Computers, mit denen große Strategieoptimierungen (100.000+ Kombinationen über mehrere Jahre von M1-Daten) schneller abgeschlossen werden können. Ich frage, damit ich Ihre Empfehlungen übernehmen und eine AWS EC2-Instanz (benutzerdefinierter virtueller Computer) mit den gewünschten Spezifikationen (x vCPUs, x Speicher usw.) erstellen kann, um die Optimierungsergebnisse schneller zu erhalten.

Ich werde die Ergebnisse meiner EC2-Kosten und die Zeit bis zur Fertigstellung nachher teilen, wenn es der Gemeinschaft hilft.

Ich danke Ihnen im Voraus für Ihre aufmerksamen Antworten.

 

BITTE HELFEN SIE MIR DIESES PROBLEM IN MEINEM MT5 EA ZU LÖSEN



Ich versuche, einen EA zu erstellen, der 2 Bollinger Bänder verwendet (eines mit 1 std und ein anderes mit 1,5 std)

und ich gebe eine Position mit einem Schlusskurs unter dem bb(1 std) und dem Marktpreis mit einem sl am größeren bb und einem tp an der Mittellinie ein. Ich möchte die Order automatisch so modifizieren, dass sie den sl und tp auf den letzten Wert des Bollinger Bandes und der Mittellinie verschiebt, d.h. die aktuelle Kerze hat einen Index von 0 und die vorherige Kerze hat einen Index von 1, so dass der bb-Wert bei Index 1 liegt. ich möchte, dass dies geschieht, bis einer der beiden sl/tp-Werte erreicht wird. kann mich jemand bitte in die richtige Richtung führen??? Ich bin ein Amateur und gerade erst begonnen, mit diesem EA Zeug. Ich bin mir bewusst, ich kann die Position Ticket und verwenden Sie, dass sl/tp zu ändern, aber ich habe eine harte Zeit extrahieren die 2 Werte aus der bb, die anfängliche tp/sl und die modifizierte sl/tp mit jeder Kerze. ich kann die Werte von ibands Funktion und verwenden Sie die Copy-Buffer-Funktion, um die Werte zu extrahieren, aber ich bin nur erfolgreich tun dies für die anfängliche sl/tp, wie kann ich die Werte für die rollende sl/tp extrahieren, bitte helfen Sie mir aus, danke für die Hilfe, schätzen es.

Grund der Beschwerde: