Intento actualizar la versión de EA y me da un error.
El mismo EA está en el probador de estrategias.
También estoy escribiendo EAs para MT4 al mismo tiempo, todo está bien allí. El código para los EAs 4 y 5 es el mismo, la única diferencia es el archivo de inclusión (son diferentes para 4 y 5).
La última vez que actualicé este EA, fue en enero y todo estaba bien.
Versión del software - MetaTrader 5 x64 build 2025 started (MetaQuotes Software Corp.)
- Terminal Windows 10 (build 14393) x64, IE 11, UAC, Intel Celeron N2815 @ 1.86GHz, Memoria: 1866 / 3967 Mb, Disco: 5 / 35 Gb, GMT+3
Pretende ser un idiota y poner un depósito de 1$ o un lote de 100500 y ver si habrá alguna operación. Y habrá alertas que sólo un idiota establecería tales parámetros.
Finge que eres un idiota y pon un depósito de 1$ o lote 100500 y comprueba si habrá operaciones. Y si habrá alertas que sólo un idiota puede establecer tales parámetros.
El mismo problema. Lo he probado, pero no sirve de nada.) No puedo actualizar desde el 13 de abril. Si compruebo todo y todo - sólo obtengo una inscripción en todos los símbolos "trehe are no trading operations". Si no lo compruebo todo, me da un error: no hay suficiente capital para abrir la posición. La versión para MT4, así como para el autor del TS se actualiza sin problemas.
Vería en la imagen que el lote mínimo es de 2000, el saldo es de 10000 y claramente no hay suficiente dinero para abrir la posición. De todos modos, no paso el control.
¿Qué hacer en estos casos?
Por supuesto que no habrá acuerdos. ¿Y qué se supone que son las alertas? Sólo tengo en OnInit si el tamaño del lote no está en el rango SYMBOL_VOLUME_MIN y SYMBOL_VOLUME_MAX, entonces error de inicialización INIT_PARAMETERS_INCORRECT
Por supuesto que no habrá acuerdos. ¿Y qué se supone que son las alertas? Sólo tengo en OnInit si el tamaño del lote no está en el rango SYMBOL_VOLUME_MIN y SYMBOL_VOLUME_MAX, entonces error de inicialización INIT_PARAMETERS_INCORRECT
Recuerdo que en su día me pasó lo mismo con los moderadores revisando después de la autocomprobación. En caso de parámetros incorrectos, OnInit también termina con el código INIT_PARAMETERS_INCORRECT. Y el auto-check dio el mismo error de que no había ninguna operación comercial. Entonces, el moderador me aconsejó no terminar OnInit() con este código, sino emitir una Alerta.
Probablemente una vez al mes, alguien saca el tema. Lleva ya un tiempo en marcha.
La cuestión es que al operar (en la vida real) no sólo puede cambiar el tamaño del saldo, sino también el tamaño del lote.
Y durante las pruebas puede variar el tamaño del depósito (de 1 a 10000000) o del lote (de 1000000 a 0,01).
Por lo tanto, estas comprobaciones deben realizarse no sólo una vez en OnInit, sino permanentemente, en el bucle (por ejemplo, en OnTick).
Para evitar el desbordamiento del registro, es necesario emitir la advertencia(Imprimir mensaje o Alerta) sólo una vez.
Por supuesto que no habrá acuerdos. ¿Y qué se supone que son las alertas? Sólo tengo en OnInit si el tamaño del lote no está en el rango SYMBOL_VOLUME_MIN y SYMBOL_VOLUME_MAX, entonces error de inicialización INIT_PARAMETERS_INCORRECT
Entiendo que es muy difícil fingir ser un idiota, pero esta habilidad a veces ayuda. Inténtalo de nuevo. Usted establece un EA, con $1 en su cuenta, establece un lote de 100500 y espera... Esperas un día, un segundo, un tercero... entonces empiezas a resentirte, "Para qué he pagado. ¿Por qué no funciona esta mierda?" y nadie dice nada, nadie quiere decir algo como "Eres un idiota... No se puede trabajar en el mercado de divisas con un depósito así. Sólo un idiota pondría un lote 100500"... Así es.
Probablemente una vez al mes, alguien saca el tema. Lleva ya un tiempo en marcha.
La cuestión es que al operar (en la vida real) no sólo puede cambiar el tamaño del saldo, sino también el tamaño del lote.
Y durante las pruebas puede variar el tamaño del depósito (de 1 a 10000000) o del lote (de 1000000 a 0,01).
Por lo tanto, estas comprobaciones deben realizarse no sólo una vez en OnInit, sino permanentemente, en el bucle (por ejemplo, en OnTick).
La advertencia (Mensaje de impresión o Alerta) debe imprimirse sólo una vez para evitar el desbordamiento del registro.
Incluso un código muy simple no puede pasar la validación. Parece que cumple las condiciones que mencionas.
void OnTick() { ENUM_POSITION_TYPE PosType=POSITION_TYPE_SELL; MqlTradeRequest request; MqlTradeResult result; MqlTradeCheckResult check; ZeroMemory(request); ZeroMemory(result); ZeroMemory(check); long digit; double point,Bid; SymbolInfoDouble(_Symbol,SYMBOL_BID,Bid); request.type = ORDER_TYPE_SELL; request.price = Bid; request.action = TRADE_ACTION_DEAL; request.symbol = _Symbol; request.volume = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN); request.sl=0; request.tp=0; request.deviation=10; request.magic=55555; request.comment=NULL; request.type_filling=0; if(PositionsTotal()==0 &&CheckMoneyForTrade(_Symbol,SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN),ORDER_TYPE_SELL)==true ){ OrderSend(request,result); }else{ ExtExpert.Deinit(); return; } } bool CheckMoneyForTrade(string symb,double lots,ENUM_ORDER_TYPE type) { //--- получим цену открытия MqlTick mqltick; SymbolInfoTick(symb,mqltick); double price=mqltick.ask; if(type==ORDER_TYPE_SELL) price=mqltick.bid; //--- значения необходимой и свободной маржи double margin,free_margin=AccountInfoDouble(ACCOUNT_MARGIN_FREE); //--- вызовем функцию проверки if(!OrderCalcMargin(type,symb,lots,price,margin)) { //--- что-то пошло не так, сообщим и вернем false Print("Error in ",__FUNCTION__," code=",GetLastError()); return(false); } //--- если не хватает средств на проведение операции if(margin>free_margin) { //--- сообщим об ошибке и вернем false Print("Not enough money for ",EnumToString(type)," ",lots," ",symb," Error code=",GetLastError()); return(false); } //--- проверка прошла успешно return(true); }con cheque de dinero - no hay operaciones comerciales, sin cheque - no hay suficiente dinero
Probablemente una vez al mes, alguien saca el tema. Lleva ya un tiempo en marcha.
La cuestión es que al operar (en la vida real) no sólo puede cambiar el tamaño del saldo, sino también el tamaño del lote.
Y durante las pruebas puede variar el tamaño del depósito (de 1 a 10000000) o del lote (de 1000000 a 0,01).
Por lo tanto, estas comprobaciones deben realizarse no sólo una vez en OnInit, sino permanentemente, en el bucle (por ejemplo, en OnTick).
La advertencia (Mensaje de impresión o Alerta) debe emitirse sólo una vez para evitar el desbordamiento del registro.
Estas comprobaciones (LotMin, LotMax, LotNormalizeStep, check balance, OrderCheck) se realizan cada vez que se abre una posición. Y la comprobación del lote sólo en OnInit. No conozco la lógica de la comprobación del saldo en OnInit.
PD: La alerta no me salva de los errores del validador ((((((((((
Estas comprobaciones (LotMin, LotMax, LotNormalizeStep, check balance, OrderCheck) se realizan cada vez que se abre una posición. Y onInit sólo comprueba el lote. No conozco la lógica de la comprobación del saldo en OnInit.
PD: La alerta no salva de los errores del validador ((((((((((
El validador no tiene errores :)
El validador sólo muestra que en el código proporcionado
- no hay controles completos
- no hay manejo de errores
El validador no tiene errores :)
El validador sólo muestra que el código proporcionado
- no hay controles completos
- No hay tratamiento de errores
))
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Intento actualizar la versión de EA y me da un error.
El mismo EA está en el probador de estrategias.
También estoy escribiendo EAs para MT4 al mismo tiempo, todo está bien allí. El código para los EAs 4 y 5 es el mismo, la única diferencia es el archivo de inclusión (son diferentes para 4 y 5).
La última vez que actualicé este EA, fue en enero y todo estaba bien.
Versión del software - MetaTrader 5 x64 build 2025 started (MetaQuotes Software Corp.)
- Terminal Windows 10 (build 14393) x64, IE 11, UAC, Intel Celeron N2815 @ 1.86GHz, Memoria: 1866 / 3967 Mb, Disco: 5 / 35 Gb, GMT+3