Tuesday 25 July 2017

Forex Ordersend Error 131


Oi, eu preciso de ajuda para evitar o erro orderSend 131 e orderClose erro 131. Aqui está o valor que eu atribuir ao tamanho do lote: e Aqui está como eu enviar uma ordem: Eu preciso programar o meu EA de tal forma que ele fecha todos os comércios opostos Sempre que houver um sinal oposto. Este aqui é o que eu vim acima com para fechar todos os comércios da compra (não há nenhuma ordem pendente). Eu defini as variáveis ​​antes de eu as usei no código acima e eu não tive nenhum problema em compilar. Mas de alguma forma o valor da variável quotlotquot é sempre 0 e eu continuo recebendo o erro 131. Eu realmente não sei o que estou fazendo errado. Tenha em mente que Im novo para isso, então eu poderia precisar de você para colher me alimentar. Agradeço antecipadamente por sua ajuda. Farhang: Oi, eu preciso de ajuda para evitar o erro orderSend 131 e orderClose erro 131. Aqui está o valor que atribuo ao tamanho do lote: Erro 131 significa que o volume é inválido. Você deve verificar se seu tamanho de lote está em conformidade com MODEMINLOT e MODELOTSTEP antes de usá-lo (embora eu não saiba por que u get lots0, talvez o problema está em outro lugar em seu código). Use MarketInfo () para obter esses valores. Veja aqui - gt docs. mql4 / common / MarketInfo. Docs. mql4 / constantes / marketinfo. Encerrar loop de fechamento - você precisa diminuir o contador e não incrementá-lo. Veja aqui - gt mql5 / pt / forum / 119840. Btw - É recomendado contar de 0 em vez de usar i-1. (Mas thats até você). Certifique-se de que Tip não é zero por padrão, caso contrário, se OrderSelect () falhar, você poderá receber um erro OrderClose (). Você também deve usar RefreshRates () imediatamente antes de tentar fechar o - gt docs. mql4 / windows / RefreshRates. Problema um. Após o primeiro fechamento, a dica é definida para que você continue a fechar todas as ordens mesmo se a seleção de ordem falhar. Problema dois. Depois de fechar a primeira ordem, a posição de ordem 2 torna-se 1, 3 torna-se 2, etc. Você fechará qualquer outra ordem. E, em seguida, a ordem seleciona começam a falhar, mas você não testar para isso. Problema três. Depois de fazer qualquer orderSend / modificar / fechar ou excluir você deve atualizar antes de fazer outro. Sempre contagem regressiva. Sempre teste orderSelect. Hi, em numerosas ocasiões e em situações diferentes, eu continuo recebendo Error 131 - Volume de comércio inválido. Backtesting está funcionando muito bem e, em seguida, em algum momento no tempo em vez de abrir nova ordem o OrderSend mantém falhando e dando este erro. Metatrader compilação é 191. Aqui estão as saídas das funções relevantes e valores do volume de comércio solicitado: Volume (lotes a abrir): 127.1 Total lotes abertos: 119.6 AccountBalance 1357252.5272 AccountEquity 1271049.049 AccountFreeMargin 1149674.7672 AccountMargin 207577.76 AccountLeverage 100 Assim, há bastante livre Margem, tudo parece (para mim) muito bem. Existe alguma coisa que estou faltando ou é este um bug enorme real quase completamente incapacita backtesting capacidades para o meu especialista. Espero que haja uma explicação / solução. Será que alguém da Metaquotes por favor comente sobre este Im tendo o mesmo problema, mas em construir 195. Tudo estava funcionando bem até que eu mudei as datas da janela backtesting. Depois que eu comecei a receber o erro 131 após o meu especialista tentou alterar o tamanho do lote (Talvez o volume é definido como um número constante.). Eu tentei mudar as datas de volta para as configurações originais, mas eu ainda obter o erro. Durante todo esse processo, não mudei nada além das datas no backtester. Eu não mudei o meu perito em tudo nem eu recompilar nada. Eu não mudei outras configurações além das datas. Espero que isto ajude. Veja exemplo no artigo championship. mql4 / 2006 / news / 8 após quot // --- verifique min, max e stepquot linha Obrigado pelo link. Eu entendo por que estou recebendo o erro agora. Meus lotes são dimensionados com uma precisão de dois dígitos, que não se encaixa nos parâmetros definidos nessa página. Minha próxima pergunta, porém, é como é a precisão do lote definido particularmente em relação ao backtester Tamanhos de lote com uma precisão de dois dígitos foram ok, mas agora theyre não. Por que razão é este número definido precisão de tamanho de lote é diferente para corretores diferentes não é que eu sei interbankfx oferece tamanhos microlot e os lotes eu comércio lá são sempre definido em uma precisão de dois dígitos e eu nunca tenho problemas. Não devemos ser capazes de jogar com este número no backtester Existe uma maneira de alterá-lo agora Obrigado pela sua ajuda até agora Veja o exemplo no artigo championship. mql4 / 2006 / news / 8 após quot // --- check min, Max e stepquot line Oi Slawa, o seu sido um tempo desde que eu postei a pergunta. Se você der uma olhada no meu primeiro post, você verá que a EA está tentando abrir 127,1 lotes, portanto, é um volume de precisão de um único dígito, que deve funcionar muito bem. Existe um limite de volume máximo no backtesting (não para o campeonato, mas em geral) OrderSend int OrderSend (símbolo de string // símbolo int cmd // operação volume duplo // volume duplo preço // preço int slippage. // stop loss double takeprofit // take profit string comentárioNULL // comentário int magic0. // número mágico datetime expiration0. // ordem de expiração pendente color arrowcolorclrNONE // color) em Symbol para negociação. Em Tipo de operação. Pode ser qualquer uma das enumerações da Operação Comercial. Em Número de lotes. Em Deslizamento de preço máximo para ordens de compra ou venda. No nível Stop loss. Em Tome nível de lucro. No texto do comentário da ordem. A última parte do comentário pode ser alterada pelo servidor. Em ordem número mágico. Pode ser usado como identificador definido pelo usuário. Na hora de expiração da Ordem (somente para pedidos pendentes). Em Cor da seta de abertura no gráfico. Se o parâmetro estiver ausente ou se a seta de abertura do valor CLRNONE não estiver desenhada no gráfico. Retorna o número do ticket atribuído ao pedido pelo servidor comercial ou -1 se ele falhar. Para obter informações de erro adicionais, tem de chamar a função GetLastError (). Na abertura de uma ordem de mercado (OPSELL ou OPBUY), somente os preços mais recentes de Oferta (para venda) ou de Pedir (para compra) podem ser usados ​​como preço aberto. Se a operação é executada com uma segurança diferente da corrente, a função MarketInfo () deve ser usada com o parâmetro MODEBID ou MODEASK para obter as cotações mais recentes para essa segurança. Preço calculado ou não-normalizado não pode ser aplicado. Se não houver o preço aberto solicitado no segmento de preços ou não tiver sido normalizado de acordo com a quantidade de dígitos após o ponto decimal, o erro 129 (ERRINVALIDPRICE) será gerado. Se o preço aberto solicitado estiver totalmente desatualizado, o erro 138 (ERRREQUOTE) será gerado independentemente no parâmetro slippage. Se o preço solicitado estiver desatualizado, mas presente no segmento, a ordem será aberta ao preço atual e somente se o preço atual estiver dentro do intervalo de desvio de preço. Os níveis de StopLoss e TakeProfit não podem estar muito próximos do mercado. A distância mínima de níveis de parada em pontos pode ser obtida usando a função MarketInfo () com o parâmetro MODESTOPLEVEL. No caso de níveis de paragem erróneo ou não normalizado, o erro 130 (ERRINVALIDSTOPS) será gerado. Um valor zero de MODESTOPLEVEL significa ausência de quaisquer restrições na distância mínima para Stop Loss / Take Profit ou o fato de que um servidor comercial utiliza alguns mecanismos externos para controle de nível dinâmico, que não podem ser traduzidos no terminal cliente. No segundo caso, GetLastError () pode retornar o erro 130, porque MODESTOPLEVEL é realmente quotfloatingquot aqui. Na colocação de uma ordem pendente, o preço aberto não pode ser muito próximo ao mercado. A distância mínima do preço pendente do mercado atual em pontos pode ser obtida usando a função MarketInfo () com o parâmetro MODESTOPLEVEL. Em caso de preço aberto falso de uma ordem pendente, o erro 130 (ERRINVALIDSTOPS) será gerado. A aplicação do tempo de expiração da ordem pendente pode ser desativada em alguns servidores comerciais. Neste caso, quando um valor diferente de zero é especificado no parâmetro expiration, o erro 147 (ERRTRADEEXPIRATIONDENIED) será gerado. Em alguns servidores comerciais, o montante total de pedidos abertos e pendentes pode ser limitado. Se este limite tiver sido excedido, nenhuma nova ordem será aberta (ou nenhuma ordem pendente será colocada) eo servidor de comércio retornará o erro 148 (ERRTRADETOOMANYORDERS). // ------------------------------------------------ ------------------ // Função de início do programa de script // ------------------------ ------------------------------------------ void OnStart () // - - obter o nível mínimo de stop duplo minstoplevel MarketInfo (Symbol (), MODESTOPLEVEL) Imprimir (quotMinimum Stop Levelquot, minstoplevel, quot pointsquot) preço duplo Ask // --- calculado SL e TP preços devem ser normalizados double stoploss NormalizeDouble (Bid - minstoplevel Point (Digite) Digite o valor de mercado para comprar 1 lote int ticket OrderSend (Símbolo (), OPBUY, 1, preço, 3, stoploss, takeprofit, quotMy orderquot, 16384, 0, clrGreen) if (ticketlt0) Imprimir (quotOrderSend falhou com erro quot. GetLastError ()) else Imprimir (quotOrderSend colocado com êxito) // ---

No comments:

Post a Comment