Forex ordersend error 130
Como vencer o Ordersend Error 130 no MetaTrader 4 Por demanda popular, estratégias comprovadas sobre como vencer cada pesadelo algoritmo do trader8217s 8211 Erro 130 De onde vem este erro O que significa para o seu Expert Advisor Como você pode encontrar a parte do seu código Que está causando o erro Nós atacamos tudo isso e more8230 Para começar, uma definição formal de nosso amigo, MQL4 Documentação: That8217s direito Isso é tudo que você começa a partir de MetaQuotes. E o rest8230 Ir figura Ordem Error 130 é brevemente mencionado em outras seções da documentação. No entanto, não há nenhum guia completo para o que 8220Invalid Stops8221 realmente significa e como lidar com isso, talvez, problema mais comum na programação Forex. Mas não é uma preocupação porque eu escrevi este artigo. Let8217s passar por isso juntos O assassino silencioso So8230 você lançou seu conselheiro perito and8230 nada acontece. Nenhuma ordem de COMPRA, nenhuma ordem de VENDA, nenhuma ordem pendente, nem mesmo mensagens de erro no logs8230. Apenas silêncio. Você decide esperar algumas horas dias semanas, e nada realmente muda, as tabelas vão para cima e para baixo, mas você não vê nenhum lucro. Isso pode continuar eternamente. A verdadeira razão é que você realmente está recebendo ERRINVALIDSTOPS (que é o termo técnico correto para o problema), mas você não pode vê-lo. That8217s porque 130 é um assassino silencioso. Um assassino de sangue frio de seu cérebro e calma interior Não há nenhuma maneira de pegar esse erro através de logs conselheiro perito ou mesmo registros de terminal. A única maneira de pegá-lo é adicionando os mecanismos failsafe direito em seu código. Aqui está um exemplo que você pode adaptar ao seu código: O que estamos fazendo aqui é pegar o número do ticket e que OrderSend () retorna e verificar se ele é menor que zero. Se sim, então isso é um sinal do MetaTrader 4 dizendo-nos que houve um problema com o pedido. O código de erro é então impresso para fora na tela usando Alert () ea função GetLastError () incorporada. Este código dará uma janela pop-up como na imagem acima na parte superior deste artigo. Nota: você pode usar Print () em vez de Alert () para redirecionar a mensagem diretamente para o log de EA8217s em vez de exibi-la na tela. Core of Ordersend Error 130 Paradas inválidas é o nome real para o culpado que estamos lidando com hoje. Então, o que faz paradas inválidas no MetaTrader 4 realmente significa Para uma ordem de mercado (COMPRAR ou VENDER) paradas inválidas significa que o StopLoss andor TakeProfit que você solicitou não foram possível definir para o seu pedido. Portanto, uma vez que uma solicitação não pode ser cumprida apenas parcialmente, a ordem não foi executada de forma alguma. Para uma ordem pendente (COMPRAR PARAR, COMPRAR LIMITE, VENDAR PARADA ou LIMITE DE VENDA) pára válido significa que (1) houve problemas com o SLTP (O mesmo que acima) OU (2) a edição era com o preço de entrada que você especificou para a ordem própria Como nós podemos ver, a edição está sempre com um (ou muitos) dos preços que seu robô de Forex especificou em sua O servidor de comércio. Agora que sabemos que nosso inimigo 8211 let8217s vencê-lo 1) StopLoss amp TakeProfit são preços Existem várias causas possíveis de ERRINVALIDSTOPS, e um dos mais freqüentes entre os iniciantes é especificar o StopLoss e TakeProfit em pips em vez de níveis de preços reais. Como este: No entanto, tenha cuidado Alguns EA8217s já têm módulos que irá detectar o número de dígitos após o decimal e irá ajustar automaticamente os parâmetros de entrada para você. Nessas situações, multiplicar entradas por 10 pode realmente levar a um desempenho errado. Nota: Eu pretendo publicar um artigo separado onde discutiremos como criar nossos próprios módulos para detectar o número de dígitos após a decimal. 3) ECN corretores ECN contas têm suas próprias especificidades. Um deles é 8211 ao negociar através de um corretor ECN você não será capaz de definir um StopLoss andor TakeProfit com sua ordem de mercado (COMPRAR ou VENDER). Se você tentar fazer este 8211 você começará o erro 130. Entretanto, naturalmente, você necessita ajustar um StopLoss (e talvez TakeProfit) para sua ordem, e este deve ser feito assim que possível depois que a ordem foi executada. Tente este código: Você pode adicionar esta função ao seu código (no final) e, em seguida, usá-lo em vez de OrderSend () no seu código principal. Esta função adiciona uma etapa extra no processo de envio de uma Ordem de Mercado. Primeiro, ele envia a solicitação para executar uma ordem de mercado removendo o StopLoss e TakeProfit. Em seguida, modifica a ordem de mercado recentemente aberta, adicionando o SL e TP desejados. Há, naturalmente, um risco de que a ordem será executada, mas a modificação falhará. No entanto, nesse caso, a função prontamente notificar o comerciante que o StopLoss e TakeProfit não foram definidos. Sinta-se livre para modificar esta função para atender às suas necessidades e estilo de negociação. 4) Stop-Levels Stop-Levels são um mecanismo para os corretores se protegerem de certos riscos relacionados à volatilidade e à liquidez. Em termos simples, você não será capaz de definir o seu StopLoss ou TakeProfit OU qualquer ordem pendente mais perto de um número predeterminado de Pips para o preço de mercado atual. Para descobrir o que o Stop Level é para um par de moedas específico, você precisa pressionar CTRLU no seu teclado, selecione o par de moedas desejado e clique no botão 8220Properties8221 como mostrado na ilustração abaixo: Neste exemplo, o nível de parada para AUDUSD é de 3 pips . Isso significa que você não será capaz de definir o StopLoss para sua ordem mais próxima de 3 pips para o preço em que a ordem será aberta. Isso também significa que qualquer ordem pendente terá que ser definida pelo menos 3 Pips de distância do preço de mercado atual. Se o Robot tentar quebrar essas regras e definir um StopProduct StopLoss ou Ordem Pendente dentro do intervalo Nível de Parada, então ele receberá Erro 130 8220Invalid Stops8221. Portanto, apenas tenha em mente o nível de parada da moeda em que seu EA8217s está negociando 8211 don8217t especifique parâmetros StopLoss e TakeProfit excessivamente pequenos. Também vale a pena notar que pares de moedas mais exóticos podem ter níveis de parada muito mais significativos. Por exemplo, para AUDNZD o Stop Level com o mesmo corretor como no exemplo acima é de 20 Pips. Para GBPSEK (libra britânica contra a coroa sueco) 8211 it8217s 100 pips. 5) Normalização de duplas Com alguns corretores você vai achar que por uma razão desconhecida os preços Ask e Bid são passados para o comerciante com dígitos adicionais desprezíveis após o decimal. Por exemplo: Em vez de 1.1606 o corretor lhe daria 1.160600001 Agora este fenômeno não tem nenhum efeito na troca manual, além disso desde que o terminal MT4 é hardwired para indicar um determinado número dos dígitos após o ponto decimal (ou 4 ou 5) 8211 você não Ser capaz de notar qualquer diferença em tudo No entanto, estes 8216negligible8217 dígitos após o decimal pode ter um efeito dramático sobre Expert Advisors causando 823082308230 that8217s direito Nosso velho amigo, OrderSend Error 130 Here8217s uma estratégia que eu pessoalmente uso para proteger os meus robôs a partir desta questão: Pequeno truque permite que você normalize (em termos simples 8211 Round) quaisquer preços que você está entrando na função OrderSend (). Desta forma você cortar todos os 8216negligible8217 dígitos após o ponto decimal. Conclusão Hoje vimos que pode haver múltiplas causas (pelo menos 5) para o erro 130. Embora este seja um bom número, os problemas subjacentes são todos triviais e podem ser corrigidos em questão de minutos. Portanto, o erro 130 não deve ser temido Se você encontrou este culpado, it8217s apenas uma questão de passar pela lista acima, encontrar a situação que se aplica a você e aplicar a solução prescrita. Espero que você tenha encontrado este artigo útil Deixe-me saber se você tiver alguma dúvida usando a seção de comentários abaixo. O que você está esperando PARA COMEÇAR COM O COMÉRCIO DE FOREX ADADEMYint OrderSend (símbolo de corda. Símbolo int cmd operação volume duplo volume volume duplo preço int deslizamento deslize duplo stoploss stop loss dupla takeprofit take profit string comentárioNULL comentário int magic0 Número mágico datetime expiration0. Pendente ordem cor de expiração arrowcolorclrNONE cor) 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 Deslocamento máximo de preço 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. No tempo 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 à ordem 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 é realizada 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. StopLoss e níveis TakeProfit não pode ser muito perto 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 LossTake 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. No 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 esse limite for 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 de parada mínima double minstoplevel MarketInfo (Símbolo (), MODESTOPLEVEL) Imprimir (quotMinimum Stop Levelquot, minstoplevel, quot pointsquot) preço duplo Pedir --- calculado SL e TP preços devem ser normalizados dupla stoploss NormalizeDouble (Bid - minstoplevel Ponto. Dígitos) double takeprofit NormalizeDouble (Bid minstoplevel Point Dígitos) --- ordem do mercado do lugar para comprar 1 lote int ticket OrderSend (Símbolo (), OPBUY, 1, preço, 3, stoploss, takeprofit, quotMy orderquot, 16384,0, clrGreen) if (ticketlt0) Print (quotOrderSend falhou Com erro quot GetLastError ()) else Imprimir (quotOrderSend colocado successfullyquot) --- Eu cansado abrir ordens no sistema de teste e também recebeu e erro 130. Foi-me dito por Oanda você não pode abrir encomendas via EAs em uma conta de prática apenas viver. Obviamente, seria insano testá-lo ao vivo. Eles disseram que estão olhando para ele, o que quer que isso signifique. Bottom line, se eu não posso testá-lo, Im não usá-lo. No entanto, você pode executar o EA no testador de estratégia. Mas thats doesnt fazê-lo para mim, eu preciso ter certeza que o meu negociado estão sendo executados propriedade com Oanda ea única maneira em minha mente para fazê-lo é tê-lo comércio na conta demo em primeiro lugar. Estou testando meu EA na plataforma metatrader Oanda. No entanto, eu simplesmente não consigo abrir uma posição com Ordersend. O que está errado com a ordem que eu encontrei mais tarde e resposta que funcionou para mim ir para: ToolsgtOptionsgtExpert Advisors TabgtCheck caixa que diz quotAllow Live Tradingquot (): Erro Ordersend (130): tamanho do lote: 0.1, Pergunte: 1.3969, SL: 1.3899, TP: E salvar a alteração. Você deve começar um sorriso face no canto superior direito do gráfico. Além disso, a conta que você está negociando deve ser configurada como uma conta MT4 com o Oanda. Ou seja, você pode criar uma sub-conta e quando o fizer, ele tem uma opção para MT4 habilitado. Espero que isso ajude alguém. Mais tarde, encontrei e resposta que trabalhou para mim ir para: ToolsgtOptionsgtExpert Assessores caixa TabgtCheck que diz quotAllow Live Tradingquot e salvar a alteração. Você deve começar um sorriso face no canto superior direito do gráfico. Além disso, a conta que você está negociando deve ser configurada como uma conta MT4 com o Oanda. Ou seja, você pode criar uma sub-conta e quando o fizer, ele tem uma opção para MT4 habilitado. Espero que isso ajude alguém. Isso não tem nada a ver com o erro 130.
Comments
Post a Comment