![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
Vangrosh
gracias por el aporte
me puedes ayudar a entender
es esto correcto
hago un EA con auto trail
if(OrderType()==OP_SELL && OrderSymbol()==Symbol())
{si (OrderStopLoss()==0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); // colocar un TP y un SL
}
if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) // coloca un TP
{
if(OrderStopLoss()>(Ask+Point*TrailingStop)+Point) // comprobar verdadero
{
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red)) // si es verdad modifica la orden
Print("Error_Modificar - ",GetLastError());
else str=StringConcatenate("\NMi número de entrada es ", OrderTicket(), " y mi configuración de stop loss es ", DoubleToStr(Ask+Point*TrailingStop,Digits)); // nuevo código
}
}
}
Aquí está lo que escribí en otro post, explicando el enfoque diferente.
>>Aquí hay una solución fácil simplemente comprobando que el nuevo precio de stoploss es al menos 1 punto o mayor que el antiguo stoploss. Sólo hay que hacer lo contrario para una orden de venta.
Aquí está la función completa que utilizo. Ahora que lo pienso podría haber utilizado un nombre var mejor que nextStopLoss, y también debería añadir la comprobación de errores a la OrderModify().
También mi función Trailing Stop está en un EA que puede tener múltiples órdenes abiertas al mismo tiempo, es por eso que tiene esos parámetros para que pueda actualizar el Trailing Stop en múltiples órdenes al mismo tiempo.
Entonces en mi función start() tengo:
Dejé las otras llamadas de función allí sólo para que puedas ver que me gusta dividir mi código en funciones específicas tanto como sea posible. Hace las cosas mucho más fáciles.
Buena suerte con tu EA.
Aquí está lo que escribí en otro post, explicando el enfoque diferente.
>>Aquí hay una solución fácil simplemente comprobando que el nuevo precio de stoploss es al menos 1 punto o mayor que el antiguo stoploss. Sólo hay que hacer lo contrario para una orden de venta.
Aquí está la función completa que utilizo. Ahora que lo pienso podría haber utilizado un nombre var mejor que nextStopLoss, y también debería añadir la comprobación de errores a la OrderModify().
También mi función Trailing Stop está en un EA que puede tener múltiples órdenes abiertas al mismo tiempo, es por eso que tiene esos parámetros para que pueda actualizar el Trailing Stop en múltiples órdenes al mismo tiempo.
Entonces en mi función start() tengo:
Dejé las otras llamadas de función allí sólo para que puedas ver que me gusta dividir mi código en funciones específicas tanto como sea posible. Hace las cosas mucho más fáciles.
Buena suerte con su EA.
gracias - se ve bien
así que coloca su función start() en la parte inferior de la ea
Yo también tengo un problema con el terrible error. La cosa es que no tengo stop loss ni take profit, simplemente falla al colocar la orden pendiente, a muchos pips del mercado donde no debería haber problema...
El problema con el good'ole 130 es que indica (uno de) una clase o grupo de errores y no lo lleva a uno a ninguna solución instantánea..
Usted puede incluso arreglar un problema y su todavía allí
¿Lo único que ocurre aquí es un error tipográfico?
¿Quizá está introduciendo una orden Buy Limit por encima de Ask, cuando lo que pretendía era una orden Buy Stop?
FWIW
-BB-
El problema con el buen 'ole 130 es que indica (uno de) una clase o grupo de errores y no lo lleva a uno a cualquier solución instantánea..
Usted puede incluso arreglar un problema y su todavía allí
¿Lo único que ocurre aquí es un error tipográfico?
¿Quizá está introduciendo una orden Buy Limit por encima de Ask, cuando lo que pretendía era una orden Buy Stop?
FWIW
-BB-
Tengo una función que selecciona el tipo de operación:
así:
09:28:46 2008.06.09 00:00 ForexCraft2 EURGBP,Diario: Apertura de venta en el nivel 2 para el pilón 0 @ 0.8024 mientras que la oferta = 0.8016
09:28:46 2008.06.09 00:00 ForexCraft2 EURGBP,Diario: OrderSend error 130
09:28:46 2008.06.09 00:00 ForexCraft2 EURGBP,Diario: ReliableOrderSend error : 130 : Invalid stops.
Hola TheEconomist
sólo algunas cosas rápidas...
1. No veo ninguna normalización en ToCompare, a no ser que se garantice que WhatOperation() tiene normalización real dada.
2. 2. Las comparaciones dobles tienen problemas - por ejemplo, 'Fallo de declaración condicional... [Al final] si ( 1.4225 > 1.4225) no es TRUE!!!!!!'
3. ¿Sigues las indicaciones de https://book.mql4.com/appendix/limits?
Saludos
He estado estudiando este post con la esperanza de resolver mi error en 'Quick Question ' con 130. La función de envío de pedidos está ahí, así como los asientos con la función de impresión, ¿alguno de vosotros sabe lo que está pasando?
Gracias,
Bauer Boy
.
como se ve en .../24681
1. StopLevel= MarketInfo(Symbol(),MODE_STOPLEVEL);
SL,TP deben estar al menos a puntos de StopLevel de Bid
Ver abajo (**)
2. ACCTxx = NormalizeDouble(Ask ..(..), Digits);
3. Print("Oferta=",DoubleToString(Oferta, Dígitos),", Oferta=",DoubleToString(Oferta,Dígitos));
4. Print ("Stop Loss Value",DoubleToString( ACCTSL, Digits),", stopLoss=",stopLoss);
5. Print ("Take Profit Value", DoubleToString(ACCTTP, Digits),", takeProfit=",takeProfit);
¿Por qué DoubleToString()? Print() solo muestra CUATRO DIGITOS
Porcierto, yo también pondría en algún sitio al menos una vez Print("MyDig=",MyDig); ¿Por qué? Puede parecer una nimiedad, pero se sorprendería de las diversiones que rodean a cosas tan simples.
5. TODOS sus problemas pueden ser fácilmente resueltos al tener toda la información disponible a su alcance y mostrarla.
Luego, con papel + lápiz a la vieja usanza se puede ver dónde están los malentendidos.
(**)
Referencia: https://book.mql4.com/appendix/limits
Limitación de la distancia mínima del StopLevel.
No se realizará una operación de trading si se interrumpe alguna de las siguientes condiciones.
.
como se ve en .../24681
1. StopLevel= MarketInfo(Symbol(),MODE_STOPLEVEL);
SL,TP deben estar al menos a puntos de StopLevel de Bid
Ver abajo (**)
2. ACCTxx = NormalizeDouble(Ask ..(..), Digits);
3. Print("Oferta=",DoubleToString(Oferta, Dígitos),", Oferta=",DoubleToString(Oferta,Dígitos));
4. Print ("Stop Loss Value",DoubleToString( ACCTSL, Digits),", stopLoss=",stopLoss);
5. Print ("Take Profit Value", DoubleToString(ACCTTP, Digits),", takeProfit=",takeProfit);
¿Por qué DoubleToString()? Print() solo muestra CUATRO DIGITOS
Porcierto, yo también pondría en algún sitio al menos una vez Print("MyDig=",MyDig); ¿Por qué? Puede parecer una nimiedad, pero te sorprendería la gracia que rodea a cosas tan sencillas.
5. TODOS sus problemas pueden ser fácilmente resueltos al tener toda la información disponible a su alcance y mostrarla.
Luego, con papel + lápiz a la vieja usanza se puede ver dónde están los malentendidos.
(**)
Referencia: https://book.mql4.com/appendix/limits
Limitación de la distancia mínima del StopLevel.
No se realizará una operación de trading si se interrumpe alguna de las siguientes condiciones.
Realmente no puedo decir lo que está pasando y por qué está sucediendo esto
2009.08.05 14:32:26 Trender Beta Test EURUSD,H1: OrderSend (Trender Beta Test ) failed with error #130
2009.08.05 14:32:26 Trender Beta Test EURUSD,H1: MyDig=10
2009.08.05 14:32:26 Trender Beta Test EURUSD,H1: Take Profit Value1.43155, takeProfit=110
2009.08.05 14:32:26 Trender Beta Test EURUSD,H1: Stop Loss Value1.42255, stopLoss=200
2009.08.05 14:32:26 Trender Beta Test EURUSD,H1: Bid=1.44255, Ask=1.44229
Realmente no puedo decir lo que está pasando y por qué está sucediendo esto
Realmente es el momento de mostrar todo el código. Si usted duda, puede utilizar PM.
Veo que tienes TP más bajo entonces Bid