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 |
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 |
Liste der Anhänge anzeigen (Anzahl: 1)
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. |
Zitat:
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 |
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? |
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 |
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 |
Zitat:
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 |
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 |
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:
//+------------------------------------------------------------------+ |
Alle Zeitangaben in WEZ +2. Es ist jetzt 10:46 Uhr. |
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum