Erro Calculando TK e ST

 
Estou autamatizando uma estrategia em açoes porem no momento do envio da ordem e calculo de ST e TK por exemplo coloco 0.30 de TK, mas ele interpreta 0.29999999999, como faço para mater 0.30?
 
NFONSECA:

Boa noite.


Você pode tentar:

//=== Global input variables
input int iStopLoss   = 300;   // Stop Loss - Points
input int iTakeProfit = 300;   // Take Profit - Points

...

double BID, ASK, SL, TP;

//--- Determines last price for current symbol
BID = SymbolInfoDouble(Symbol(), SYMBOL_BID);
ASK = SymbolInfoDouble(Symbol(), SYMBOL_ASK);

//--- Calculates stop loss and take profit - BUY
SL  = NormalizeDouble(ASK - (iStopLoss   * Point()), Digits());
TP  = NormalizeDouble(ASK + (iTakeProfit * Point()), Digits());

//--- Calculates stop loss and take profit - SELL
SL  = NormalizeDouble(BID + (iStopLoss   * Point()), Digits());
TP  = NormalizeDouble(BID - (iTakeProfit * Point()), Digits());
 
Vinicius de Oliveira:

Boa noite.


Você pode tentar:



Bom dia

Tentei fazer assim mas ainda fica errado

 
NFONSECA:


Bom dia.


O problema parece ser bem diferente do que eu tinha entendido pela sua mensagem anterior. Pelo que eu entendi agora, você está fazendo o seguinte:

input double STP = 0.30;

Mas o MT5 está alterando o valor do parâmetro para 0.2999..., é isso? Se for esse o problema, eu também já tive um problema semelhante com um parâmetro tipo double quanto eu informava o valor de 0.07. Quando eu acessava novamente os parâmetros do robô, ele tinha salvado 0.0700...001. Qualquer outro valor ele aceitava normalmente, menos 0.07.

Você pode contornar esse problema usando o NormalizeDouble() mesmo, informando o número de dígitos após o ponto decimal que você deseja trabalhar. Por exemplo:

STP1 = NormalizeDouble(STP, 2);
Depois, onde você estava utilizando STP, altera para STP1.
Documentação sobre MQL5: Funções de Conversão / NormalizeDouble
Documentação sobre MQL5: Funções de Conversão / NormalizeDouble
  • www.mql5.com
NormalizeDouble - Funções de Conversão - Referência MQL5 - Referência sobre algorítimo/automatização de negociação na linguagem para MetaTrader 5
 
Vinicius de Oliveira:

Bom dia.


O problema parece ser bem diferente do que eu tinha entendido pela sua mensagem anterior. Pelo que eu entendi agora, você está fazendo o seguinte:

Mas o MT5 está alterando o valor do parâmetro para 0.2999..., é isso? Se for esse o problema, eu também já tive um problema semelhante com um parâmetro tipo double quanto eu informava o valor de 0.07. Quando eu acessava novamente os parâmetros do robô, ele tinha salvado 0.0700...001. Qualquer outro valor ele aceitava normalmente, menos 0.07.

Você pode contornar esse problema usando o NormalizeDouble() mesmo, informando o número de dígitos após o ponto decimal que você deseja trabalhar. Por exemplo:

Depois, onde você estava utilizando STP, altera para STP1.

Tentei fazer isso

double TKP2 = NormalizeDouble (TKP,2);

Ou seja o TKP = 0.3 mas ainda assim

Muito estranho

 
NFONSECA:


Nos parâmetros vai continuar aparecendo o valor errado. Acho que não tem como corrigir isso. Acho que o problema é no MT5 mesmo (devem corrigir nas próximas versões). O que você pode é contornar o problema a partir do seu código, como lhe falei anteriormente, arredondando o valor do parâmetro para 2 decimais (ou quantas você quiser) com o NomalizeDouble().

Razão: