[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 628
![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
Eso existe. Aquí está la solución.
Y la función de modificación está aquí:
Extraño Pero no hay paradas y tomas en la salida de nuevo.
OrderSelect(g_ticket,SELECT_BY_TICKET) antes de la línea if(OrderStopLoss() == 0 || OrderTakeProfit() == 0)
History, History_Draw - funcionan como Asesores Expertos durante las pruebas.
Se necesita algo como esto para ver las correcciones en el historial por parámetros dados
¿En la historia o en el gráfico? En caso afirmativo, ¿qué tipo de datos quiere ver en la ventana del gráfico, en una ventana aparte, impresos en forma de tabla, en forma de velas de diferentes colores, o como una línea que conecte el inicio y el final del movimiento?
OrderSelect(g_ticket,SELECT_BY_TICKET) antes de la línea if(OrderStopLoss() == 0 || OrderTakeProfit() == 0)
Eso es lo que hice:
No hay paradas ni tomas de posesión. El registro dice error 130, diciendo que las paradas son incorrectas. No veo la razón.
Eso es lo que hice:
No hay paradas ni tomas de posesión. El registro dice error 130, diciendo que las paradas son incorrectas. No veo la razón.
Sin ifs, simplementeOrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES);, y puedes dejarlo en OrdersModifying()
//+------------------------------------------------------------------+
void Modificación de pedidos()
{
OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES);
if(g_type == OP_BUY)
{
if(i_sl != 0)sl = NormalizeDouble(OrderOpenPrice() - i_sl*pt,Digits); // Si el parámetro de entrada del stop loss no es 0
// Obtener el valor del Stop Loss para la orden seleccionada
if(i_tp != 0)tp = NormalizeDouble(OrderOpenPrice() + i_tp*pt,Digits); // Si el parámetro de entrada TakeProfit no es igual a 0, entonces...
// obtener el valor de TakeProfit para la orden seleccionada
}
if(g_type == OP_SELL)
{
if(i_sl != 0)sl = NormalizeDouble(OrderOpenPrice() + i_sl*pt,Digits); // Si el parámetro de entrada del stop loss no es 0, entonces
// Obtener el valor del Stop Loss para la orden seleccionada
if(i_tp != 0)tp = NormalizeDouble(OrderOpenPrice() - i_tp*pt,Digits); // Si el parámetro de entrada TakeProfit no es igual a 0, entonces...
// obtener el valor de TakeProfit para la orden seleccionada
}
if(sl != 0 || tp != 0) // Si los valores obtenidos de sl y tp no son iguales a 0, entonces..
{
OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400,Lime); // Modificar orden
}
}
Problema con Symbol() MT4:
2 funciones para ilustrar:
La ejecución de la primera da como resultado una cadena vacía:
Pero la segunda función da salida a una cadena ID "EURUSD" (bueno, depende del gráfico, pero da salida, aunque según la lógica de la función debería ser una cadena vacía):
Ayúdame a entender qué es lo que está mal? Gracias
No puede utilizar nombres reservados(valor) al declarar sus variables, llame a _valor
Eso es lo que hice:
No hay paradas ni tomas de posesión. El registro dice error 130, diciendo que las paradas son incorrectas. No veo la razón.
¡Y no lo harán!
Vitaly, he hecho lo que me has dicho, pero no ha cambiado nada. Al parecer, el error está enterrado en otra parte.
Antes tenía todo (órdenes de apertura - modificación y transferencia a b.w. cuando se alcanza el nivel de precio establecido) y todo funcionaba. Fue así:
Ahora, como he desglosado todo en funciones específicas especializadas, todo ha dejado de funcionar taaaan bien. Lo he probado de las dos maneras, nada funciona. Los topes no están puestos.
¡Y no lo harán!
¿Dónde está la lógica en eso? Me gustaría entender... Esta es la función:
Si las variables de entrada i_sl e i_tp no son iguales a cero, obtenemos los precios de parada y toma que ya estarán en la orden - sl ytp. Después comprobaré si hemos calculadosl ytp aquí (si es para cortos):
Si se obtienen los valores, entonces no pueden ser cero... ¡porque se modificarán! Son variables que obtenemos secuencialmente por contexto de código.
Y aquí, he comprobado si encontramos los valores de parada y toma. ¿Cómo pueden ser cero después de todas las condiciones?
Primero construye tu lógica al principio, luego haz funciones, archivos, etc.
¿Por qué rascarse la mano izquierda detrás de la oreja derecha?
Mi función comienza con una declaración de parámetros, ¡véase la de Kim!