Eu tento atualizar a versão EA e recebo um erro.
O mesmo EA está no testador de estratégia.
Também estou escrevendo EAs para o MT4 ao mesmo tempo, tudo está bem aí. O código para 4 e 5 EAs é o mesmo, a única diferença é incluir o arquivo (eles são diferentes para 4 e 5).
A última vez que atualizei este EA, foi em janeiro e tudo estava bem.
Versão do software - MetaTrader 5 x64 build 2025 iniciado (MetaQuotes Software Corp.)
- Terminal Windows 10 (build 14393) x64, IE 11, UAC, Intel Celeron N2815 @ 1.86GHz, Memória: 1866 / 3967 Mb, Disco: 5 / 35 Gb, GMT+3
Finja ser um idiota e coloque em um depósito de $1 ou em um lote de 100500 dólares e veja se haverá alguma negociação. E haverá alertas de que somente um idiota definiria tais parâmetros.
Finja que você é um idiota e coloque um depósito de 1$ ou lote 100500 e verifique se haverá negociações. E se haverá alertas de que somente um idiota pode definir tais parâmetros.
O mesmo problema. Experimentei-o - não ajuda ). Não pode ser atualizado desde 13 de abril. Se eu verificar tudo e tudo - eu recebo apenas uma inscrição em todos os símbolos "trehe are no trading operations". Se eu não verificar tudo, recebo um erro - não tenho capital suficiente para abrir a posição. A versão para o MT4, bem como para o autor TS foi atualizada sem problemas.
Eu veria na figura que o lote mínimo é 2000, o saldo é 10.000 e claramente não há dinheiro suficiente para abrir a posição. Eu não passo o cheque de qualquer maneira.
O que fazer em tais casos?
É claro que não haverá acordos. E quais são os alertas supostamente? Só tenho no OnInit se o tamanho do lote não estiver no intervalo SYMBOL_VOLUME_MIN e SYMBOL_VOLUME_MAX, então erro de inicialização INIT_PARAMETERS_INCORRECT
É claro que não haverá acordos. E quais são os alertas supostamente? Só tenho no OnInit se o tamanho do lote não estiver no intervalo SYMBOL_VOLUME_MIN e SYMBOL_VOLUME_MAX, então erro de inicialização INIT_PARAMETERS_INCORRECT
Lembro-me que na época eu tinha mais ou menos a mesma coisa com os moderadores verificando após a auto-verificação. Em caso de parâmetros incorretos, o OnInit também terminou com o código INIT_PARAMETERS_INCORRECT. E a auto-verificação gerou o mesmo erro que não houve operação comercial. Portanto, o moderador me aconselhou a não terminar o OnInit() com este código, mas a emitir um Alerta.
Provavelmente, uma vez por mês, alguém o traz à tona. Isso já vem acontecendo há algum tempo.
O problema é que quando a negociação (na vida real) não só o tamanho do saldo pode mudar, mas também o tamanho do lote.
E durante os testes o tamanho do depósito (de 1 a 10000000) ou do lote (de 1000000 a 0,01) pode variar.
Portanto, estas verificações devem ser realizadas não apenas uma vez no OnInit, mas permanentemente, no loop (por exemplo, no OnTick).
Para evitar o transbordo de registros, é necessário emitir o aviso( Mensagemimpressa ou Alerta) apenas uma vez.
É claro que não haverá acordos. E quais são os alertas supostamente? Só tenho no OnInit se o tamanho do lote não estiver no intervalo SYMBOL_VOLUME_MIN e SYMBOL_VOLUME_MAX, então erro de inicialização INIT_PARAMETERS_INCORRECT
Entendo que é muito difícil fingir ser um idiota, mas esta habilidade às vezes ajuda. Tente novamente. Você definiu o Expert Advisor, sua conta tem $1, você definiu o lote 100500 e você espera. Você espera um dia, um segundo, um terceiro... então você começa a se ressentir: "O que eu paguei por isso? Por que esta merda não está funcionando?" e ninguém diz nada, ninguém quer dizer algo como "Você é um idiota... Você não pode trabalhar no mercado Forex com tal depósito. Só um idiota colocaria um lote de 100500"... É assim que as coisas são.
Provavelmente, uma vez por mês, alguém o traz à tona. Isso já vem acontecendo há algum tempo.
O problema é que quando a negociação (na vida real) não só o tamanho do saldo pode mudar, mas também o tamanho do lote.
E durante os testes o tamanho do depósito (de 1 a 10000000) ou do lote (de 1000000 a 0,01) pode variar.
Portanto, estas verificações devem ser realizadas não apenas uma vez no OnInit, mas permanentemente, no loop (por exemplo, no OnTick).
O aviso (Mensagem impressa ou Alerta) deve ser impresso apenas uma vez para evitar o transbordo de registros.
Mesmo um código muito simples não pode passar na validação. Parece satisfazer as condições que você menciona.
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); }com cheque em dinheiro - não há operações comerciais, sem cheque - não há dinheiro suficiente
Provavelmente, uma vez por mês, alguém o traz à tona. Isso já vem acontecendo há algum tempo.
O problema é que quando a negociação (na vida real) não só o tamanho do saldo pode mudar, mas também o tamanho do lote.
E durante os testes o tamanho do depósito (de 1 a 10000000) ou do lote (de 1000000 a 0,01) pode variar.
Portanto, estas verificações devem ser realizadas não apenas uma vez no OnInit, mas permanentemente, no loop (por exemplo, no OnTick).
O aviso (Mensagem impressa ou Alerta) deve ser emitido apenas uma vez para evitar o transbordo de registros.
Estas verificações (LotMin, LotMax, LotNormalizeStep, check balance, OrderCheck) são realizadas cada vez que uma posição é aberta. E o cheque noInit só verifica o lote. Não conheço a lógica de verificar o saldo no OnInit.
PS: Alerta não me salva de erros de validador ((((((((((
Estas verificações (LotMin, LotMax, LotNormalizeStep, check balance, OrderCheck) são realizadas cada vez que uma posição é aberta. E onInit só verifica o lote. Não conheço a lógica de verificar o saldo no OnInit.
PS: Alerta não salva de erros do validador ((((((((((
O validador não tem erros :)
O validador apenas mostra que no código fornecido
- não há cheques completos
- não há manipulação de erros
O validador não tem erros :)
O validador apenas mostra que o código fornecido
- não há cheques completos
- Não há manipulação de erros
))
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Eu tento atualizar a versão EA e recebo um erro.
O mesmo EA está no testador de estratégia.
Também estou escrevendo EAs para o MT4 ao mesmo tempo, tudo está bem aí. O código para 4 e 5 EAs é o mesmo, a única diferença é incluir o arquivo (eles são diferentes para 4 e 5).
A última vez que atualizei este EA, foi em janeiro e tudo estava bem.
Versão do software - MetaTrader 5 x64 build 2025 iniciado (MetaQuotes Software Corp.)
- Terminal Windows 10 (build 14393) x64, IE 11, UAC, Intel Celeron N2815 @ 1.86GHz, Memória: 1866 / 3967 Mb, Disco: 5 / 35 Gb, GMT+3