Análisis de los resultados de las pruebas y optimización en el probador de estrategias de MetaTrader 5 - página 8

 
¿Puede alguien ayudarme a construir la estrategia?

como hice evry cosa, pero todavía no soy capaz de solucionar el error,
Error: 'advanctradingapproch.mq5'
advanctradingapproch.mq5 (línea) 1 (Columna) 1
no indicator plot defined for indicator 0 0
';' - paréntesis abierto esperado advanctradingapproch.mq5 119 61
';' - paréntesis abierto esperado advanctradingapproch.mq5 125 63

aquí está el código:

//+------------------------------------------------------------------+
//|                                        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 #¿Puede alguien ayudarme a construir una estrategia? como lo hice evry cosa, pero todavía no soy capaz de solucionar el error,
Error: 'advanctradingapproch.mq5'
advanctradingapproch.mq5 (línea) 1 (Columna) 1
no indicator plot defined for indicator 0 0
';' - paréntesis abierto esperado advanctradingapproch.mq5 119 61
';' - paréntesis abierto esperado advanctradingapproch.mq5 125 63

aquí está el código:

Por favor, no solicites ayuda para el código generado por ChatGPT (u otra I.A. ). Genera un código horrible, mezclando MQL4 y MQL5. Por favor, utilice la sección de Freelance para este tipo de solicitudes.

  • Normalmente la gente que no sabe codificar no recibe ayuda gratuita en este foro.
  • Si muestras tus intentos y describes tu problema claramente, lo más probable es que recibas una respuesta de la comunidad. Utilice el botón CÓDIGO (Alt-S) al insertar código.
  • Para aprender a programar MQL, puedes investigar los numerosos Artículos disponibles sobre el tema, o los ejemplos en la Codebase, así como consultar la Documentación en línea.
  • Si no quieres aprender a programar, no hay problema. Puedes buscar en la Codebase si ya existe algo gratuito, o en el Market para productos de pago (a veces también gratuitos). Sin embargo, las recomendaciones o sugerencias de productos del Market no están permitidas en el foro, así que tendrás que investigar por tu cuenta.
  • Por último, también tienes la opción de contratar a un programador en la sección 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
 

Hola chicos,

Estoy tratando de entender cuáles son los componentes ideales de un equipo que ayudará a grandes optimizaciones de estrategia (100.000+ combinaciones a través de varios años de datos M1) para completar más rápido. Estoy preguntando para que yo pueda tomar sus recomendaciones, y crear una instancia de AWS EC2 (ordenador virtual personalizado) con las especificaciones deseadas (x cantidad de vCPUs, x cantidad de memoria, etc) para ayudar a agilizar la obtención de resultados de optimización más rápido.

Voy a compartir los resultados de mis costos de EC2 y el tiempo hasta la finalización después si va a ayudar a la comunidad.

Gracias de antemano por sus respuestas.

 

POR FAVOR AYUDENME A RESOLVER ESTE PROBLEMA EN MI EA MT5



estoy tratando de crear un EA que utiliza 2 Bandas de Bollinger (una con 1 std y y otra con 1.5 std)

y entro en una posición con un cierre por debajo de la bb(1 std) y el precio de los mercados con un sl en el mayor bb y un tp en la línea media , quiero modificar automáticamente el oder de tal manera que se mueve el sl y tp para el último valor de la banda de bolllinger y la línea media es decir, la vela actual tiene un índice de 0 y la vela anterior tiene un índice de 1, por lo que los valores bb en el índice 1 . quiero que esto suceda hasta que cualquiera de sl / tp es golpeado. alguien puede guiarme en la dirección correcta???? soy un aficionado y acaba de empezar con este material EA. soy consciente de que puedo obtener el billete de posición y utilizarlo para modificar sl / tp, pero tengo un tiempo difícil extraer los 2 valores de la bb, el tp / sl inicial y la sl / tp modificado con cada vela. puedo obtener los valores de la función ibands y utilizar la función de búfer de copia para extraer los valores, pero sólo tengo éxito hacerlo para la sl / tp inicial ¿cómo puedo extraer los valores de la sl / tp rodando, por favor ayúdame, gracias por la ayuda, lo aprecio.