Pon "Me gusta" y sigue las noticias
Deje un enlace a él, ¡qué los demás también lo valoren!
Evalúe su trabajo en el terminal MetaTrader 5
- Publicado por:
- Vladimir Karputov
- Visualizaciones:
- 1016
- Ranking:
- Publicado:
- 2017.08.10 16:48
-
¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa
Autor de la idea — Vladimir Khlystov, autor del código mq5 — barabashkakvn.
Estrategia comercial: ruptura del máximo/mínimo en el intervalo temporal elegido. Para compensar las posiciones con pérdidas se usa "Nevalyashka" con aumento de lote según el principio de martingale.
El asesor calcula el máximo y el mínimo del precio en el intervalo temporal entre "Time start" — la hora de comienzo del periodo de control y "Time end" — la hora de finalización del periodo de control:
Si el precio supera el máximo de este periodo, se abre la posición "BUY", si el precio se va por debajo del mínimo, se abre una posición "SELL". El StopLoss se establece en el límite opuesto del periodo: para la posición "BUY", al nivel del mínimo del precio; para la posición "SELL", al nivel del máximo del precio. El TakeProfit se coloca según el nivel de altura del periodo de control.
Si el parámetro "Use time close" es igual a true, significa que funcionará el parámetro "Time close" (hora a la que se cierran todas las posiciones).
para los parámetros de enetrada "Time start", "Time end" y "Time close" se tienen en cuenta solo las horas y los minutos.
El cierre por StopLoss se capta en OnTradeTransaction.
Cuando detectamos una transacción con el tipo "DEAL_ENTRY_OUT" (ru: "Salida del mercado", en: "Entry out"), miramos el campo del comentario de esta transacción. Si en los comentarios detectamos "sl" esto significa, con bastante probabilidad, que hemos detecatdo una transacción cerrada por StopLoss:
if(deal_symbol==m_symbol.Name() && deal_magic==m_magic) if(deal_entry==DEAL_ENTRY_OUT) { MqlDateTime str1; TimeToStruct(TimeCurrent(),str1); //--- there is a chance that this was a closure on the TakeProfit if(StringFind(deal_comment,"tp",0)!=-1 || deal_profit>=0.0) { TradeDey=str1.day; return; } //--- there is a chance that this was a closure on the StopLoss if(StringFind(deal_comment,"sl",0)!=-1) { if(TradeDey!=str1.day) { Print("A StopLoss closure has been detected!"); double loss=MathAbs(deal_profit/m_symbol.TickValue()/deal_volume); if(deal_type==DEAL_TYPE_SELL) // the buy position is closed { double SL=m_symbol.Bid()+loss*m_symbol.Point(); double TP=m_symbol.Bid()-loss*m_symbol.Point(); double Lot=LotCheck(deal_volume*InpK_martin); if(Lot==0.0) return; OpenSell(SL,TP,Lot,"Nevalyashka"); } if(deal_type==DEAL_TYPE_BUY) // the sell position is closed { double SL=m_symbol.Ask()-loss*m_symbol.Point(); double TP=m_symbol.Ask()+loss*m_symbol.Point(); double Lot=LotCheck(deal_volume*InpK_martin); if(Lot==0.0) return; OpenBuy(SL,TP,Lot,"Nevalyashka"); } return; } } }
y abrimos una posición opuesta a la cerrada (si el tipo de la transacción es "DEAL_TYPE_SELL", significa que se ha cerrado una posición "BUY"; si el tipo de la transacción es "DEAL_TYPE_BUY", significa que se ha cerrado una transacción"SELL"), pero en este caso, aumentamos el volumen de la operación en "K. martin" veces. Si la posición se ha cerrado con beneficio positivo, el asesor espera la hora de comienzo del siguiente periodo "Time end", y todo se repite.
El parámetro "No loss" designa el paso a ausencia de pérdidas: al alcanzar la posición la mitad del beneficio, el StopLoss de la posición se traslada al nivel del precio de apertura.
Ejmplo de simulación con EURUSD,M30:
Traducción del ruso realizada por MetaQuotes Ltd
Artículo original: https://www.mql5.com/ru/code/18645

Indicador Boa_ZigZag_Arrows con posibilidad de cambiar el marco temporal del indicador en los parámetros de entrada.

El indicador marca con líneas cortas horizontales todas las trasnacciones ejecutadas.

Canal construido con los picos y los valles del indicador de Zigzag Boa_ZigZag

Canal construido con los picos y los valles del indicador de Zigzag.