Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 5 > Programmierung MQL5

Programmierung MQL5 Hier gehts rund ums Programmieren in MQL5.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4862
Beiträge: 42864
Benutzer: 7.164
Aktive Benutzer: 79
Links: 83
Wir begrüßen unseren neuesten Benutzer: Shyam
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 2 Tagen
- Shyam
vor einer Woche
- Nobby2000
vor einer Woche
- Wacked1
vor 3 Wochen
- Util
vor 4 Wochen
- Hardy61

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 22
Gesamt: 22
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 29.06.22
Neues Mitglied
 
Registriert seit: May 2020
Ort: Duisburg
Beiträge: 26
Aleksi befindet sich auf einem aufstrebenden Ast
Standard Lot abrunden

Es gib Dituationen in den die kalkulierte Lot zb 1.02 ist aber die Schrittweite alle 1.0 lot ist.

Also hatte ich mir überlegt eine Funktion zu schreiben die mir die Lot abrunden soll, ich seh nicht wo es klemmt, kann mir wer helfen?


Code:
double roundLotdown(double lots)
  {
   double startLots = lots;
   double lotstep = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP),2);
   lots = NormalizeDouble(lots,2);

   double rest = (lots - NormalizeDouble(lots/lotstep,2)) * lotstep;
   rest = NormalizeDouble(rest,2);
   if(rest != 0)
     {
      for(double i = 0.01; i <= lotstep; i += 0.01)
        {
         lots = NormalizeDouble(lots - 0.01,2);
         rest = (lots - NormalizeDouble(lots/lotstep,2)) * lotstep;
         rest = NormalizeDouble(rest,2);
         if(rest == 0)
            break;
        }
     }
     
   return lots;
  }
Mit Zitat antworten
  #2 (permalink)  
Alt 29.06.22
Benutzerbild von Indikator-Trading
Premium Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 314
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

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);
}
Mit Zitat antworten
  #3 (permalink)  
Alt 29.06.22
Neues Mitglied
 
Registriert seit: May 2020
Ort: Duisburg
Beiträge: 26
Aleksi befindet sich auf einem aufstrebenden Ast
Standard

Danke dir, allerdings steig ich jetzt nicht so ganz hinter...
Code:
CSymbolInfo &Local_symbol
Klassen direkt in der parameterübergabe ? hab ich noch nie gesehen...
Mit Zitat antworten
  #4 (permalink)  
Alt 30.06.22
Benutzerbild von Indikator-Trading
Premium Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 314
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

Code:
  #include <Trade\SymbolInfo.mqh>
//...
//...
  CSymbolInfo Local_symbol;
  Local_symbol.Name("EURUSD");
  Local_symbol.RefreshRates();  

  double positionSize = RoundLotsizeDown(Local_symbol, 1.013548);
https://www.mql5.com/de/docs/standar...es/csymbolinfo
Mit Zitat antworten
  #5 (permalink)  
Alt 01.07.22
Neues Mitglied
 
Registriert seit: May 2020
Ort: Duisburg
Beiträge: 26
Aleksi befindet sich auf einem aufstrebenden Ast
Standard

Danke dir, top!
Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +2. Es ist jetzt 06:49 Uhr.





Die Suchmaschine - Der Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2022 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2020 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------