Idea de: Vladimir Gribachev.
Código MQL5 por: Vladimir Karputov.
Te presento un System Trading que no utiliza indicadores personalizados; las posiciones se abren de manera pseudorandom. Este EA muestra las estadísticas actuales en dos idiomas:

El sistema ajusta el Stop Loss de las posiciones abiertas. En caso de pérdidas, las lotes aumentan utilizando la estrategia de Martingale. Para monitorear las pérdidas, en OnTradeTransaction, capturamos la transacción con el motivo DEAL_REASON_SL, que indica que se activó el Stop Loss:
//+------------------------------------------------------------------+ //| Función TradeTransaction | //+------------------------------------------------------------------+ void OnTradeTransaction(const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result) { //--- obtener el tipo de transacción como valor de enumeración ENUM_TRADE_TRANSACTION_TYPE type=trans.type; //--- si la transacción es resultado de la adición de la transacción en el historial if(type==TRADE_TRANSACTION_DEAL_ADD) { long deal_ticket =0; long deal_order =0; long deal_time =0; long deal_time_msc =0; long deal_type =-1; long deal_entry =-1; long deal_magic =0; long deal_reason =-1; long deal_position_id =0; double deal_volume =0.0; double deal_price =0.0; double deal_commission =0.0; double deal_swap =0.0; double deal_profit =0.0; string deal_symbol =""; string deal_comment =""; string deal_external_id =""; if(HistoryDealSelect(trans.deal)) { deal_ticket =HistoryDealGetInteger(trans.deal,DEAL_TICKET); deal_order =HistoryDealGetInteger(trans.deal,DEAL_ORDER); deal_time =HistoryDealGetInteger(trans.deal,DEAL_TIME); deal_time_msc =HistoryDealGetInteger(trans.deal,DEAL_TIME_MSC); deal_type =HistoryDealGetInteger(trans.deal,DEAL_TYPE); deal_entry =HistoryDealGetInteger(trans.deal,DEAL_ENTRY); deal_magic =HistoryDealGetInteger(trans.deal,DEAL_MAGIC); deal_reason =HistoryDealGetInteger(trans.deal,DEAL_REASON); deal_position_id =HistoryDealGetInteger(trans.deal,DEAL_POSITION_ID); deal_volume =HistoryDealGetDouble(trans.deal,DEAL_VOLUME); deal_price =HistoryDealGetDouble(trans.deal,DEAL_PRICE); deal_commission =HistoryDealGetDouble(trans.deal,DEAL_COMMISSION); deal_swap =HistoryDealGetDouble(trans.deal,DEAL_SWAP); deal_profit =HistoryDealGetDouble(trans.deal,DEAL_PROFIT); deal_symbol =HistoryDealGetString(trans.deal,DEAL_SYMBOL); deal_comment =HistoryDealGetString(trans.deal,DEAL_COMMENT); deal_external_id =HistoryDealGetString(trans.deal,DEAL_EXTERNAL_ID); } else return; if(deal_symbol==m_symbol.Name() && deal_magic==m_magic) if(deal_entry==DEAL_ENTRY_OUT) { PrevBars=0; if(deal_reason==DEAL_REASON_SL && deal_commission+deal_swap+deal_profit<0.0) last_lots_sl=deal_volume; else last_lots_sl=0.0; } } }
Parámetros de entrada
- Stop Loss - Nivel del Stop Loss;
- Take Profit - Nivel del Take Profit;
- Trailing Stop - Activar el trailing;
- Trailing Step - Paso del trailing;
- Lots - Tamaño de lote definido manualmente (si Lots es mayor que cero, entonces Risk debe ser igual a cero);
- Risk - Tamaño de lote calculado automáticamente (si Risk es mayor que cero, entonces Lots debe ser igual a cero);
- Martingale - Ratio de aumento de lotes, si la posición anterior se cerró por Stop Loss y la ganancia fue negativa;
- Max lots - Tamaño máximo de posición; si se excede este tamaño, el EA termina su operación anormalmente;
- magic number - Identificador único para el EA.
El testeo se interrumpió (el EA fue descargado del gráfico de forma forzada), ya que el lote de referencia superó el parámetro Max lots:

Publicaciones relacionadas
- MACD y Línea de Señal: Estrategia para MetaTrader 4
- Crea tu Asesor Experto: Señales de Trading con Líneas de Reunión y Estocástico en MQL5
- Asesor Experto Basado en Medias Móviles: Tu Guía para MetaTrader 4
- Gann Grid: Tu Asesor Experto para MetaTrader 4
- Líneas de Fibonacci: Tu Asesor Experto para MetaTrader 4