Tente imprimir os valores de marginAllot, PercentRisk e pipsToSL para restringir de onde vem o número negativo. Meu palpite especulativo é que a pipsToSL está sendo passada como um número negativo sob certas circunstâncias.
NormalizeDouble(posSize,2);
Esta linha não faz nada.- NÃO use o NormalizeDouble, TUDO. Por QUALQUER motivo. É um kludge, não o use.O seu uso é sempre errado.
- SL/TP (stops) precisam ser normalizados para o tamanho do tick(em 5Digit Broker Stops só é permitido colocar em valores de tubulação completa). Como saber em mql?-Fórum MQL4)e respeitar os limites Requisitos e Limitações na realização de negócios - Apêndices - Tutorial MQL4 e que exige a compreensão da igualdade do ponto flutuante Pode o preço != preço ? - Fórum da MQL4
- Somente o preço aberto para pedidos pendentes precisa ser ajustado. Em Moedas, Point === TickSize, então você terá a mesma resposta, mas não funcionará em Metais. Portanto, faça-o corretamente: Trailing Bar Entry EA - MQL4 forum ou Bid/Ask: (Não é necessário) usar NormalizeDouble in OrderSend - Fórum MQL4
- O tamanho do lote também deve ser ajustado para um múltiplo de LotStep. Se isso não for um poder de 1/10 então NormalizeDouble está errado. Faça-o corretamente.
Tente imprimir os valores de marginAllot, PercentRisk e pipsToSL para restringir de onde vem o número negativo. Meu palpite especulativo é que a pipsToSL está sendo passada como um número negativo sob certas circunstâncias.
Na verdade, consegui encontrar alguns lugares no resto do código onde o pipsToSL foi calculado incorretamente como negativo. Obrigado.
- Esta linha não faz nada.
- NÃO use o NormalizeDouble, TUDO. Por QUALQUER motivo. É um kludge, não o use. O seu uso é sempre errado.
- SL/TP (pára) precisa ser normalizada para fazer um tick size.(Em 5Digit Broker Stops só é permitido colocar em valores de pip completos. Como descobrir em mql?-MQL4 forum) e respeitar os limites Requisitos e Limitações na realização de negócios - Apêndices - Tutorial MQL4 e que exige a compreensão da igualdade de ponto flutuante Pode o preço != preço ? - Fórum da MQL4
- Somente o preço aberto para pedidos pendentes precisa ser ajustado. Em Moedas, Point === TickSize, então você terá a mesma resposta, mas não funcionará em Metais. Portanto, faça-o corretamente: Trailing Bar Entry EA - MQL4 forum ou Bid/Ask: (Não é necessário) usar NormalizeDouble in OrderSend - Fórum MQL4
- O tamanho do lote também deve ser ajustado para um múltiplo de LotStep. Se isso não for um poder de 1/10 então NormalizeDouble está errado. Faça-o corretamente.
Eu já li sobre isso antes, mas não entendi seu ponto até seu último link. Obrigado.
Por que eu ainda estaria obtendo respostas a múltiplas casas decimais se estou usando MathRound()? Eu tentei usar DoubleToString, mas isso não ajudou em nada. Isso se deve inteiramente às limitações da Print() ou há algo mais errado?
posSize = posSize * 10; MathRound(posSize); posSize = posSize / 10;
NoLimitações : Por que eu ainda estaria obtendo respostas a múltiplas casas decimais se estou usando MathRound() | MathRound retorna um duplo; número infinito de casas decimais. |
Não de acordo com a página do documento para isso. https://docs.mql4.com/math/mathround
"Valor de retorno
Valor arredondado até o número inteiro mais próximo".
Se for suposto, mas não for, então o MQ precisa ser notificado, ou eles precisam colocar uma etiqueta de aviso na função.
JD4 está certo, a página do documento diz que ele arredonda para o número inteiro mais próximo. Não tenho certeza de outra maneira de realizar o que eu estava tentando acima sem arredondar ou cortar um certo número de casas decimais. Qual seria o ponto de MathRound() ou round() se eles não retornarem um número inteiro?
Eu também tentei usar isso sem sucesso. Possivelmente a DTS simplesmente muda a precisão de um valor para a aparência e não o valor real? Não vejo nenhuma outra opção.
posSize = posSize * 100; DoubleToString(posSize,0); StringToDouble(posSize); posSize = posSize / 100;
- 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
Dentro de minha estratégia, uso uma função GetPosSize() para calcular tamanhos de posição. Estou usando apenas a estratégia com EURUSD no momento e, por toda a minha vida, não consigo entender porque o posSize está retornando um valor negativo, resultando em um erro de OrderSend 4051. Qualquer ajuda seria muito apreciada. Vou postar aqui todos os códigos relevantes. Nenhum outro cálculo para posSize é feito em todo o código, apenas a função é chamada. Todos os três pedaços de código separados estão dentro da função.