Escala de preço dolar

Maximiliano Salvatti  

Pessoal estou tentando deixar os valores enviados compra e venda, no dolar, na escala de 0.5.

Uso a função: MathRound((pValueToRound / 0.5) * 0.5)

Funciona, ele arredonda o valor e deixa na escala de 0.5.

Porem, quando se realiza um preço médio e o valor fica em 3172,50, essa função o arredonda para 3173 sendo que deveria manter o valor como estava.

Podem me ajudar nesse quesito?


Muito Obrigado.

Vinicius Pereira De Oliveira  
Maximiliano Salvatti:

Boa noite.


- MathRound(pValueToRound * 10) / 10   -   para 1 dígito após o ponto decimal;


- MathRound(pValueToRound * 100) / 100   -   para 2 dígitos após o ponto decimal;


- ou apenas a função NormalizeDouble().

Rogerio Giannetti Torres  
Maximiliano Salvatti:

Pessoal estou tentando deixar os valores enviados compra e venda, no dolar, na escala de 0.5.

Uso a função: MathRound((pValueToRound / 0.5) * 0.5)

Funciona, ele arredonda o valor e deixa na escala de 0.5.

Porem, quando se realiza um preço médio e o valor fica em 3172,50, essa função o arredonda para 3173 sendo que deveria manter o valor como estava.

Podem me ajudar nesse quesito?


Muito Obrigado.

Olá

você também pode usar  método  NormalizePrice( ) da classe CSymbol.


#include <Trade\SymbolInfo.mqh>
CSymbolInfo       m_symbol;
..
..
..
m_symbol.Name(DOLJ18);
..
..
preco=m_symbol.NormalizePrice(preco);
Drmqlbrazil5  
Rogerio Giannetti Torres:

Olá

você também pode usar  método  NormalizePrice( ) da classe CSymbol.


... complementando:

No caso de utilizar preco= NormalizeDouble(pValueToRound, _Digits)
Maximiliano Salvatti  

Obrigado Pessoal, 

Resolvi o problema com o código abaixo, não é o melhor, porem resolveu meu problema. 

Agora quando o preço chega como 3245.50 ele mantem assim, antes ele arredondava para 3246.


                  vRoundTemp = (MathRound(pValueToRound) - 1);

                  

                  if (vRoundTemp < (pValueToRound - 0.5))

                     {

                        vRoundFive = MathRound((pValueToRound / Escala_Ativo) * Escala_Ativo); 

                     }

                  else

                        vRoundFive = pValueToRound; 


Maximiliano Salvatti  
Rogerio Giannetti Torres:

Olá

você também pode usar  método  NormalizePrice( ) da classe CSymbol.


Rogerio obrigado pela dica, ficou muito bom.

Essa classe CSymbol sempre vem junto com o Metatrader? 

Precisa enviar junto com o .ex em caso de distribuição?

Rogerio Giannetti Torres  
Maximiliano Salvatti:

Rogerio obrigado pela dica, ficou muito bom.

Essa classe CSymbol sempre vem junto com o Metatrader? 

Precisa enviar junto com o .ex em caso de distribuição?

Olá boa tarde,

sim está na biblioteca do mql5. Basta você ler o material no manual de referência do mql5.  Tem também esse artigo https://www.mql5.com/pt/articles/138  que vai te ajudar a entender as classes da biblioteca padrão.



O uso de bibliotecas de classe de negócio padrão MQL5 ao escrever um Expert Advisor
O uso de bibliotecas de classe de negócio padrão MQL5 ao escrever um Expert Advisor
  • 2014.02.05
  • Samuel Olowoyo
  • www.mql5.com
O novo programa MQL5 vem com muitas bibliotecas de classe padrão destinadas a fazer o desenvolvimento do Consultor Especialista MQL5, Indicadores e Scripts o mais fácil possível para negociadores e desenvolvedores. Estas classes de bibliotecas estão disponíveis na pasta \Include\ localizada dentro da pasta MQL5 dentro da pasta terminal do...
ricar  
Rogerio Giannetti Torres:

Olá

você também pode usar  método  NormalizePrice( ) da classe CSymbol.


um dos posts mais uteis desse forum.

parabens!

Razão: