Inicio Trading Sistemático Publicación

Lazy Bot MT5: Tu Asistente de Trading para MetaTrader 5

Archivos adjuntos
41732.zip (4.52 KB, Descargar 0 veces)

¿Estás buscando un asistente que te ayude a optimizar tus operaciones en MetaTrader 5? ¡Te presento a Lazy Bot MT5! Este sistema de trading está diseñado para realizar operaciones automáticas basadas en los puntos más altos y bajos del día anterior. A continuación, te contaré cómo configurarlo y cómo funciona.

1. Parámetros de entrada

  • EASettings: "---------------------------------------------"
  • InpMagicNumber: 123456 (Número mágico para identificar operaciones)
  • InpBotName: "LazyBot_V1" (Nombre del bot)
  • Inpuser_lot: 0.01 (Tamaño de lote)
  • Inpuser_SL: 5.0 (Stoploss en Pips)
  • InpAddPrice_pip: 0 (Distancia desde [H], [L] al precio de operación en Pips)
  • Inpuser_SLippage: 3 (Deslizamiento máximo permitido en Pips)
  • InpMax_spread: 0 (Spread máximo permitido en Pips)
  • isTradingTime: true (Permitir operaciones solo en el horario establecido)
  • InpStartHour: 7 (Hora de inicio de operaciones)
  • InpEndHour: 22 (Hora de finalización de operaciones)
  • isVolume_Percent: false (Permitir volumen en porcentaje)
  • InpRisk: 1 (Porcentaje de riesgo sobre el saldo)

2. Inicialización de variables locales

// Parámetros locales

datetime last;
int totalBars;
int Pips2Points; // Deslizamiento 3 pips

double Pips2Double; // Stoploss 15 pips

double slippage;
double acSpread;
string strComment = "";

CPositionInfo  m_position; // Objeto de posición de trading
CTrade         m_trade;    // Objeto de trading
CSymbolInfo    m_symbol;   // Información del símbolo
CAccountInfo   m_account;  // Información de la cuenta
COrderInfo     m_order;    // Órdenes pendientes

3. Código Principal

La estrategia de Lazy Bot consiste en eliminar todas las órdenes antiguas y calcular los puntos más altos y bajos de la barra diaria anterior para generar dos órdenes pendientes: BUY_STOP y SELL_STOP, sin tomar ganancias.

4. Función de Inicialización del Asistente

int OnInit()
{
    // Detección de dígitos
    if(_Digits % 2 == 1) {
        Pips2Double = _Point * 10;
        Pips2Points = 10;
        slippage = 10 * Inpuser_SLippage;
    } else {
        Pips2Double = _Point;
        Pips2Points = 1;
        slippage = Inpuser_SLippage;
    }

    if (!m_symbol.Name(Symbol()))
        return(INIT_FAILED);

    RefreshRates();
    m_trade.SetExpertMagicNumber(InpMagicNumber);
    m_trade.SetMarginMode();
    m_trade.SetTypeFillingBySymbol(m_symbol.Name());
    m_trade.SetDeviationInPoints(slippage);

    return(INIT_SUCCEEDED);
}

5. Función de Tick del Asistente

void OnTick()
{
    if (TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) == false) {
        Comment("LazyBot\nTrading no permitido.");
        return;
    }

    // Verificación del tiempo de trading
    MqlDateTime timeLocal;
    MqlDateTime timeServer;
    TimeLocal(timeLocal);
    TimeCurrent(timeServer);

    // No operar en festivos
    if(timeServer.day_of_week == 0 || timeServer.day_of_week == 6)
        return;

    int hourLocal = timeLocal.hour;
    int hourCurrent = timeServer.hour;
    acSpread = SymbolInfoInteger(_Symbol, SYMBOL_SPREAD);

    strComment = "\nHora Local = " + hourLocal;
    strComment += "\nHora Actual = " + hourCurrent;
    strComment += "\nSpread = " + (string)acSpread;
    strComment += "\nTotal de Barras = " + (string)totalBars;

    Comment(strComment);

    // Chequear Trailing
    TrailingSL();

    if (last != iTime(m_symbol.Name(), PERIOD_D1, 0)) {
        if (isTradingTime) {
            if (hourCurrent >= InpStartHour) {
                DeleteOldOrds();
                OpenOrder();
                last = iTime(m_symbol.Name(), PERIOD_D1, 0);
            }
        } else {
            DeleteOldOrds();
            OpenOrder();
            last = iTime(m_symbol.Name(), PERIOD_D1, 0);
        }
    }
}

6. Video Tutorial

Para profundizar en el uso de MQL4 y MQL5, aquí tienes unos videos:



Publicaciones relacionadas

Comentarios (0)