//+------------------------------------------------------------------+//| Verifica a validez do volume da ordem |//+------------------------------------------------------------------+bool CheckVolumeValue(double volume,string &description)
{
//--- valor mínimo permitido para operações de negociaçãodouble min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
if(volume<min_volume)
{
description=StringFormat("Volume inferior ao mínimo permitido SYMBOL_VOLUME_MIN=%.2f",min_volume);
return(false);
}
//--- volume máximo permitido para operações de negociaçãodouble max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
if(volume>max_volume)
{
description=StringFormat("Volume superior ao máximo permitido SYMBOL_VOLUME_MAX=%.2f",max_volume);
return(false);
}
//--- obtemos a gradação mínima do volumedouble volume_step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);
int ratio=(int)MathRound(volume/volume_step);
if(MathAbs(ratio*volume_step-volume)>0.0000001)
{
description=StringFormat("O volume não é múltiplo da gradação mínima SYMBOL_VOLUME_STEP=%.2f, volume mais próximo do valido %.2f",
volume_step,ratio*volume_step);
return(false);
}
description="Valor válido do volume";
return(true);
}
Sugiro implementar também uma função para normalizar o volume:
//+--------------------------------------------------------------------------------------------------------------------+//| This function normalizes the volume according to the minimum volume change step |//+--------------------------------------------------------------------------------------------------------------------+bool NormalizeVolume(string symbol, double &lots)
{
// Local variablesdouble LotMin, LotMax, LotStep;
// Minimal allowed volume for trade operationsif(!SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN, LotMin))
{
Print(__FUNCTION__, " - Error getting the SYMBOL_VOLUME_MIN: ", GetLastError(), " - ", symbol);
return(false);
}
// Maximal allowed volume for trade operationsif(!SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX, LotMax))
{
Print(__FUNCTION__, " - Error getting the SYMBOL_VOLUME_MAX: ", GetLastError(), " - ", symbol);
return(false);
}
// Get minimal step of volume changingif(!SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP, LotStep))
{
Print(__FUNCTION__, " - Error getting the SYMBOL_VOLUME_STEP: ", GetLastError(), " - ", symbol);
return(false);
}
// Normalizes the volume
lots = LotMin + MathFloor((lots - LotMin) / LotStep) * LotStep;
lots = NormalizeDouble(MathMin(LotMax, MathMax(LotMin, lots)), 2);
// Normalized volumereturn(true);
}
Esta é a função que verifica o volume:
Sugiro implementar também uma função para normalizar o volume:
V. Teste do Produto
Muito Obrigado meu amigo!
I am not receiving confirmation via SMS or Telegram to confirm the seller registration.
Has anyone managed to do this?
Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação
Não recebo sms de texto e não recebo mensagem no telegran....Para enviar o codigo de confirmação e me tornar vendedor
Vinicius Pereira De Oliveira, 2023.07.29 01:23
Fale conosco (mql5.com)
Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação
Não recebo sms de texto e não recebo mensagem no telegran....Para enviar o codigo de confirmação e me tornar vendedor
Vinicius Pereira De Oliveira, 2024.02.04 13:13
Passo a passo: