estou usando NormalizeDouble porém não está funcionando como desejado.
os resultados apontados no debug das variáveis onde eu necessito normalizar ainda aparecem os valores após os 2 digitos.
Alguma sugestão?
O MQL5 é bizarro em alguns tratamentos. Minha sugestão é fazer o cálculo antes, e depois usar o NormalizeDouble()...
Estou chutando... Não sei se resolverá...
;)
O MQL5 é bizarro em alguns tratamentos. Minha sugestão é fazer o cálculo antes, e depois usar o NormalizeDouble()...
Estou chutando... Não sei se resolverá...
;)
assim voce fala?
void recuperarPorcentagem(){ double porcentagem = inputRecuperacao*0.01; NormalizeDouble(porcentagem,2); double saldoRecuperado = saldoPerdedor + ((saldoPerdedor*porcentagem)*-1); NormalizeDouble(saldoRecuperado,2); for(int i = PositionsTotal()-1; i>=0; i--) { string symbol = PositionGetSymbol(i); ulong magic = PositionGetInteger(POSITION_MAGIC); if(symbol == _Symbol && magic==magicNumber) { ulong PositionTicket = PositionGetInteger(POSITION_TICKET); double ProfitAtual = PositionGetDouble(POSITION_PROFIT); if(ProfitAtual >= saldoRecuperado){ Fechar(); } } } }
assim voce fala?
Não, a sugestão foi de operar todo cálculo e depois "normalizar".
void recuperarPorcentagem() { double porcentagem = inputRecuperacao*0.01; double saldoRecuperado = saldoPerdedor + ((saldoPerdedor*porcentagem)*-1); NormalizeDouble(saldoRecuperado,2); ... ... } OU void recuperarPorcentagem() { double saldoRecuperado = saldoPerdedor + ((saldoPerdedor*inputRecuperacao*0.01)*-1); NormalizeDouble(saldoRecuperado,2); ... ... }
Olá,
Veja, no fórum em inglês, tem um gringo que diz: A função NormalizeDouble do mt não funciona muito bem.
Seguindo esse conselho dele eu criei minha propria função para 'normalizar' Double, segue ela, espero que ajude. Nota que alem de normalizar os Doubles ele arredonda o valor
//+------------------------------------------------------------------+ //| NormalizeDouble.mq4 | //| Copyright 2019, DsTrade Corp. | //| www.dstrade.com.br | //+------------------------------------------------------------------+ #property copyright "Copyright 2019, DsTrade Corp." #property link "www.dstrade.com.br" #property version "1.00" #property strict input double varNumberToNormalize = 35.67845; //Numero para normalizar input int varNumberDecimal = 2; //Numero para normalizar de 1 até 3 //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- Alert(DoubleToStr(NormalizeNumber(varNumberToNormalize),varNumberDecimal)); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double NormalizeNumber(double number) { // exemplo transformando em decimal de 2 casas // 37.66666 * variavel de decimal =3766.66 // 3766.66 + .5 =3767.16 para arredondar o valor // faça um cast para int, para que o valor seja 3767 // dividido por variavel de decimal para que o valor convertido fique em 37.67 //caso queira mais casas decimais ai divida por 10,100,1000 etc int decimal = 0; //casas decimais if(varNumberDecimal==1) // uma casa decimal decimal = 10; if(varNumberDecimal==2) //duas casas decimais decimal = 100; if(varNumberDecimal==3) //tres casas decimais decimal = 1000; double value = (int)(number * decimal + .5); //Calculo return (double)value / decimal; } //+------------------------------------------------------------------+
Olá,
Veja, no fórum em inglês, tem um gringo que diz: A função NormalizeDouble do mt não funciona muito bem.
Seguindo esse conselho dele eu criei minha propria função para 'normalizar' Double, segue ela, espero que ajude. Nota que alem de normalizar os Doubles ele arredonda o valor
Pressuposto... e talvez para MT4..., e, talvez para 32 bits...
Você está postando código de uma versão de MQL que já está em extinção... As Libraries de C para 64 bits são mais precisas e inclusive não tem resíduos, principalmente no MT5.
Evandro, siga a ideia original!
;)
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- 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
os resultados apontados no debug das variáveis onde eu necessito normalizar ainda aparecem os valores após os 2 digitos.
Alguma sugestão?