![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Hola a todos,
Tengo unas breves preguntas de codificación, mi MT4 parece haber migrado hacia MQL5.
Algunos bloques de código de eliminación ya no funcionan:
Debajo me sale el mensaje de error:
'(' Se espera el puntero del objeto.
//+----------------------------------------------------------------------------+
if(sell)if(oppositeclose)close(OP_BUY);
if(buy)if(oppositeclose)close(OP_SELL);
if(hidetp || hidesl){hideclose(OP_BUY);hideclose(OP_SELL);}
if(usetimeout && onetime){closetime(OP_BUY);closetime(OP_SELL);}
if(onecancelother){if(totalsell>0){delete(OP_BUYSTOP);delete(OP_BUYLIMIT);}if(totalbuy>0){delete(OP_SELLSTOP);delete(OP_SELLLIMIT);}}
Debajo me salen los mensajes de error 'delete' - nombre esperado y
'}' - no están permitidas en un ámbito global
void delete(int type){
if(TotalPedidos()>0){
for(i=TotalPedidos();i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(type!=6){
if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType()==type){
OrderDelete(OrderTicket());
}
}
if(type==6){
if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP
|| OrderType()==OP_BUYLIMIT || OrderType()==OP_SELLLIMIT){
OrderDelete(OrderTicket());
}
}
}
}
}
¿Podría alguien ayudar?
Gracias de antemano.
¡Hola compañeros comerciantes/codificadores!
Espero que alguien me pueda ayudar aquí.
Buscando y probando los pocos EA's que hay, todavía no he encontrado lo que busco.
Quizás estoy buscando algo que es difícil de encontrar o no me estoy esforzando mucho :-)
También opero con un sistema de SR dibujando mis líneas y creando canales temporales. ¿Hay algo que pueda ejecutar posiciones cuando el precio llegue a las líneas? La cosa es que tiene que ser capaz de abrir posiciones cada vez que el precio llegue a las líneas. Las líneas rojas para vender, las azules para comprar, las amarillas para el SL y las verdes para el TP. Así que no hay operaciones de una sola vez o OCO.
¡¡¡Gracias de antemano!!!
¡Hola compañeros traders/coders!
Espero que alguien me pueda ayudar.
Buscando y probando los pocos EA que hay, aún no he encontrado lo que busco.
Quizás estoy buscando algo que es difícil de encontrar o no me estoy esforzando mucho :-)
También opero con un sistema de SR dibujando mis líneas y creando canales temporales. ¿Hay algo que pueda ejecutar posiciones cuando el precio llegue a las líneas? La cosa es que tiene que ser capaz de abrir posiciones cada vez que el precio llegue a las líneas. Las líneas rojas para vender, las azules para comprar, las amarillas para el SL y las verdes para el TP. Así que no hay operaciones de una sola vez o OCO.
![](https://c.mql5.com/forextsd/forum/128/sr.png)
¡¡Gracias de antemano!!¿Revisaste el EA de este hilo : https://www.mql5.com/en/forum/176382?
Modificar el Stop Loss
Hola a todos,
¿Alguien sabe por qué mi orden de modificación del stop loss no funciona correctamente?
El stop loss oscila muy rápidamente entre el DonchianLowM5 y el OrderOpenPrice cuando el DonchianLowM5 se mueve por encima del OrderOpenPrice.
Este es el código (siento no saber pegarlo bien).
//--- Movimiento del stop loss
if (OrdersTotal() > 0)
{
for (int i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() = OP_BUY)
{
if (OrderStopLoss() < OrderOpenPrice())
{
si (DonchianLowM5 > OrderStopLoss())
{
OrderModify(OrderTicket(), OrderOpenPrice(), DonchianLowM5, OrderTakeProfit(), OrderExpiration(), Green);
}
}
if (OrderStopLoss() > OrderOpenPrice())
{
if (DonchianLowH4 <= OrderOpenPrice())
{
OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), Green);
}
}
if (OrderStopLoss() >= OrderOpenPrice())
{
si (DonchianLowH4 > OrderStopLoss())
{
OrderModify(OrderTicket(), OrderOpenPrice(), DonchianLowH4, OrderTakeProfit(), OrderExpiration(), Green);
}
}
}
Algunos lo que desconcertado.
El propósito del código es:
1. Modificar el stop loss para que siga el Canal de Donchian inferior en el gráfico M5 hasta el OrderOpenPrice. El stop loss no debe seguir el Canal de Donchian en el gráfico M5 más allá del OrderOpenPrice. Se mueve hasta el punto de equilibrio.
2. Algunas veces una vela grande cerrará más allá del OrderOpenPrice y por lo tanto la segunda sección del código es para traerlo de vuelta al punto de equilibrio solamente.
3. 3. El stop loss es para seguir el Donchian Low en el gráfico H4 una vez que el Donchian Channel en el gráfico H4 excede el OrderOpenPrice.
Los Canales Donchian están codificados de la siguiente manera:
DonchianLowM5 = iLow(NULL, TimingChart, iLowest(NULL, TimingChart, MODE_LOW, TimingDNCPeriod, TimingChartShift + 1));
DonchianHighM5 = iHigh(NULL, TimingChart, iHighest(NULL, TimingChart, MODE_HIGH, TimingDNCPeriod, TimingChartShift + 1));
He comprobado el diario y el stop loss se modifica EXACTAMENTE al OrderOpenPrice (no está por debajo, ni siquiera por una fracción de pip que haría que siguiera el Donchian Low en el gráfico M5.
¿Alguien sabe por qué está haciendo esto?
Hola a todos,
¿Alguien sabe por qué mi orden de stop loss modificada no funciona correctamente?
El stop loss oscila muy rápidamente entre el DonchianLowM5 y el OrderOpenPrice cuando el DonchianLowM5 se mueve por encima del OrderOpenPrice.
Este es el código (siento no saber pegarlo bien).
//--- Movimiento del stop loss
if (OrdersTotal() > 0)
{
for (int i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() = OP_BUY)
{
if (OrderStopLoss() < OrderOpenPrice())
{
si (DonchianLowM5 > OrderStopLoss())
{
OrderModify(OrderTicket(), OrderOpenPrice(), DonchianLowM5, OrderTakeProfit(), OrderExpiration(), Green);
}
}
if (OrderStopLoss() > OrderOpenPrice())
{
if (DonchianLowH4 <= OrderOpenPrice())
{
OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), Green);
}
}
if (OrderStopLoss() >= OrderOpenPrice())
{
si (DonchianLowH4 > OrderStopLoss())
{
OrderModify(OrderTicket(), OrderOpenPrice(), DonchianLowH4, OrderTakeProfit(), OrderExpiration(), Green);
}
}
}
Algunos lo que desconcertado.
El propósito del código es:
1. Modificar el stop loss para que siga el Canal de Donchian inferior en el gráfico M5 hasta el OrderOpenPrice. El stop loss no debe seguir el Canal de Donchian en el gráfico M5 más allá del OrderOpenPrice. Se mueve hasta el punto de equilibrio.
2. Algunas veces una vela grande cerrará más allá del OrderOpenPrice y por lo tanto la segunda sección del código es para traerlo de vuelta al punto de equilibrio solamente.
3. 3. El stop loss es para seguir el Donchian Low en el gráfico H4 una vez que el Donchian Channel en el gráfico H4 excede el OrderOpenPrice.
Los Canales Donchian están codificados de la siguiente manera:
DonchianLowM5 = iLow(NULL, TimingChart, iLowest(NULL, TimingChart, MODE_LOW, TimingDNCPeriod, TimingChartShift + 1));
DonchianHighM5 = iHigh(NULL, TimingChart, iHighest(NULL, TimingChart, MODE_HIGH, TimingDNCPeriod, TimingChartShift + 1));
He comprobado el diario y el stop loss se modifica EXACTAMENTE al OrderOpenPrice (no está por debajo, ni siquiera por una fracción de pip que haría que siguiera el Donchian Low en el gráfico M5.
¿Alguien sabe qué es lo que hace esto?Usted está utilizando DonchianLowM5 y DonchianLowH4 (estoy asumiendo que esos son valores diferentes). Eso podría causarle un problema
Hola Mladen,
Gracias por tu respuesta.
DonchianLowM5 y DonchianLowH4 son valores diferentes pero cada uno tiene su propio propósito. El DonchianLowM5 se utiliza para ajustar el SL para alcanzar el punto de equilibrio en las primeras etapas de una operación. El DonchianLowH4 ajusta el SL como un mecanismo de trailing stop. Esto sólo debería entrar en vigor una vez que el DonchianLowH4 supera el OrderOpenPrice.
He investigado un poco más esta cuestión y puede que haya encontrado el problema. Quería determinar si la función OrderModify estaba reposicionando el SL exactamente como OrderOpenPrice. Pero no es así. OrderOpenPrice en mi diario se indica que es 1.12224, precisión de 5 dígitos, y sin embargo la función Print abajo indica que OrderOpenPrice es sólo 4 dígitos. Así que el SL utilizará este dígito de 4 cifras, y no el de 5. Necesito que utilice los 5 dígitos.
¿Cómo puedo hacer que el ordermodify ajuste el SL a EXACTAMENTE el orderopenprice a 5 dígitos?
Este es mi código:
{
OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), Green);
Print("SL modificado al precio de apertura de la orden ", OrderOpenPrice());
}
He probado esto pero no funciona:
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice(), 5), OrderTakeProfit(), OrderExpiration(), Green);
Print("SL modificado al precio de apertura de la orden ", OrderOpenPrice());
Mi broker tiene 5 dígitos porque el diario confirma el precio al que abrió la orden en 1,12224.
Espero que mi explicación tenga sentido. ¿Alguna idea?
Hola Mladen,
Gracias por su respuesta.
DonchianLowM5 y DonchianLowH4 son valores diferentes pero cada uno tiene su propio propósito. El DonchianLowM5 se utiliza para ajustar el SL para alcanzar el punto de equilibrio en las primeras etapas de una operación. El DonchianLowH4 ajusta el SL como un mecanismo de trailing stop. Esto sólo debería entrar en vigor una vez que el DonchianLowH4 supera el OrderOpenPrice.
He investigado un poco más esta cuestión y puede que haya encontrado el problema. Quería determinar si la función OrderModify estaba reposicionando el SL exactamente como OrderOpenPrice. Pero no es así. OrderOpenPrice en mi diario se indica que es 1.12224, precisión de 5 dígitos, y sin embargo la función Print abajo indica que OrderOpenPrice es sólo 4 dígitos. Así que el SL utilizará este dígito de 4 cifras, y no el de 5. Necesito que utilice los 5 dígitos.
¿Cómo puedo hacer que el ordermodify ajuste el SL a EXACTAMENTE el orderopenprice a 5 dígitos?
Este es mi código:
{
OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), Green);
Print("SL modificado al precio de apertura de la orden ", OrderOpenPrice());
}
He probado esto pero no funciona:
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice(), 5), OrderTakeProfit(), OrderExpiration(), Green);
Print("SL modificado al precio de apertura de la orden ", OrderOpenPrice());
Mi broker tiene 5 dígitos porque el diario confirma el precio al que abrió la orden en 1,12224.
Espero que mi explicación tenga sentido. ¿Alguna idea?El hecho de que se imprima el precio con una precisión de 4 dígitos no es el problema: simplemente utilice este Print(DoubleToStr(OrderOpenPrice(),Digits)); y obtendrá una impresión correcta. Otra cosa es el problema y pensé que si estás comparando con dos precios completamente diferentes podría causarte esos problemas
Ah, sí.
¿Qué quieres decir? ¿Me he equivocado en la estructura del paréntesis?
Se supone que el código debe elegir el DonchianLowM5 o el DonchianLowH4 dependiendo de la situación.
Puede ser que mi paréntesis build up, build down esté mal para cada elemento del código.
Intenta simplificar el código. Algo como lo adjunto
PD: comprueba si esa es la lógica que tenías en mente
hola, aqui tengo dos indicadores, uno basado en el RSI y el otro en el indice de fuerza, pero el problema me pide curvas con aspecto de rsi, no me indica lo que quiero, si tienes la solucion, obviamente te puedo enviar el archivo si es necesario gracias por tu ayuda... disculpa por el ingles "google traductor"![](https://c.mql5.com/forextsd/forum/128/usdjpym30_rect_1_avec_force_index.png)
![](https://c.mql5.com/forextsd/forum/128/usdjpym30_avec_force_index.png)