Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4973
Beiträge: 43248
Benutzer: 7.219
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: Hopfen&Malz
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- Hopfen&Mal...
vor 2 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107
vor 2 Wochen
- rg-trader

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

Empfehlungen

Like Tree1Likes
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 23.12.20
Benutzerbild von RalphD
Neues Mitglied
 
Registriert seit: Jul 2019
Beiträge: 24
RalphD befindet sich auf einem aufstrebenden Ast
Standard Positionsgröße berechnen

Hallo zusammen,

seit ca. zwei Wochen beschäftige ich mich intensiv mit dem Codeing. Die ersten EA´s laufen ganz gut. Jetzt verheitze ich mich aber schon seit Tagen an der Positionsgrößenberechnung.

Ich möchte den Eurobetrag pro Trade eingeben und anhand des SL soll dann die Size berechnet werden. Was auch gehen würde, besser beides um es auszuwählen, wäre die Berechnung in Prozent der Kontogröße.

Leider habe ich bis jetzt nichts Erklärendes dazu gefunden.

Kann mir da jemand bitte helfen eine Quelle zu finden, wo das erklärt wird? Oder vielleicht sogar einen Codeschnipsel dazu hat.

Vielen Dank im voraus.
Ralph
  #2 (permalink)  
Alt 23.12.20
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Nun ja, wo liegt das Problem?

Die Formel lautet doch ganz einfach:

Profit = Lot * Pips * Tickvalue

Das Umstellen nach Lot überlasse ich Dir.
Pips sind dabei wirklich die Änderungen in der letzten Kommastelle und
Tickvalue ist der Geldbetrag der Änderung in der letzten Stelle.
Ansonsten statt Profit x%*Kontogröße/100 einsetzen.

Traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #3 (permalink)  
Alt 23.12.20
Benutzerbild von RalphD
Neues Mitglied
 
Registriert seit: Jul 2019
Beiträge: 24
RalphD befindet sich auf einem aufstrebenden Ast
Standard

Danke für die schnelle Antwort.

Die Formel ist nicht das Problem. Es ist mehr die Umsetzung. Ich weiß z.B. nicht wann ich NomalizeDouble, _Point oder Digits oder einen Umrechnungsfaktor verwenden muss. Oder ob ich da vielleicht einen total umständlichen Weg gewählt habe.
Ich habe mal meine Testdatei hier rein gestellt. Und schon mal sorry dafür. Bin halt noch ganz am Anfang.
Angehängte Dateien
Dateityp: mq4 SizeBerechnung.mq4 (3,0 KB, 9x aufgerufen)
  #4 (permalink)  
Alt 23.12.20
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von RalphD Beitrag anzeigen
Danke für die schnelle Antwort.

Die Formel ist nicht das Problem. Es ist mehr die Umsetzung. Ich weiß z.B. nicht wann ich NomalizeDouble, _Point oder Digits oder einen Umrechnungsfaktor verwenden muss. Oder ob ich da vielleicht einen total umständlichen Weg gewählt habe.
Ich habe mal meine Testdatei hier rein gestellt. Und schon mal sorry dafür. Bin halt noch ganz am Anfang.
Anstatt
double Kerzenrange=((High[1]-Low[1])*10000);

muss stehen:

double Kerzenrange=((High[1]-Low[1])/Point);

Und die Formel scheint doch ein Problem zu sein, da in Deiner Formel Tickvalue fehlt: MarketInfo(Symbol(), MODE_TICKVALUE)

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #5 (permalink)  
Alt 23.12.20
Benutzerbild von RalphD
Neues Mitglied
 
Registriert seit: Jul 2019
Beiträge: 24
RalphD befindet sich auf einem aufstrebenden Ast
Standard

Danke für die Korrektur der Berechnung.
MarketInfo. Hm?!?
Ich sag ja. Ich bin ganz am Anfang. Nun habe ich zwar die Info, kann aber damit noch nicht wirklich was anfangen. Ich werde damit weiter experimentieren. Dann wird es wohl weiter gehen mit Try and Error.
Wo kann man denn darüber etwas nachlesen?
  #6 (permalink)  
Alt 23.12.20
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Na dann will ich Deinem Try and Error mal ein rasches Ende setzen:

int LS = (int)(-MathLog10(MarketInfo(Symbol(),MODE_LOTSTEP)));
double TV = MarketInfo(Symbol(), MODE_TICKVALUE);
double TP = (High[1]-Low[1])/Point;

double Lot = NormalizeDouble(AccountBalance()*Risiko%/100/TP/TV, LS);

Schöne Weihnachten!

traderdoc
RalphD likes this.
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #7 (permalink)  
Alt 23.12.20
Benutzerbild von RalphD
Neues Mitglied
 
Registriert seit: Jul 2019
Beiträge: 24
RalphD befindet sich auf einem aufstrebenden Ast
Standard

Das ist wahnsinnig nett von dir. Vielen lieben Dank.

Allerdings muss ich gestehen, dass ich das nur teilweise verstehe. Das macht aber nichts. Ich habe jetzt einen Ansatz nach was ich suchen muss. ich verstehe nämlich gern was ich mache. Werde mir erst mal anschauen was die einzelnen Variablen machen. Vielleicht hast du ja Lust das mal irgendwann zu erklären. Bis dahin frage ich Tante Google erstmal.

Nochmal vielen Dank und ein schönes Weihnachtsfest.

Ralph
  #8 (permalink)  
Alt 23.12.20
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von RalphD Beitrag anzeigen
Das ist wahnsinnig nett von dir. Vielen lieben Dank.

Allerdings muss ich gestehen, dass ich das nur teilweise verstehe. Das macht aber nichts. Ich habe jetzt einen Ansatz nach was ich suchen muss. ich verstehe nämlich gern was ich mache. Werde mir erst mal anschauen was die einzelnen Variablen machen. Vielleicht hast du ja Lust das mal irgendwann zu erklären. Bis dahin frage ich Tante Google erstmal.

Nochmal vielen Dank und ein schönes Weihnachtsfest.

Ralph
Als zusätzliches Weihnachtsgeschenk die Erklärung:
LS ist die Anzahl der Kommastellen der vom Broker festgelegten Lotgrößen. Die werden abgeleitet aus der Schrittweite der Lotgrößenänderung.
TV ist das bereits erwähnte Tickvalue, also der Wert in Accountwährung, der bei Änderung des Kurses in der letzten Stelle nach dem Komma eintritt.
TP ist der TakeProfit aus Deiner Berechnung bzgl. der Differen z des High und des Low der letzten geschlossenene Kerze dividiert durch Point, dem Wert der kleinsten Wertänderung dargestellt als Dezimalzahl.

Na ja und Lot ist nun die umgestellte Formel, die ich bereits in Post 2 schrieb, ergänzt um die korrekte Berechnung bzgl. der möglichen Lot-Kommastelle als normalisierte Double-Zahl.

Viel Erfolg!

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #9 (permalink)  
Alt 24.12.20
Benutzerbild von RalphD
Neues Mitglied
 
Registriert seit: Jul 2019
Beiträge: 24
RalphD befindet sich auf einem aufstrebenden Ast
Standard

Du bist mein Held. Das bringt mich wieder etwas weiter. Vielen Dank.

Ich hoffe, ich bin auch mal irgend wann in der Lage anderen hier zu helfen. Im Moment bin ich leider nur am nehmen und nicht am geben.

Nochmal Danke und liebe Grüße
Ralph
  #10 (permalink)  
Alt 07.01.21
Benutzerbild von RalphD
Neues Mitglied
 
Registriert seit: Jul 2019
Beiträge: 24
RalphD befindet sich auf einem aufstrebenden Ast
Standard

Hallo traderdoc,

kannst du mir bitte nochmal helfen?

Die Berechnung funktioniert jetzt. Zumindest wenn ich es in einem abgespeckten Code teste. Nun bin ich am verzweifeln. Ich bekomme im Tester immer einen "zero divide". Wie bekomme ich den StopLoss in die Berechnung? Muss der vorher noch in ein anderes Format als double geändert werden? Der bringt mir hier bei stopLoss den Fehler:

2021.01.07 12:49:13.902 2020.12.28 00:00:00 EA_EMA510v0.006 EURUSD',H1: zero divide in 'EA_EMA510v0.006.mq4' (138,83)

double lotSize = NormalizeDouble(AccountEquity() * riskPercent / 100 / stopLoss / PV, LS);
HTML-Code:
//+------------------------------------------------------------------+
//|   Sell Stop Order                                                |
//+------------------------------------------------------------------+
   if(signal=="Verkaufen" && OrdersTotal()==0)
      stopLoss=High[LastCandleHigh]+15*_Point;
      double PV = MarketInfo(Symbol(), MODE_TICKVALUE);
      int LS = (MarketInfo(Symbol(),MODE_LOTSTEP) == 0.1) + 2 * (MarketInfo(Symbol(),MODE_LOTSTEP) == 0.01); //Schrittweite der Lots
      double lotSize = NormalizeDouble(AccountEquity() * riskPercent / 100 / stopLoss / PV, LS);

      ticket=OrderSend
      (
         _Symbol,                         // string   symbol
         OP_SELLSTOP,                     // int      operation
         lotSize,                         // Volume
         Low[1]-5*_Point,                 // Preis (Bid oder Ask)
         10,                              // Slippage
         stopLoss,                        // SL Low- 1,5 Punkt
         Low[1]-TakeProfit/10000,         // TP double   take profit
         "EMA510 Sell 006",               // string   comment
         MagicID,                         // int      magic number
         0,                               // datetime pending order expiration
         clrRed                           // color
      );
//+------------------------------------------------------------------+
//|   Buy Stop Order                                                 |
//+------------------------------------------------------------------+
   if(signal=="Kaufen" && OrdersTotal()==0)
       stopLoss=Low[LastCandleLow]-5*_Point;
       PV = MarketInfo(Symbol(), MODE_TICKVALUE);
       LS = (MarketInfo(Symbol(),MODE_LOTSTEP) == 0.1) + 2 * (MarketInfo(Symbol(),MODE_LOTSTEP) == 0.01); //Schrittweite der Lots
       lotSize = NormalizeDouble(AccountEquity() * riskPercent / 100 / stopLoss / PV, LS);

      ticket=OrderSend
      (
         _Symbol,
         OP_BUYSTOP,                      // int      operation
         lotSize,                         // Volume
         High[1]+10*_Point,               // Preis (Bid oder Ask)
         10,                              // Slippage
         stopLoss,                        // SL Low- 0,5 Punkt
         High[1]+TakeProfit/10000,        // TP double   take profit
         "EMA510 Buy 006",                // string   comment
         MagicID,                         // int      magic number
         0,                               // datetime pending order expiration
         clrGreen                         // color
      );
Thema geschlossen

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 +1. Es ist jetzt 18:28 Uhr.





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