Lotsize Berechnung nicht immer Korrekt | MT4

 

Hallo Community,

Ich habe einen kleinen Indikator für den MT4 Programmiert bei dem ich Take Profit und Stop Loss Festlege und er berechnet mir die Positionsgröße. Das Funktioniert aber bisher nur bei eur/usd und De30, alles andere führt zu falschen Ergebnissen.

Welche Variable habe ich vergessen oder wie muss ich die Formel ändern?

Buy:

(AccountBalance()/100*Risk)/((Ask-ObjectGet("Stop Loss", OBJPROP_PRICE1))*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_CONTRACT_SIZE))

Sell:

(AccountBalance()/100*Risk)/((ObjectGet("Stop Loss", OBJPROP_PRICE1)-Bid)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_CONTRACT_SIZE))

 
Fischi84:

Hallo Community,

Ich habe einen kleinen Indikator für den MT4 Programmiert bei dem ich Take Profit und Stop Loss Festlege und er berechnet mir die Positionsgröße. Das Funktioniert aber bisher nur bei eur/usd und De30, alles andere führt zu falschen Ergebnissen.

Welche Variable habe ich vergessen oder wie muss ich die Formel ändern?

Buy:

Sell:


fragt sich halt wie deine Objekte konfiguriert sind, das geht hier ja nicht hervor

 
Gib mal oben rechts unter der Suche Lotgröße ein (oder schalte auf Englisch und lotsize) es gibt dazu bereits soooo viel code - suchen, aussuchen, kopieren = schneller besser sicherer!
 
amando:

fragt sich halt wie deine Objekte konfiguriert sind, das geht hier ja nicht hervor

Ja, das funktioniert wunderbar. Es geht nur um die Formel, die nicht vollständig sind.
 
Versuch's mal so
double curLot = (AccountBalance()/100*Risk)/((Ask-ObjectGet("Stop Loss", OBJPROP_PRICE1))*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_CONTRACT_SIZE))
curLot = getWorkingLots(curLot);




double getWorkingLots(double eLots) {

   double iLots;

   MinLots = MarketInfo(Symbol(), MODE_MINLOT);
   MaxLots = MarketInfo(Symbol(), MODE_MAXLOT);
   LotStep = MarketInfo(Symbol(), MODE_LOTSTEP);

   if (eLots < MinLots)
      iLots = MinLots;
   else {
      iLots = MinLots + NormalizeDouble((eLots - MinLots) / LotStep,0) * LotStep;
      if (iLots > MaxLots)
         iLots = MaxLots;
   }

   return(iLots);
}

 

Dominique Mikes:
Versuch's mal so

Du hast ja nur eine Rundung angehangen. Die gefällt mir zwar gut, aber sie ändert die Formel nicht. durch viel recherchieren und probieren habe ich Die Formel jetzt richtig. Ich finde es merkwürdig das diese Formel bisher nirgendwo bei Google oder hier im Forum verwendet wird.


Sell:

getWorkingLots((AccountBalance()/100*Risk)/(((ObjectGet("Stop Loss", OBJPROP_PRICE1)-Bid)*10000)*(1/Bid*10)))

Buy:

getWorkingLots((AccountBalance()/100*Risk)/(((Ask-ObjectGet("Stop Loss", OBJPROP_PRICE1))*10000)*(1/Ask*10)))


Die Funktion "getWorkingLots" gefällt mir vom aufbau sehr gut und ist auch Logisch. Dennoch habe ich es leider recht häufig das nach der Rundung eine "periode 9" entsteht. Wie lässt sich das beheben?



 

Troubles with the doubles!

Lies mal: https://www.mql5.com/de/articles/1561!
NormalizeDouble ist daher eigentlich überflüssig, denn man kriegt IMMER nur eine Näherung auf die angestrebten Dezimalstellen (es sei denn es geht sich gerade mit einer Zweierpotenz aus!).

Working with Doubles in MQL4
Working with Doubles in MQL4
  • 2009.11.04
  • MetaQuotes Software Corp.
  • www.mql5.com
The MQL programming opens new opportunities for the automated trading, many people all over the world already have appreciated it. When we are writing an Expert Advisor for trading, we must be sure that it will work correctly. Many newbies often have some questions when the results of some mathematical calculations differ from those expected...
 
Carl Schreiber:

Troubles with the doubles!

Lies mal: https://www.mql5.com/de/articles/1561!
NormalizeDouble ist daher eigentlich überflüssig, denn man kriegt IMMER nur eine Näherung auf die angestrebten Dezimalstellen (es sei denn es geht sich gerade mit einer Zweierpotenz aus!).

ganz so überflüssig ists das bei der Lotberechnung nicht, da viele Broker nur 2 Stellige Lot Zahlen akzeptieren

Grund der Beschwerde: