Mira cómo descargar robots gratis
¡Búscanos en Twitter!
Pon "Me gusta" y sigue las noticias
Pon "Me gusta" y sigue las noticias
¿Es interesante este script?
Deje un enlace a él, ¡qué los demás también lo valoren!
Deje un enlace a él, ¡qué los demás también lo valoren!
¿Le ha gustado el script?
Evalúe su trabajo en el terminal MetaTrader 5
Evalúe su trabajo en el terminal MetaTrader 5
Code Block for "Trailing Stop" based on current market price. (Ask / Bid) - Asesor Experto para MetaTrader 5
- Visualizaciones:
- 140
- Ranking:
- Publicado:
-
¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa
Este bloque de código funciona tanto si utiliza un Stop Loss como si no.
Requisitos
- Necesita incluir "Trade.mqh " para tener acceso a la clase CTrade que le permite trabajar con posiciones y órdenes.
#include <Trade\Trade.mqh> // <<------------------------------------------ Incluya este "Trade.mqh" para acceder a la clase CTrade.
- Necesita establecer un parámetro de entrada para ajustar la distancia de arrastre como desee. Esto no es necesario, pero es conveniente.
input double Traling_Step = 3.0;
- Necesita definir una instancia para la clase CTrade. el nombre puede ser cualquiera. Sería mejor hacerlo después del manejador del evento OnInt .
- Luego necesita crear una sentencia if para chequear si alguna posición ha estado corriendo en el momento. Esta sentencia llama a la función Check_TrailingStop(); por cada tick. Esto es importante porque el EA debe rastrear de forma nítida y suave. Tenga en cuenta para poner esta declaración en la parte superior del controlador de eventos OnTick para que funcione correctamente.
//+------------------------------------------------------------------+ //| Función de inicialización experta| //+------------------------------------------------------------------+ int OnInit() { //--- crear temporizador EventSetTimer(60); //--- return(INIT_SUCCEEDED); } CTrade trade; // <<------------------------------------------ Declare la calss "CTrade". puede sustituir "trade" ganar cualquier nombre que desee.
void OnTick() { if(PositionsTotal() > 0) // llama a la función trailing stop por cada tick si hay / están corriendo posiciones. { Check_TralingStop(); } }
- Usted necesita declarar una función personalizada llamada Check_TrailingStop(); ( en este caso) para hacer el resto. Puede utilizar el nombre que desee.
- La función personalizada recorre todas las posiciones abiertas y las rastrea a la distancia requerida.
void Check_TralingStop() { int totalPositions = PositionsTotal(); for(int count =0; count < totalPositions; count++) { ulong TicketNo = PositionGetTicket(count); // Obtener el número de Ticket de Posición utilizando el 'índice' de la posición. if(PositionSelectByTicket(TicketNo)) // Seleccione una posición utilizando el número de ticket (ya hemos elegido el nº de tickt) { if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) // Comprueba la posición Tipo. { double openPrice = PositionGetDouble(POSITION_PRICE_OPEN); double stopLoss = PositionGetDouble(POSITION_SL); // <<-------------------Obtener posición Stop Loss actual double takeProfit = PositionGetDouble(POSITION_TP); double bidPrice = SymbolInfoDouble(_Symbol,SYMBOL_BID); ulong ticket = PositionGetTicket(count); double trailingLevel = NormalizeDouble(bidPrice - (Traling_Step * Point()),_Digits); if(stopLoss < openPrice) // No stop loss es verdadero. { if(bidPrice > openPrice && trailingLevel > openPrice) // Se ejecuta sólo una vez por posición. Establece el primer SL. trade.PositionModify(ticket,trailingLevel,takeProfit); // Modificar trailing Stop usando "CTrade.trade" } if(bidPrice > openPrice && trailingLevel > stopLoss) // comprueba si el nivel final está por encima del nivel anterior. { trade.PositionModify(ticket,trailingLevel,takeProfit); // Modificar trailing Stop usando "CTrade.trade" } } if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL) { double openPrice = PositionGetDouble(POSITION_PRICE_OPEN); double stopLoss = PositionGetDouble(POSITION_SL); double takeProfit = PositionGetDouble(POSITION_TP); double bidPrice = SymbolInfoDouble(_Symbol,SYMBOL_BID); double askPrice = SymbolInfoDouble(_Symbol,SYMBOL_ASK); ulong ticket = PositionGetTicket(count); double trailingLevel = NormalizeDouble(askPrice + (Traling_Step * Point()),_Digits); if(stopLoss < openPrice) // No stop loss es verdadero. { if(askPrice < openPrice && trailingLevel < openPrice) // Se ejecuta sólo una vez por posición. Establece el primer SL. trade.PositionModify(ticket,trailingLevel,takeProfit); // Modificar trailing Stop usando "CTrade.trade" } if(askPrice < openPrice && trailingLevel < stopLoss) // comprueba si el nivel final está por encima del nivel anterior. { trade.PositionModify(ticket,trailingLevel,takeProfit); // Modificar trailing Stop usando "CTrade.trade" } } } } }
Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/code/49021
ConvertServerTime
Función para convertir la hora del servidor de una zona horaria a otra.
Bollinger Bands Squeeze
Señala un periodo de baja volatilidad del mercado que está a punto de terminar, presagiando un movimiento significativo de los precios.
Simple Code for Detect A "New Bar or New Candle " Received
Este bloque de código detecta una Nueva Barra o una Nueva Vela cuando ha recibido.
Logarithmic Moving Average
La media móvil logarítmica calcula continuamente la media logarítmica del precio más alto y el precio más bajo dentro de un período.