Lotsize Berechnung nicht immer Korrekt | MT4

Einloggen oder registrieren, um einen Kommentar zu schreiben
Fischi84
15
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:

(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))

amando
935
amando  
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

Carl Schreiber
Moderator
7253
Carl Schreiber  
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!
Fischi84
15
Fischi84  
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.
Dominique Mikes
1077
Dominique Mikes  
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);
}

Fischi84
15
Fischi84  

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?



Carl Schreiber
Moderator
7253
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!).

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...
amando
935
amando  
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

Einloggen oder registrieren, um einen Kommentar zu schreiben