Monday, 5 March 2018

Forex error 130


Eu criei uma EA, que funciona bem para mim, mas tentei mudar um pouco, mas não consigo fazer com que funcione. 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 imediatamente após o comércio para ver se eles estão corretos, talvez o indicador esteja retornando valores desagradáveis ​​às vezes. Olá. Eu acabei de atualizar do MT4 build201 para o MT4 build207. Uma EA mina que costumava funcionar bem com o build201 começou a me dar mensagens de erro repetidas: ordenar o erro 130. Não fiz nenhuma modificação na EA, e a mesma EA quando voltou para build201 funcionou sem mensagem de erro. Abaixo está a função relacionada que vem causando a mensagem de erro. (A variável newSL é normalizada). Este código é muito simples e direto. Eu verifiquei novamente e novamente, mas não consegui descobrir o que está causando as mensagens de erro. Alguém poderia usar alguma luz sobre este int ModifySL (double newSL) ---- int i, total, try ---- total OrdersTotal () ---- para (itotaligt0i--) se (OrderSelect (i, SELECTBYPOS, MODETRADES)) se (OrderType () OPBUY ampamp OrderSymbol () Symbol () ampamp OrderMagicNumber () magicbase) if (newSLgt0.0 ampamp (OrderStopLoss () lt0. 0 OrderStopLoss () ltnewSL)) OrderModify (OrderTicket (), OrderOpenPrice () (NewSLgt0.0 ampamp (OrderStopLoss () lt0. 0 OrderStopLoss () gtnewSL)) OrderModify () (OrderTypeProcess (), 0, (OrderTicket (), OrderOpenPrice (), newSL, OrderTakeProfit (), 0, clrmodify) ---- return (0) Mostre-me um código completo. A variável newSL interesses. Ok, aqui está a função na minha EA que chama a função ModifySL () acima e passa a variável newSL para ela. Int GetOpenSignal () int precision MarketInfo (Symbol (), MODEDIGITS) ---- verificar o sinal longo se (newLowgtpastLowdiffPoint) GoLongNow True GoShortNow False longEntry NormalizeDouble (High1 (FilterSpread) Point, precision) esta linha de código calcula o preço de entrada para um Sinal longo. Se, ao mesmo tempo, uma posição curta estiver presente, o preço de entrada longo também se torna o novo passo para a entrada curta. ---- verifique se há sinal curto se (newHighltpastHigh-diffPoint) GoLongNow Falso GoShortNow VerdadeiroEntryEntry NormalizeDouble (Low1-FilterPoint, precisão) ---- sinal longo se (GoLongNowTrue ampamp ForbidLongFalse) ---- DeletePending () ---- Se (ExitNowTrue) ClosePositions () else ModifySL (longEntry) isso exige a função ModifySL () acima e passa a variável longEntry como o novo stoploss para posições curtas existentes. ---- enviar sinal para retornar longo (OPBUYSTOP) ---- sinal curto se (GoShortNowTrue ampamp ForbidShortFalse) ---- DeletePending () ---- if (ExitNowTrue) ClosePositions () else ModifySL (shortEntry) - - enviar um sinal para retornar curto (OPSELLSTOP) ---- enviar sinal para não retornar (-1) no meu conhecimento, não posso ver nada de errado com esta função. Para não mencionar que funciona bem com o MT4 build201. Isso sugere que pode haver um bug com a última compilação de MT4 oh, btw, as variáveis ​​na função GetOpenSignal () que não são declaradas localmente são todas variáveis ​​globais. E também, quando faço backtesting, sempre uso o método Open Prices Only. Alguém poderia ajudar com este problema. Certifique-se de que o NewSL, bem como o takeprofit atual, não estão mais próximos do MarketInfo (Symbol (), MODESTOPLEVEL) para o preço de saída atual. Por exemplo, OrderModify retorna ERRINVALIDSTOPS se stoplevel é de 5 pontos e newSL para posição longa é 1.3683 e Bid é 1.3686. 1.3686 - 1.3683 lt 5 Point.

No comments:

Post a Comment