Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 404
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
Empecé a escribir un wrapper para las funciones de apertura y modificación de pedidos (pensé que solucionaría mis problemas con la devolución de valores de estos operadores) pero existe el mismo problema.
Explicar cuál es el problema (no importa lo que escriba, siempre hay un problema con la devolución de valores de OrderSend, OrderSelex y ModifyOrder)
Código de envoltura .
int inicio()
{
si (señal == 1)
{
OrderSendX(Symbol(),OP_BUY,0.1,Ask,0,500,500,"123",123,0,Red);
}
return(0);
}
//-----------------------------------------------
int OrderSendX (string symbol,int cmd, double volume,double price,int slippage,double stoploss,double takeprofit,string comment,
int magic,datetime expiration,color arrow_color)
{
int err=GetLastError();
err = 0;
bool exit_loop = false;
int ticket = -1;
int Reintento = 10;
int cnt = 0;
if(cmd == OP_BUY || cmd = OP_SELL) //comprobar el tipo de orden a abrir
{
while(!exit_loop)
{
ticket = OrderSend(symbol,cmd,volume,price,slippage,stoploss,takeprofit,comment,magic,expiration,arrow_color);
err = GetLastError();
switch(err)
{
caso ERR_NO_ERROR:
exit_loop = true;
romper;
{ caso ERR_SERVER_BUSY:
caso ERR_NO_CONNECTION:
caso ERR_INVALID_PRICE:
caso ERR_BROKER_BUSY:
caso ERR_TRADE_CONTEXT_BUSY:
cnt++;
romper;
caso ERR_PRICE_CHANGED:
caso ERR_OFF_QUOTES:
caso ERR_REQUOTE:
RefreshRates();
continuar;
por defecto:
exit_loop = true;
romper;
}
if(cnt>Retry)
exit_loop = true;
if(!exit_loop)
{
Sleep(1000);
RefreshRates();
}
si no
{
if(err !=ERR_NO_ERROR)
{
Print("Error : " + err);
}
}
if(err ==ERR_NO_ERROR)
{
OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
return(ticket);
}
Print("Error al abrir la orden después de" + cnt + "intentos");
return(-1);
}
}
}
Empecé a escribir un wrapper para las funciones de apertura y modificación de pedidos (pensé que solucionaría mis problemas con la devolución de valores de estos operadores) pero existe el mismo problema.
Explícame cuál es el problema (no importa lo que haya escrito, siempre tengo problemas con la devolución de valores de OrderSend, OrderSelex y ModifyOrder)
https://docs.mql4.com/ru/trading/ordermodify
OrderModify() devuelve sí , no
Nadie puede explicarlo.
Intentemos otro ejemplo en lugar de copiarme la ayuda 100 veces.
¿Cómo se debe corregir? Utilizaré un ejemplo para entender las correcciones
{
SL=NormalizeDouble(Bid-TrailingStop*Point,Digits);
if(OrderStopLoss()!=SL)
OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0);
}
no insertar
"""ticket"""= OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0); cada vez es correcto?
Y gracias a todos los que han tratado de explicar .
Lamentablemente no entiendo cómo designar una variable a una variable predefinida como función.
Y gracias a todos los que han tratado de explicar .
Lamentablemente no entiendo cómo designar una variable a una variable predefinida como función.
QueridoLeanid. Aprende a leer la ayuda y a trabajar con errores y advertencias. Si no aprendes a hacerlo, ni siquiera programarás bien. Esto es lo básico. ¿Ha intentado traducir lo que está escrito en las advertencias? ¿Comprende el significado de las funciones que "hay que comprobar"? La ayuda describe un ejemplo correcto de manejo de estas funciones. Por ejemplo, OrderModify(). Mira la ayuda:
Valor de retorno
Devuelve true si la función se completa con éxito o false en caso de error. Para obtener información sobreel error, es necesario llamar a la funciónGetLastError().
y luego sigue un ejemplo:
Como puede ver, el valor de retorno de la función se maneja en el operador if-else. La variable res es necesaria "para la belleza" por una razón. Es el resultado de la ejecución de una función comercial. La función de la que depende su dinero En consecuencia, para procesar correctamente todas las posibles variantes (el procesamiento en este ejemplo no se proporciona), necesitamos la variable res y el código de error devuelto por la función GetLastError(). Los desarrolladores incluyeron intencionadamente advertencias como recordatorio de que hay funciones "importantes" a las que hay que prestar atención para procesar los valores! También hay que tener en cuenta que si el valor no se comprueba no habrá ningún error! Es decir, en este caso, la función funcionará tal cual, pero si se produce una situación anormal, no se procesará. La lista de situaciones no estándar son códigos de retorno de la función GetLastError().
Espero que quede más claro de esta manera.
Empecé a escribir un wrapper para las funciones de apertura y modificación de órdenes (pensé que solucionaría mi problema con la devolución de valores de estos operadores) pero hay el mismo problema.
Y en este caso no necesitamos escribir un wrapper. No resolverá el problema de la advertencia sobre la comprobación del valor de retorno. Echa un vistazo a los ejemplos de estas funciones y haz lo mismo.
Como se indica en la referencia da un error.
Lo escribí así y está bien
if(OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0))
{
Print("La modificación fue exitosa");
}
else Print("Error al modificar la orden.");
Insertar código correctamente en los mensajes:Insertar código correctamente en el foro
¿Por qué no funciona la pesca de arrastre para vender? ¡Funciona para comprar!
No hay errores ni advertencias, en la compilación genética.
Aquí está el código: