El Trailing Stop es una herramienta fundamental que apoya nuestras operaciones al mover el stop loss hacia la zona de ganancias, permitiéndonos asegurar automáticamente nuestras transacciones.
Iniciaremos escribiendo el código especificando los parámetros de entrada del trailing stop.
input bool isTrailingStop = true; //Trailing Stop input int trailingStart = 15; //Inicio del Trailing (pips) input int trailingStep = 5 //Paso del Trailing (pips) input int MagicNumber = 0; //Número Mágico
Variable Global
//Variable Global double myPoint = 0.0;
Cuando ejecutamos este sistema de trading, la función OnInit() se ejecutará por primera vez, y en esta función validaremos e inicializaremos las variables de entrada.
int OnInit() { if (isTrailingStop && trailingStart <= 0){ Alert ("Parámetros incorrectos"); return(INIT_PARAMETERS_INCORRECT); } myPoint = GetPipPoint(Symbol()); return(INIT_SUCCEEDED); }
Cada vez que ocurre un movimiento de precio (tick) en el gráfico donde está emparejado este sistema de trading, se ejecutará la función OnTick(). Dentro de esta función se llamará a setTrailingStop().
void OnTick() { //--- setTrailingStop(MagicNumber); }
Función setTrailingStop()
void setTrailingStop(int magicNumber=0){ if (isTrailingStop==false) return; int tOrder = 0; string pair = ""; double sl = 0.0, tp = 0.0; pair = Symbol(); tOrder = OrdersTotal(); for (int i=tOrder-1; i>=0; i--){ bool hrsSelect = OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if (OrderMagicNumber() == magicNumber && StringFind(OrderSymbol(), pair, 0) == 0 ){ if (OrderType() == OP_BUY){ if ( (Bid - (trailingStart * myPoint)) >= OrderOpenPrice() && (Bid - ((trailingStart+trailingStep) * myPoint) >= OrderStopLoss() ) ) { sl = NormalizeDouble(Bid - (trailingStart * myPoint), Digits()); if (!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, clrBlue)){ Print ("#", OrderTicket(), " fallo en actualizar sl"); } } } if (OrderType() == OP_SELL){ if ( (Ask + (trailingStart * myPoint)) <= OrderOpenPrice() && ( (Ask + ((trailingStart+trailingStep) * myPoint) <= OrderStopLoss() ) || OrderStopLoss() == 0.0) ) { sl = NormalizeDouble(Ask + (trailingStart * myPoint), Digits() ); if (!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, clrBlue)){ Print ("#", OrderTicket(), " fallo en actualizar sl"); } } } } //fin if magicNumber }//fin for }
Otras funciones estándar requeridas son GetPipPoint()
// Función GetPipPoint double GetPipPoint(string pair) { double point= 0.0; int digits = (int) MarketInfo(pair, MODE_DIGITS); if(digits == 2 || digits== 3) point= 0.01; else if(digits== 4 || digits== 5) point= 0.0001; return(point); }
Si tienes alguna pregunta, déjala en los comentarios o también puedes unirte a nuestro grupo de intercambio t.me/codeMQL
También ofrecemos la aplicación SignalForex.
Puedes apoyarnos descargando y utilizando la aplicación SignalForex para hacer tus operaciones más rentables.
https://play.google.com/store/apps/details?id=com.autobotfx.signalforex
연관 포스트
- Crypto Scalper - Sistema de Trading Automático para MetaTrader 4
- Fibochannel Line – Sistema de Trading Automático en MetaTrader 4
- TargetEA - Sistema de Trading Automático para MetaTrader 4
- Super Scalper EMAs - Sistema de Trading Automático para MetaTrader 4
- Detector de Noticias para MT4 y MT5 - Sistema de Trading Automático para MetaTrader 4