Si el Asesor Experto ha pasado las pruebas en el terminal y abre operaciones, luego en la comprobación automática escribe un error que no se han abierto operaciones (par y TF son iguales), respectivamente no pasa la "Comprobación automática"
¿Es posible que MetaQuotes genere una plantilla para los desarrolladores? Facilitaría las cosas a los desarrolladores y también ahorraría a MetaQuotes toneladas de dinero y recursos en la comprobación de los EAs enviados.
Tener la plantilla para el desarrollador en la base de código
Es un artículo interesante, desgraciadamente hay demasiados errores (errores tipográficos o incluso errores lógicos en el código propuesto), y probablemente confundirá más a la gente que ayudarles en algunos puntos.
1°
1°
//+------------------------------------------------------------------+//| Devuelve el volumen máximo permitido para una orden sobre el símbolo ||//+------------------------------------------------------------------+double NewOrderAllowedVolume(string symbol)
{
double allowed_volume=0;
//--- obtener la limitación del volumen máximo de una ordendouble symbol_max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
//--- obtener la limitación del volumen por un símbolodouble max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT);
//--- obtener el volumen de la posición abierta por un símbolodouble opened_volume=PositionVolume(symbol);
if(opened_volume>=0) There is no opened positions
{
//--- si hemos agotado el volumenif(max_volume-opened_volume<=0)
return(0);
//--- el volumen de la posición abierta no supera max_volumedoubleorders_volume_on_symbol=PendingsVolume(symbol);
allowed_volume=max_volume-opened_volume-orders_volume_on_symbol;if(allowed_volume>symbol_max_volume) allowed_volume=symbol_max_volume;
}
return(allowed_volume);
}
Error logico. Si todavía no hay posición, hay que comprobar el volumen pendiente y calcular el volumen permitido. Este codigo devuelve allowed_volume=0 si no hay ninguna posicion ya abierta sin tener en cuenta los pendings.
+ parámetro que falta (PrintFormat tiene para %, pero sólo se proporcionan 3 parámetros).
Gracias. Fijo
bool OrderModifyCheck(ulong ticket,double price,double sl,double tp)
{
//--- seleccionar orden por ticketif(orderinfo.Select(ticket))
{
//--- tamaño del punto y nombre del símbolo, para el que se colocó una orden pendientestring symbol=orderinfo.Symbol();
double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);
//--- comprobar si hay cambios en el precio de aperturabool PriceOpenChanged=(MathAbs(orderinfo.PriceOpen()-price)>point);
//--- comprobar si hay cambios en el nivel de StopLossbool StopLossChanged=(MathAbs(orderinfo.StopLoss()-sl)>point);
//--- comprobar si hay cambios en el nivel de Takeprofitbool TakeProfitChanged=(MathAbs(orderinfo.TakeProfit()-sl)>tp);
//--- si hay cambios en los nivelesif(PriceOpenChanged || StopLossChanged || TakeProfitChanged)
return(true); // el orden puede modificarse //--- no hay cambios en los niveles Open, StopLoss y Takeprofitelse//--- notificar sobre el errorPrintFormat("Order #%d already has levels of Open=%.5f SL=%.5f TP=%.5f",
ticket,orderinfo.PriceOpen(),orderinfo.StopLoss(),orderinfo.TakeProfit());
}
//--- llegó al final, no hay cambios para la ordenreturn(false); // no tiene sentido modificar
}
bool OrderModifyCheck(ulong ticket,double price,double sl,double tp)
{
//--- seleccionar orden por ticketif(orderinfo.Select(ticket))
{
//--- tamaño del punto y nombre del símbolo, para el que se colocó una orden pendientestring symbol=orderinfo.Symbol();
double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);
//--- comprobar si hay cambios en el precio de aperturabool PriceOpenChanged=(MathAbs(orderinfo.PriceOpen()-price)>point);
//--- comprobar si hay cambios en el nivel de StopLossbool StopLossChanged=(MathAbs(orderinfo.StopLoss()-sl)>point);
Otro error lógico. Cambiar un SL/TP en 1 punto está permitido. Debería ser >=
Por lo que recuerdo, utilizamos esta práctica sólo con el fin de no obtener la denegación de comercio sercver debido a que el precio cambia por el momento, mientras que nuestra solicitud de comercio llega al servidor.
bool OrderModifyCheck(ulong ticket,double price,double sl,double tp)
{
//--- seleccionar orden por ticketif(orderinfo.Select(ticket))
{
//--- tamaño del punto y nombre del símbolo, para el que se colocó una orden pendientestring symbol=orderinfo.Symbol();
double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);
//--- comprobar si hay cambios en el precio de aperturabool PriceOpenChanged=(MathAbs(orderinfo.PriceOpen()-price)>point);
//--- comprobar si hay cambios en el nivel de StopLossbool StopLossChanged=(MathAbs(orderinfo.StopLoss()-sl)>point);
//--- comprobar si hay cambios en el nivel de Takeprofitbool TakeProfitChanged=(MathAbs(orderinfo.TakeProfit()-sl)>tp);
//--- si hay cambios en los nivelesif(PriceOpenChanged || StopLossChanged || TakeProfitChanged)
me refiero a hacerlo como un panel? y comprobarlo de esa manera? o como?
solo abro cualquier operación manualmente por el momento y este EA se adjunta al gráfico a la entrada de la orden abierta.
ok
Si TÚ mismo has escrito la utilidad, puedes abrir una operación en el probador en INIT y el asistente la gestionará.
Si el Asesor Experto ha pasado las pruebas en el terminal y abre operaciones, luego en la comprobación automática escribe un error que no se han abierto operaciones (par y TF son iguales), respectivamente no pasa la "Comprobación automática"
¿Coincidencia? No lo creo.
¿Que hacer?
¿Es posible que MetaQuotes genere una plantilla para los desarrolladores? Facilitaría las cosas a los desarrolladores y también ahorraría a MetaQuotes toneladas de dinero y recursos en la comprobación de los EAs enviados.
Tener la plantilla para el desarrollador en la base de código
https://www.mql5.com/es/code/mt4/experts/best
Es un artículo interesante, desgraciadamente hay demasiados errores (errores tipográficos o incluso errores lógicos en el código propuesto), y probablemente confundirá más a la gente que ayudarles en algunos puntos.
1°
1°
Error logico. Si todavía no hay posición, hay que comprobar el volumen pendiente y calcular el volumen permitido. Este codigo devuelve allowed_volume=0 si no hay ninguna posicion ya abierta sin tener en cuenta los pendings.
2°
+ parámetro que falta (PrintFormat tiene para %, pero sólo se proporcionan 3 parámetros).
Gracias. Fijo
3°
Error similar al del punto 2° anterior.
Y los mismos errores también en OrderModifyCheck() versión mql4.
Todo arreglado, ¡gracias!
2°
Otro error lógico. Cambiar un SL/TP en 1 punto está permitido. Debería ser >=
Por lo que recuerdo, utilizamos esta práctica sólo con el fin de no obtener la denegación de comercio sercver debido a que el precio cambia por el momento, mientras que nuestra solicitud de comercio llega al servidor.
Es un enfoque más seguro.
2°
+ error tipográfico, debería ser "-tp)>=punto);"
//--