Como vencer o Ordersend Erro 130 no MetaTrader 4 Por demanda popular, estratégias comprovadas sobre como vencer cada tradutor algorítmico8217s pior pesadelo 8211 Erro 130 Onde é que esse erro vem do que significa para o seu consultor especialista Como você pode encontrar a parte do seu código Isso está causando o erro Nós abordamos tudo isso e mais8230 Para começar, uma definição formal do nosso amigo, Documentação MQL4: That8217s certo Isso é tudo o que você obtém do MetaQuotes. E o rest8230 Go figure Orders Erro 130 é mencionado brevemente em outras seções da documentação. No entanto, não há um guia completo para o que o 8220Invalid Stops8221 realmente significa e como lidar com isso, talvez, o problema mais comum na programação Forex. Mas não é uma preocupação por isso que escrevi esse artigo. Let8217s atravessam isso juntos O assassino silencioso So8230 você lançou seu consultor especialista e nada acontece. Não COMPRAR pedidos, sem encomendas, pedidos não pendentes, nem mesmo mensagens de erro no logs8230. Apenas silêncio. Você decide esperar algumas horas por semana, e nada realmente muda 8211 as tabelas vão para cima e para baixo, mas você não consegue ver nenhum lucro. Isso pode durar forever8230 O motivo real é simples 8211 you8217re realmente recebendo ERRINVALIDSTOPS (qual é o termo técnico correto para o problema), mas você pode vê-lo. That8217s porque 130 é um assassino silencioso. Um assassino de sangue frio do seu cérebro e calma interior. Não há como retirar esse erro através de logs de especialistas ou mesmo registros de terminal. A única maneira de capturá-lo é adicionando mecanismos de segurança corretos em seu código. Aqui, um exemplo que você pode adaptar ao seu código: o que estamos fazendo aqui é tomar o número do ticket e que OrderSend () retorna e verificando se ele é menor do que zero. Se sim, então, esse é um sinal do MetaTrader 4, dizendo-nos que houve um problema com o pedido. O código de erro é impresso na tela usando Alert () e a 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 do EA8217s em vez de exibi-lo na tela. Core of Ordersend Erro 130 Paradas inválidas é o verdadeiro nome para o culpado com o qual estamos lidando hoje. Então, o que as paradas inválidas no MetaTrader 4 realmente significam Para um pedido de mercado (COMPRAR ou VENDER), as paradas inválidas significam que o StopLoss e o TakeProfit que você solicitou não foram possíveis para sua ordem. Portanto, uma vez que um pedido não pode ser preenchido apenas parcialmente, o pedido não foi executado. Para um pedido pendente (COMPRAR STOP, COMPRAR LIMITE, VENDER STOP ou VENDER LIMIT), as paradas inválidas significam que (1) houve problemas com o SLTP (O mesmo que acima) OU (2) a questão foi com o preço de entrada que você especificou para a própria ordem. Como podemos ver, a questão é sempre com um (ou muitos) dos preços que o seu Robot Forex especificou em sua solicitação para O servidor de comércio. Agora que conhecemos o nosso inimigo 8211 let8217s vencê-lo 1) StopLoss amp TakeProfit são preços Existem várias causas possíveis de ERRINVALIDSTOPS, e uma das mais freqüentes entre os iniciantes está especificando o StopLoss e TakeProfit em pips em vez de níveis de preços reais. Assim: tenha cuidado. Alguns EA8217 já possuem módulos que irão detectar o número de dígitos após o decimal e ajustarão automaticamente seus parâmetros de entrada para você. Nessas situações, multiplicar as entradas em 10 pode realmente levar a um desempenho incorreto. Nota: Planejo publicar um artigo separado onde discutiremos como criar nossos próprios módulos para detectar o número de dígitos após o decimal 3) As contas ECN dos corretores ECN têm suas próprias especificidades. Um deles é 8211 ao negociar através de um corretor ECN, você não poderá definir um StopLoss andor TakeProfit com seu Pedido de Mercado (COMPRAR ou VENDER). Se você tentar fazer isso, você obterá o Erro 130. No entanto, é claro, você precisa definir um StopLoss (e talvez TakeProfit) para o seu pedido e isso deve ser feito o mais rápido possível após o pedido ter sido executado. Tente este código: você pode adicionar esta função ao seu código (no final) e depois usá-lo em vez de OrderSend () no seu código principal. Esta função adiciona um passo extra no processo de envio de um pedido de mercado. Em primeiro lugar, ele envia o pedido para executar uma ordem de mercado eliminando o StopLoss e o TakeProfit. Em seguida, modifica o pedido de mercado recém-aberto, adicionando o SL e o TP desejados. Existe, é claro, o risco de a ordem ser executada, mas a modificação falhará. No entanto, nesse caso, a função notificará prontamente o comerciante de que o StopLoss e o TakeProfit não foram configurados. Sinta-se à vontade para modificar esta função de acordo com suas necessidades e estilo de negociação. 4) Stop-Levels Stop-Levels é um mecanismo para que os corretores se protejam de certos riscos relacionados com a volatilidade e a liquidez. Em termos simples, você não poderá configurar seu StopLoss ou TakeProfit OU qualquer pedido pendente mais próximo do que um número predeterminado de Pips para o preço atual do mercado. Para descobrir o que o Nível de Parada é 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 é 3 Pips . Isso significa que você não poderá configurar o StopLoss para o seu pedido mais próximo do que 3 Pips para o preço no qual o pedido será aberto. Isso também significa que qualquer pedido pendente terá que ser definido pelo menos 3 Pips longe do preço atual do mercado. Se você Robot tentar quebrar essas regras e definir um StopProcessPro Demanda de Stop ou Pedido pendente dentro do intervalo de Nível de Parada, então receberá o Erro 130 8220Invalid Stops8221. Então, lembre-se do Nível de Parada da moeda onde seus EA8217s estão negociando 8211 don8217t especificam parâmetros de StopLoss e TakeProfit excessivamente pequenos. Também vale a pena notar que os pares de moedas mais exóticas podem ter níveis de parada muito mais significativos. Por exemplo, para AUDNZD, o Nível de Parada com o mesmo corretor que no exemplo acima é de 20 Pips. Para GBPSEK (British Pound vs Swedish Krone) 8211 it8217s 100 Pips. 5) Normalização de duplas Com alguns corretores você encontrará que, por um motivo desconhecido, os preços Ask e Bid são transferidos para o comerciante com dígitos insignificantes adicionais após a casa decimal. Por exemplo: Em vez de 1.1606, o corretor lhe daria 1.160600001 Agora, esse fenômeno não tem efeito sobre o comércio manual, além disso, uma vez que o terminal MT4 está conectado para exibir um certo número de dígitos após o ponto decimal (4 ou 5) 8211 você não irá Pode notar qualquer diferença. No entanto, esses 8216 insonceptíveis8217 dígitos após o decimal podem ter um efeito dramático sobre Expert Advisors causando823082308230 that8217s direito Nosso velho amigo, OrderSend Error 130 Here8217s uma estratégia que eu uso pessoalmente para proteger meus Robots deste problema: This Pequeno truque limpo permite que você normalize (em termos simples 8211 Round) todos os preços que você está inserindo na função OrderSend (). Desta forma, você cortou todos os dígitos 8216ignificáveis8217 após o ponto decimal. Conclusão Hoje, vimos que pode haver várias causas (pelo menos 5) para o erro 130. Embora este seja um pouco, os problemas subjacentes são triviais e podem ser corrigidos em questão de minutos. Portanto, o Erro 130 não deve ser temido Se você encontrou este culpado, é apenas uma questão de passar pela lista acima, encontrando a situação que se aplica a você e aplicando a solução prescrita. Espero que você tenha encontrado este artigo útil. Deixe-me saber se você tem alguma dúvida usando a seção de comentários abaixo. O que você está esperando PARA COMEÇAR COM O FORAD TRADING ADADEMYI criou um EA, isso funciona bem para mim, mas eu tentei mudá-lo um pouco, mas não consegui fazê-lo funcionar. Tudo o que eu quero fazer é abrir um pedido com uma parada final. O problema é que a parada final é diferente para cada troca (depende da alta da vela atual). Isso sempre dá erro de ordem 130, o que significa que a perda de parada está muito próxima. Isso não é possível, porque eu negocio diariamente e a perda de parada é sempre pelo menos 100 pips. Eu acho que o problema pode ser que, de alguma forma, sempre calcula o fim de arrastar 0, porque a parada final sempre é calculada logo após a troca e a função ordermodify é iniciada depois disso. Mas tentei colocar a parada final 150, por exemplo, e ainda me dá esse erro (mas desta vez às vezes). Se alguém pudesse ajudar, ficaria muito satisfeito. Thx aqui é o código (não é inteiro, não caberia aqui) Eu acho que você precisa normalizar expressões quot Bid - Trailingstop Pointquot e quot Ask Trailingstop Pointquot porque o Trailingstop é o dobro. Roger: Eu acho que você precisa Normalizar as expressões quot Bid - Trailingstop Pointquot e quot Ask Trailingstop Pointquot porque o Trailingstop é o dobro. O problema deve estar em outro lugar. Mas obrigado de qualquer maneira -) o problema tem que estar em outro lugar. Mas obrigado de qualquer maneira -) É difícil ter certeza, porque você diz que não enviou o código inteiro. No entanto, pelo seu aspecto, o Trailingstop não é uma variável estática ou global. É declarado na seção quotbullishquot. Portanto, seu valor será definido no momento em que uma ordem é colocada, mas não irá persistir depois disso. Nas chamadas subseqüentes para iniciar (), quando uma ordem é modificada, a variável Trailingstop deve conter zero. Portanto, a chamada para OrderModify () estará tentando definir a parada para Ask 0 Point ou Bid 0 Point. Tente colocar uma derrapagem diferente de zero e verifique se 100 pontos são o que você pensa e não 10 pontos em uma plataforma de 5 casas decimais. Imprima os valores logo após o comércio para ver se eles estão corretos, talvez o indicador esteja retornando valores desonesto às vezes. Variáveis regulares extern double LotSize 0.1 extern double LotIncrement 0.1 extern double TakeProfitPip 10 external double StopLossPip 21 se (Lotes 0) se (Multiplicador) se (Multiplicador 1) Lotes NormalizeDouble (LotSize, 2) else Lots NormalizeDouble (LotSize, 2) double xTp 0 Se (TakeProfitPip0) xTp Ask (TakeProfitPipPoint) OrderSend (Symbol (), OPBUY, Lots, Ask, Slippage, Bid (StopLossPipPoint), Ask (TakeProfitPipPoint), TradeComment, Referência, Verde) Erro GetLastError () se (Erro 0) Escrever ( QuotError opening COMPRAR ordem: quot ErrorDescription (Error) quot (Cquot Error quot) Pergunte: quot Ask quot Slippage: quot Slippage) else TickPrice Close0 TradeAllowed falseif (Lotes 0) if (Multiplicador) se (Multiplicador 1) Lots NormalizeDouble (LotSize, 2 ) Else Lots NormalizeDouble (LotSize, 2) double xTp 0 se (TakeProfitPip0) xTp Bid - (TakeProfitPipPoint) OrderSend (Symbol (), OPSELL, Lots, Bid, Slippage, Bid (StopLossPipPoint), Bid - (TakeProfitPipPoint), TradeComment, Referência Vermelho) resOrderSend (Symbol (), Opsell, LotsOptimized (), Bid, 3, Bid (StopLossPoint), Bid - (TakeProfitPoint), quotSellquot, MAGICMA, 0, Vermelho) Erro GetLastError () if (Error 0) Write (quotError opening VENDER ordem: quot ErrorDescription (Error) Quot (Quota de erro de D) Lance: quot Bid quot Slippage: quot Slippage) else TickPrice Close0 TradeAllowed false Eu acredito que posso confirmar isso por exemplo. Alpari Micro Account (deve ser uma conta quotlivequot), você deve fazer OrderSend com zero SL e TP e, em seguida, imediatamente, modifique a ordem com o SL e TP necessários para que ele funcione. Eu faço um OrderSelect diretamente após para que eu possa usar OrderOpenPrice () como o preço aberto na lista de parâmetros OrderModify. Isso é o que eu mudei no meu código e parece funcionar agora. Eu acho que tive o mesmo problema com o comerciante do Eixo, então talvez eu tente novamente em algum momento. A única coisa que fiz foi certificar-se de que, quando enviei o OrderSend, havia um número mágico não zero sobre ele. Boa sorte para todos. Fixing Error 130 - MT4 Estas não são soluções para o problema. Eu entendo qual é o problema, não sei como codificá-lo para resolvê-lo. Eu recebo um erro 130 devido ao fato de que meu preço aberto na minha parada de compra é fechar meu preço atual. Se o preço continuar a subir nunca será preenchido. O que eu estou perguntando é que existe uma maneira de aumentar o preço aberto pela quantidade X quando isso acontece até que ele seja preenchido. Os dois links e centenas desses links 62000 contêm a solução, mas você está me dizendo que eles não. Por que Ele está lhe falando a solução. Está bem antes dos seus olhos. O problema parece ser que você precisa de alguém para fazer o trabalho para você. Boa sorte, mas essa não é a maneira de aprender a codificar. Uma dica para você: Para evitar o erro 130 para sua ordem de compra, faça isso: a) obtenha o Stoplevel do seu corretor. B) compare o preço de mercado (Ask) Stoplevel com o preço calculado do BuyStop. Se preço de mercado Stoplevel gt BuyStop-price, set BuyStop-price market-price Stoplevel Buffer-x, então o OrderSend funcionará sem obter erro 130 O buffer-x deve ser definido por você e, quando aplicado, deve ser em pontos, não Em Pips. Juntei-se a Abr 2017 Status: Membro Júnior 1 Post Olá eu tenho este e codificado abaixo, por favor, alguém me ajude a respeito deste erro ruidoso 130 lgnvalid stopgt ---------------------- -------------------------------------------- Soubra2003v2.0.mq4 Copyright 2017, soubra2003 mql5enuserssoubra2003 ---------------------------------------------- -------------------- propriedade copyright quotCopyright 2017, soubra2003v2.0quot propriedade link quotonesoubraquot propriedade versão quot2.00quot descrição da propriedade quot - Esta EA comercializará como abaixo descrição: quot property Descrição quot 1) Condição de compra: O pedido pendente será definido como preço mais alto do anterior. Candle Distance by user. quot descrição da propriedade quot 2) Sell condition: O pedido pendente será definido como preço mais baixo do anterior. Vela - Distância por descrição de propriedade do usuário quot 3) As atualizações das ordens pendentes da buysell serão geralmente com cada nova opção de descrição da propriedade open. quot quot 4) O que há de novo: Trailing Stop, Break Even amp Money Management. quot propriedade estrita inclui ltstdlib. mqhgt string de entrada sep3 quot --------------------- Money Mgmt Settings -------------------- - quot MM opções gtgtgtgtgtgtgtgt entrada bool MM falso Money Management entrada duplo CalcAmount 100 Quantidade para AUTO Entrada de lotes duplo CalcLot 0.01 Auto Tamanho do Lote cada Quantidade entrada dobro Tamanho de Lote 0.10 Tamanho do Lote (Fixed) string de entrada sep1 quot --------- ------------ Configurações de Negociação --------------------- quot Opções de Negociação gtgtgtgtgtgtgtgt input double orderdistance 10 Distance (After Prev. High amper Abaixo Prev. Baixo) extern double buystoploss 50 Comprar Stop Loss extern double sellstoploss 50 Venda Stop Loss extern double buytakeprofit 100 Comprar Take Profit extern double selltakeprofit 100 Vender Receber entrada de lucro int Slippage 5 input strin G sep2 quot --------------------- Break Even amp T. Stop -------------------- - quot Break Even amp T. Stop gtgtgtgtgtgtgtgt entrada bool BreakEven true Break Even Status entrada duplo BreakEvenStart 5.0 Break Even Start entrada duplo BreakEvenValue 1.0 Break Even Value entrada bool TrailingStop true Trailing Stop Status entrada duplo TrailingStopVal 10.0 Trailing Stop Value string de entrada sep4 quot-- ------------------- Outra Configuração --------------------- quot Outras Opções gtgtgtgtgtgtgtgt string de entrada tradescommentquotsoubra2003Version 2.0 Quot Trades Comentário input cor buyarrowcolor clrBlue Comprar Seta Cor entrada cor sellarrowcolor clrRed Vender Seta Color input cor deletearrowcolor clrYellow Excluir Pendente Ordem Seta Cor entrada cor modifyarrowcolor clrWhite Modificado Ordem Seta Cor --- int slippage5 int buymagicnumber821454145 int vendmagicnumber192545451 double tradepointPoint duplo prevcdlhigh duplo prevcdllow duplo Buyprice double sellprice int buyticketno int sell Ticketno double Lotes duplo StopSprdLevel MarketInfo (Symbol (), MODESTOPLEVEL) MarketInfo (Symbol (), MODESPREAD) double BrokerMinLot MarketInfo (Symbol (), MODEMINLOT) double BrokerMaxLot MarketInfo (Symbol (), MODEMAXLOT) prevcdlhigh High1 prevcdllow Low1 buypriceprevcdlhighorderdistancetradepoint sellpriceprevcdllow-orderdistancetradepoint if (buystoplossgt0) buystoplossbuyprice-buystoplosstradepoint outra buystoplossNULL if (buytakeprofitgt0) buytakeprofitbuypricebuytakeprofittradepoint outra buytakeprofitNULL if (sellstoplossgt0) sellstoplosssellpricesellstoplosstradepoint outra sellstoplossNULL if (selltakeprofitgt0) selltakeprofitsellprice-selltakeprofittradepoint outra selltakeprofitNULL if (NewBar ()) CloseAll () CloseAll () if (buycounter ()) RefreshRates () Int tktbuy OrderSend (Symbol (), OPBUYSTOP, Lots, buyprice, slippage, buystoploss, buytakeprofit, tradescomment, buymagicnumber, NULL, buyarrowcolor) if (tktbuylt0) Print (quotOrder falhou com erro: quot, ErrorDescription (GetLastError ())) De outra forma (QuotOrder colocado com sucesso) se (sellcounter ()) RefreshRates () int tktsell OrderSend (Symbol (), OPSELLSTOP, Lotes, preço de venda, deslizamento, sellstoploss, selltakeprofit, tradescomment, sellmagicnumber, NULL, sellarrowcolor) se (tktselllt0) Imprimir (quotOrder falhou Com erro: quot, ErrorDescription (GetLastError ())) else Imprimir (quotOrder colocado com sucesso) Comentário (quot Before Candle High quot, NormalizeDouble (prevcdlhigh, Digits), quot Pendente Buy Order Deve ser quot, NormalizeDouble (buyprice, Digits), quotnquot , Quot Before Candle Low quot, NormalizeDouble (prevcdllow, Digits), quot Pendente Venda Ordem Deve ser quot, NormalizeDouble (sellprice, Digits), quotnquot, quot ------------------ ------------------------------ quot, quotnquot, quot Money Management Status: quot, MM, quotnquot, quot Break Even Status: Quot, BreakEven, quotnquot, quot Status de parada final: quot, TrailingStop, quotnquot, quot -------------------------------- ---------------- quot, quotnquot, quot Broker Stop Out quot, Accou NtStopoutLevel (), quotnquot, quot Broker Stop Level quot, StopSprdLevel, quotnquot, quot Broker Max Lot permitido quot, BrokerMaxLot, quotnquot, quot Broker Min Lot permitido quot, BrokerMinLot) --- BuyTrailingStop () para (int cnt10 cnt1ltOrdersTotal () cnt1 ) Int ticketselectOrderSelect (cnt1, SELECTBYPOS) se (OrderStopLoss () NULL ampamp OrderType () ltOPSELL ampamp OrderSymbol () Symbol () ampamp OrderMagicNumber () buymagicnumber) se (OrderType () OPBUY) se (TrailingStop ampamp TrailingStopValgt0) RefreshRates () bool ticketmodify OrderModify (OrderTicket (), OrderOpenPrice (), OrderStopLoss () (TrailingStopValtradepoint), OrderTakeProfit (), 0, modifyarrowcolor) se (ticketmodify) Imprimir (quotTStop: A ordem não pode ser modificada. Quot, ErrorDescription (GetLastError ())) else Print (quotTrailing Stop Done. quot) SellTrailingStop () para (int cnt20 cnt2ltOrdersTotal () cnt2) int ticketselectOrderSelect (cnt2, SELECTBYPOS) se (OrderStopLoss () NULL ampamp OrderType () ltOPSELL ampamp OrderSymbol () Símbolo () ampamp OrderMagicNumber () sellmagicnumber) se (OrderType () OPSELL) if (TrailingStop ampamp TrailingStopValgt0) RefreshRates () int ticketmodify OrderModify (OrderTicket (), OrderOpenPrice (), OrderStopLoss () - (TrailingStopValtradepoint), OrderTakeProfit () , 0, modifyarrowcolor) se (ticketmodify) Imprimir (quotTStop: A ordem não pode ser modificada. Quot, ErrorDescription (GetLastError ())) else Imprimir (quotTrailing Stop Done. quot) BuyBreakEven () for (int cnt3 0 cnt3 lt OrdersTotal () cnt3 ) Int ticketselect OrderSelect (cnt3, SELECTBYPOS) se (OrderType () lt OPSELL ampamp OrderSymbol () Symbol () ampamp OrderMagicNumber () buymagicnumber) if (OrderType () OPBUY) se (BreakEvenStart gt 0 ampamp BreakEven) RefreshRates () int ticketmodify OrderModify (OrderTi Cote (), OrderOpenPrice (), OrderOpenPrice () (BreakEvenValuetradepoint), OrderTakeProfit (), 0, modifyarrowcolor) if (ticketmodify) Imprimir (quotBreak Even: Order não pode ser modificado, quot, ErrorDescription (GetLastError ())) else Print (quotBreak Mesmo colocado Sucessivamente. quot) SellBreakEven () for (int cnt4 0 cnt4 lt OrdersTotal () cnt4) int ticketselect OrderSelect (cnt4, SELECTBYPOS) if (OrderType () lt OPSELL ampamp OrderSymbol () Symbol () ampamp OrderMagicNumber () sellmagicnumber) if (OrderType () OPSELL) se (BreakEvenStart gt 0 ampamp BreakEven) RefreshRates () int ticketmodify OrderModify (OrderTicket (), OrderOpenPrice (), OrderOpenPrice () - (BreakEvenValue tradepoint), OrderTakeProfit (), 0, modifyarrowcolor) if (ticketmodify) Imprimir (quotBreak Even: Order não pode ser modificado, quot, ErrorDescription (GetLastError ())) else Print (quotBreak Even Placed Successfuly. quot) --------------------- --------------------------------------------- Função de fim de semana especialista - ----------------------------------- ----------------------------- void closeall () for (int i0 iltOrdersTotal () i) int selectOrderSelect (i, SELECTBYPOS, MODETRADES ) Se (OrderSymbol () Symbol ()) if (OrderSymbol () Symbol ()) if (OrderTymet () Symbol () SymbolType () () Ser removido, Err Desc: quot, ErrorDescription (GetLastError ())) else Print (quotOrder Has been Removed. quot)
Comments
Post a Comment