¡Hola, traders! Hoy quiero compartir con ustedes un Asesor Experto (EA) muy sencillo que he estado usando en mis operaciones. Este EA, que utiliza el indicador DeMarker, es el más simple que he tenido, así que después de leerlo, no duden en dejar su valoración.
Este EA está diseñado para operar en un solo par de divisas. Las configuraciones como el marco temporal, lotes, stop loss y take profit se pueden ajustar desde el menú de propiedades.

extern ENUM_TIMEFRAMES TF = PERIOD_CURRENT;// Seleccionar el marco temporal extern int period = 8;// Periodo DeMarker extern double lt = 0.01;// Lotes extern int sl = 100;// Stop Loss extern int tp = 100;// Take Profit extern double OB = 0.7;// Sobrevendido extern double OS = 0.3;// Sobrecomprado extern bool OPENBAR = false;// Operar en el precio de apertura de la nueva barra
Aquí está el truco: divido las variables en tres partes:
- Datos | Marco Temporal
- Orden
- Par
//+------------------------------------------------------------------+ //-- marco temporal | indicador double dmrk[5]; int signal = -1;//-- 0.comprar 1.vender int hold = 0; //-- orden int ticket = 0; double lot = 0.0; int typ = -1; //-- par datetime t1 = 0; bool newbar = false; bool entry = false; //+------------------------------------------------------------------+
En la función OnInit(), inicializo la variable del array del indicador DeMarker y verifico el tamaño mínimo de lote de trading según los requisitos de mi bróker.
//+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnInit() { ArrayInitialize(dmrk,0.0); //--- const double test_lot = SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN); if(lt < test_lot) lt = test_lot; }
En la función OnTick(), calculo el indicador y determino las señales de compra y venta.
//--------------------------------------------------------------------------- signal = -1; //--------------------------------------------------------------------------- //---calcular for(int i = 0; i < ArraySize(dmrk); i++) { dmrk[i] = iDeMarker(Symbol(), TF, period, i); } //--- if(dmrk[1] > OB) { hold = 1;// establecer } else if(dmrk[1] < OS) { hold = -1;// establecer } else { hold = 0;// reiniciar } if(hold == 1) { if(dmrk[0] < OB && dmrk[1] > OB) { signal = OP_SELL; } } if(hold == -1) { if(dmrk[0] > OS && dmrk[1] < OS) { signal = OP_BUY; } }
Para abrir una señal de compra o venta...
//--------------------------------------------------------------------------- if(signal != -1) if(newbar == true) if(entry == false)// puerta abierta { //--- entry = true;// establecer //--- if(signal == OP_BUY) { { ticket = OrderSend(Symbol(), OP_BUY, lt, Ask, (int)((Ask - Bid) / Point), sl > 0 ? Bid - sl * Point : 0.0, tp > 0 ? Bid + tp * Point : 0.0, EAName + ":signal= " + IntegerToString(signal) + ":hold= " + IntegerToString(hold), EANumber, 0, clrBlue); signal = -1; //hold =0; }//reset else if(signal == OP_SELL) { { ticket = OrderSend(Symbol(), OP_SELL, lt, Bid, (int)((Ask - Bid) / Point), sl > 0 ? Ask + sl * Point : 0.0, tp > 0 ? Ask - tp * Point : 0.0, EAName + ":signal= " + IntegerToString(signal) + ":hold= " + IntegerToString(hold), EANumber, 0, clrRed); signal = -1; //hold =0; }//reset signal }
Y para el cierre...
if(entry == true) // cierre { if(OrderSelect(ticket, SELECT_BY_TICKET)) { if(OrderCloseTime() == 0)//-- orden activa { /* todo condición para cerrar */ //entry = false; } //else if(OrderCloseTime() != 0)//-- cierre por 1. manual 2. sl/tp 3. ea { entry = false;//reiniciar entrada } } }


¡Espero que este EA les sea útil y que puedan implementarlo en su trading! No olviden dejar sus comentarios y compartir sus experiencias. ¡Éxitos en sus operaciones!
Comentarios 0