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: 4978
Beiträge: 43259
Benutzer: 7.223
Aktive Benutzer: 76
Links: 84
Wir begrüßen unseren neuesten Benutzer: patrickmsulzeay6506
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 54 Minuten
- patrickmsu...
vor einer Woche
- AlbertZiz
vor einer Woche
- michak
vor 2 Wochen
- Amateur
vor 2 Wochen
- infos1982

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

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 24.09.17
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 157
piptrade befindet sich auf einem aufstrebenden Ast
Standard 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
  #2 (permalink)  
Alt 24.09.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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.
  #3 (permalink)  
Alt 24.09.17
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 157
piptrade befindet sich auf einem aufstrebenden Ast
Standard

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
  #4 (permalink)  
Alt 24.09.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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.
  #5 (permalink)  
Alt 24.09.17
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 157
piptrade befindet sich auf einem aufstrebenden Ast
Standard

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
  #6 (permalink)  
Alt 24.09.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von piptrade Beitrag anzeigen
MathPow(double base,double exponent);
---> ist die mathematische Festlegung "MathPow" für die Wertbasis ("base") = 2 und den Extonenten ("exponent") = losses

MathPow ist bereits eine MQL-Basisfunktion und wird nicht doppelt deklariert.
Das Ergebnis dieser Funktion wird nach wie vor keiner Variablen zugeordnet.


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.

pow wird bisher kein Wert zugewiesen.

---> 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
Das Verständnisproblem liegt sicherlich darin, dass diese Codeteile eben nur in der Luft hängende Teile sind, die so in dieser Form nicht zu einem sinnvollen Ergebnis führen werden. Daher wäre es notwendig, dass der lauffähige Code hier reingestellt wird, an dem dann weitere Diskussionen geführt werden können.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #7 (permalink)  
Alt 24.09.17
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 157
piptrade befindet sich auf einem aufstrebenden Ast
Standard

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
  #8 (permalink)  
Alt 24.09.17
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 157
piptrade befindet sich auf einem aufstrebenden Ast
Standard

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
  #9 (permalink)  
Alt 24.09.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von piptrade Beitrag anzeigen
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.
MathPow ist aber keine Variable, sondern eine Funktion, die einen Wert zurückgibt, der in eine Variable gespeichert werden kann. Das ist ein riesengroßer Unterschied. Dass pow auch MathPow() sein kann, kann eben nicht sein! Weil erstens das pow in den ersten Posts keine Funktion, sondern eine Variable war, deklariert als int. Und zweitens, wenn nun schon pow die wertaufnehmende Variable von MathPow() sein soll, dann müsste pow mit double deklariert werden. Und drittens wäre pow() wiederum eine Funktion und keine Variable, die auch nicht mit int zu deklarieren wäre.

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
Richtig, im obigen Teil besteht nach wie vor eine Unverständlichkeit. Deshalb ja auch meine Bitte, den gesamten Code in seiner logischen Abfolge hier reinzustellen.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #10 (permalink)  
Alt 25.09.17
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 157
piptrade befindet sich auf einem aufstrebenden Ast
Standard

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);
  }
Das "Teil" soll eigentlich nur prüfen, wieviele Order noch offen sind und (die Anzahl der offenen Order - Minus "1") in der Formel als Exponenten verwenden.
In der Hoffnung, dass wenigstens einige Dinge richtig sind, erwarte ich mit Spannung den nächsten Kommentar.
LG. piptrade
Thema geschlossen

Lesezeichen

Stichworte
exponent, exponentialfunktion, moneymanagement, mql4, programmierung, programmierung metatrader, programmierung mql4

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 +2. Es ist jetzt 14:41 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.
-----------------------------------------------------------------------------------------------------------------------------