|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Berechnung eines Basiswertes mit variablem Exponenten
Hi, liebe Trader-Gemeinde,
um ein martingales MoneyManagement-System für einen kleinen EA zu erstellen, würde ich gern einen konstanten Wert mit einem variablen Exponenten (2², 2³, 2 hoch 4, 2 hoch 5 usw.) berechnen wollen. Plus, Minus, Multiplizieren, oder Dividieren; - alles kein Problem. Wie aber kann ich einen fixen Basiswert mit einem variablen Exponenten berechnen ? Hat da jemand eine zündende Idee, die mir weiterhelfen könnte? LG. piptrade |
|
|||
Auszug aus der MetaEditor-Hilfe:
MathPow The function raises a base to a specified power. double MathPow( double base, // base double exponent // exponent value ); Parameters: base [in] Base. exponent [in] Exponent value. Return Value Value of base raised to the specified power. Note Instead of MathPow() you can use pow(). traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Hello traderdoc, Thanks für die promte Antwort.
Hatte mir den Hinweis bereits in der "MQL4_Reference" angesehen, war aber unsicher. Könnte die praktische Anwendung ggf. "SO" aussehen, um mit fortschreitenden losses (1, 2, 3, 4, 5 ...) eine jeweilige Positions-Verdopplung (2, 4, 8, 16, 32 ...) zu erzielen ? double MathPow(double base,double exponent); // als globale Deklaration //--- //... int base = 2; int exponent = losses; int pow; lot = NormalizeDouble(lot *2 *(pow-1),1); //... Der kleine EA scheint es zumindest zu "schlucken"! - kein error, keine warnings ! Würde mich über ein kurzes Statement freuen; - DANKE ! LG. piptrade |
|
|||
Ne, keine Ahnung warum der Compiler da nicht würgt.
Evtl. mal ein #property strict den globalen Variablen voranstellen. Was soll das werden? double MathPow(double base,double exponent); // als globale Deklaration Das Ergebnis dieser Funktion müsste natürlich einer Variablen zugeordnet werden, sonst nutzt die Funktion nix. Und was soll das werden? int base = 2; int exponent = losses; int pow; lot = NormalizeDouble(lot *2 *(pow-1),1); Welchen Wert besitzen denn eigentlich die Variablen losses und pow? traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
MathPow(double base,double exponent);
---> ist die mathematische Festlegung "MathPow" für die Wertbasis ("base") = 2 und den Extonenten ("exponent") = losses int base = 2; ---> hier wird "base" fix definiert int exponent = losses; ---> hier wird der "exponent" variabel mit "losses" (Anzahl der letzten aufeinanderfolgenden VerlustTrades) definiert int pow; ---> und wenn ich für "MathPow" auch "pow" verwenden kann , muss ich dieses doch deklarieren. ---> Und dann folgt der Algorithmus für "lot": lot = NormalizeDouble(lot *2 *(pow-1),1); ---> die ursprünglich Lot-Größe muss also mit der "Verdoppler-Formel" multipliziert werden. Und diese Verdoppler-Formel ist gleich: ---> a(n) = 2 * 2 (hoch "n" - 1) In so weit sollte sich schon ein schlüssiger Sinn ergeben und der Compiler sollte "sich nicht getäuscht" haben. LG. piptrade |
|
|||
Zitat:
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Note
Instead of MathPow() you can use pow(). Darüber waren wir uns zu Beginn der Disskusion doch einig. Somit wird die Variable "MathPow" durch die Variable "pow" ersetzt und eindeutig für die Berechnung der Variablen "lot" verwendet. So weit mein Widerspruch. Richtig hingegen ist: "MathPow ist bereits eine MQL-Basisfunktion und wird nicht doppelt deklariert." Dem entsprechend konnte ich die ehemalige Dopplung deaktivieren; - das hat funktioniert. Tadellos ! Insoweit konnte die eine Sache vereinfacht werden; - sehr gut ! Die oben gestellte Frage allerdings hat mich nicht erleuchtet, sondern eher gezeigt, dass man mich nicht ganz versteht. LG. piptrade |
|
|||
Thanks, Lieber traderdoc,
ich werde den eben disskutierten Codeschnipsel morgen live testen und denke, dass er tadellos funktioniert. Dennoch beschäftigen mich mehrere Fragen, was meinen kleinen EA angeht. Hierzu hatte ich bereits meine konkrete Auftragserteilung avisiert, an der ich nach wie vor festhalte. Hier wäre ein konkreter EA lediglich im Code zu vereinfachen und in seiner Reaktionszeit zu beschleunigen.(Allerdings unter bewusst falsch deklarierten Parameter-Einstellungen ! - Sorry!) Was würde mich ein solcher "Spass" kosten ? Ein offizielles Angebot würde ich auch gern unter meiner privaten eMail-Adresse entgegennehmen. Soweit nochmals herzlichen Dank und LG. Euer piptrade |
|
|||
Zitat:
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Oh-Ha! Sorry traderdoc, - die Unterscheidung von "Funktion" und "Variablen" ist natürlich "So", wie von Dir beschrieben, richtig. Ebenso die Unterscheidung in der Deklaration. Hier der gesamte CodeSchnipsel, in welchem sicher noch zusätzliche Korrekturen von Nöten sind:
Code:
double LotsOptimized() { double lot=Lots; int orders=HistoryTotal(); int OpenPositions=0; //--- select lot size lot=NormalizeDouble(AccountFreeMargin() *MaximumRisk / 100, 2); //--- calculate number of OpenPositions without a break if(ProfitFactor>0) { for(int i=orders; i>=0; i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true) { if(OrderProfit()>0 ) break; if(OrderProfit()<=0) OpenPositions++; } } if(OpenPositions>0) // double MathPow(double base,double exponent); // Funktion !, // in welche "base" und "exponent" einfließen (globale Deklaration) int base = 2; int exponent = OpenPositions; double pow(); // Formel für Zahlenreihe der Verdopplung: a(n) = 2 *2(hoch OpenPositions - 1) lot = NormalizeDouble(lot *2 *(pow()-1),2); } //--- return lot size if(lot<0.01) lot=0.01; return(lot); } In der Hoffnung, dass wenigstens einige Dinge richtig sind, erwarte ich mit Spannung den nächsten Kommentar. LG. piptrade |
Lesezeichen |
Stichworte |
exponent, exponentialfunktion, moneymanagement, mql4, programmierung, programmierung metatrader, programmierung mql4 |
|
|