|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
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. |
|
||||
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
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
||||
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
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
||||
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
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
||||
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:
//+------------------------------------------------------------------+ //| 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 ); |
Lesezeichen |
|
|