error en mi codigo

 

Hola!! cree esto (no tengo experiencia) pero el Asesor no ejecuta los trades. Me pueden ayudar???


//+------------------------------------------------------------------+
//|                                          MyEMA_Crossing_EA.mq5   |
//|                        Copyright 2024, MetaQuotes Software Corp.  |
//|                                             https://www.mql5.com  |
//+------------------------------------------------------------------+
#property strict

input int ema_period = 20; // período de la EMA
input double take_profit = 30; // 3 pips en formato de precio

double ema_buffer[];
int last_ema_cross = 0;
string symbolName; // Variable para almacenar el nombre del símbolo

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
    ArraySetAsSeries(ema_buffer, true);
    SetIndexBuffer(0, ema_buffer);

    // Obtener el nombre del símbolo del gráfico actual y asignarlo a symbolName
    symbolName = Symbol();

    return INIT_SUCCEEDED;
}

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
    MqlTradeRequest request; // Declarar la variable request aquí

    request.symbol = _Symbol; // Símbolo del gráfico actual
    double current_ema = iMA(symbolName, 0, ema_period, 0, MODE_EMA, PRICE_CLOSE);
    double current_price = SymbolInfoDouble(_Symbol, SYMBOL_BID);
    double lot_size = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP); // Tamaño mínimo de lote

    if (Crossed(current_price, current_ema) == -1 && last_ema_cross != -1)
    {
        // Cruce de arriba hacia abajo
        last_ema_cross = -1;

        request.action = TRADE_ACTION_DEAL; // Tipo de acción (ejecutar una transacción)
        request.volume = lot_size; // Volumen de la orden
        request.type = ORDER_TYPE_SELL; // Tipo de orden (venta)
        request.price = current_price; // Precio actual de venta
        request.tp = current_price - take_profit; // Take profit
        request.type_filling = ORDER_FILLING_FOK; // Tipo de llenado de la orden (Fill or Kill)

        MqlTradeResult result; // Declarar la variable result
        bool order_sent = OrderSend(request, result); // Enviar la orden y almacenar el resultado en result

        if(order_sent) {
            Print("Orden de venta enviada correctamente. Ticket: ", result.order);
        } else {
            Print("Error al enviar la orden de venta: ", result.retcode);
        }
    }
    else if (Crossed(current_price, current_ema) == 1 && last_ema_cross != 1)
    {
        // Cruce de abajo hacia arriba
        last_ema_cross = 1;

        request.action = TRADE_ACTION_DEAL; // Tipo de acción (ejecutar una transacción)
        request.volume = lot_size; // Volumen de la orden
        request.type = ORDER_TYPE_BUY; // Tipo de orden (compra)
        request.price = current_price; // Precio actual de compra
        request.tp = current_price + take_profit; // Take profit
        request.type_filling = ORDER_FILLING_FOK; // Tipo de llenado de la orden (Fill or Kill)

        MqlTradeResult result; // Declarar la variable result
        bool order_sent = OrderSend(request, result); // Enviar la orden y almacenar el resultado en result

        if(order_sent) {
            Print("Orden de compra enviada correctamente. Ticket: ", result.order);
        } else {
            Print("Error al enviar la orden de compra: ", result.retcode);
        }
    }
}

//+------------------------------------------------------------------+
//| Función para detectar cruces de precios y EMA                    |
//+------------------------------------------------------------------+
int Crossed(double price, double ema)
{
    if (price > ema)
        return 1; // Cruce de abajo hacia arriba
    else if (price < ema)
        return -1; // Cruce de arriba hacia abajo
    else
        return 0; // Sin cruce
}
Razón de la queja: