
29.06.22
|
 |
Premium Mitglied
|
|
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 326
|
|
Hier ist die Funktion, welche ich dafür programmiert habe.
Code:
//+------------------------------------------------------------------+
//| Helperfunction to get a valid Lotsize |
//+------------------------------------------------------------------+
double RoundLotsizeDown(CSymbolInfo &Local_symbol, double TempLotsize)
{
int LotRoundSize = 0;
double MinStep = 0;
int Multiplier = 1;
if(Local_symbol.LotsMin() < Local_symbol.LotsStep())
{
MinStep = Local_symbol.LotsMin();
if(MinStep >= 1)
{
LotRoundSize = 0;
if(MinStep > 1)
{
if(MathMod(MinStep, 10) == 0)
Multiplier = 10;
if(MathMod(MinStep, 100) == 0)
Multiplier = 100;
if(MathMod(MinStep, 1000) == 0)
Multiplier = 1000;
}
else
Multiplier = 1;
}
else
LotRoundSize = (int)log10(1 / Local_symbol.LotsMin());
}
else
{
MinStep = Local_symbol.LotsStep();
if(MinStep >= 1)
{
LotRoundSize = 0;
if(MinStep > 1)
{
if(MathMod(MinStep, 10) == 0)
Multiplier = 10;
if(MathMod(MinStep, 100) == 0)
Multiplier = 100;
if(MathMod(MinStep, 1000) == 0)
Multiplier = 1000;
}
else
Multiplier = 1;
}
else
LotRoundSize = (int)log10(1 / Local_symbol.LotsMin());
}
// Print("LotRoundSize: ", LotRoundSize, " Multiplier: ", Multiplier);
double Loto_ = 0;
double LotNormalized = 0;
int TempInterger = 0;
if(LotRoundSize == 0)
{
Loto_ = TempLotsize;
TempInterger = (int)(Loto_ / Multiplier);
LotNormalized = NormalizeDouble(TempInterger * Multiplier, 0);
}
else
{
Loto_ = Local_symbol.LotsMin() * TempLotsize * MathPow(10, LotRoundSize);
LotNormalized = NormalizeDouble(Loto_, (int)log10(1 / Local_symbol.LotsMin()));
}
//Print("Loto_: ", Loto_);
// Print("LotNormalized: ", LotNormalized);
if(LotNormalized > Loto_)
LotNormalized = LotNormalized - MinStep; // Only decrease, not increase the risk!
if(LotNormalized > Local_symbol.LotsMax())
LotNormalized = Local_symbol.LotsMax();
if(LotNormalized < Local_symbol.LotsMin())
{
//LotNormalized= Local_symbol.LotsMin();
/* Print("#################################################################################");
Print("Calculated Lot smaller than MINLOT");
Print("#################################################################################");
Print("Lotsize Set to 0 to avoid to open the Trade!");*/
LotNormalized = 0;
}
return(LotNormalized);
}
|