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.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3784
Beiträge: 36758
Benutzer: 5.988
Aktive Benutzer: 484
Links: 80
Wir begrüßen unseren neuesten Benutzer: Geccco
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor einem Tag
- Geccco
vor einem Tag
- forexadven...
vor einem Tag
- mikedyke
vor 2 Tagen
- dmaha
vor 4 Tagen
- Take2

Onlineuser
'Wer ist online' anzeigen Benutzer: 1
Gäste: 66
Gesamt: 67
Team: 0
Team:  
Benutzer:  Domke01
Freunde anzeigen

Empfehlungen

Werbung

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor 3 Wochen
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 116
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
Mit Zitat antworten
  #2 (permalink)  
Alt vor 3 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.857
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.
Mit Zitat antworten
  #3 (permalink)  
Alt vor 3 Wochen
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 116
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
Mit Zitat antworten
  #4 (permalink)  
Alt vor 3 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.857
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.
Mit Zitat antworten
  #5 (permalink)  
Alt vor 3 Wochen
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 116
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
Mit Zitat antworten
  #6 (permalink)  
Alt vor 3 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.857
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.
Mit Zitat antworten
  #7 (permalink)  
Alt vor 3 Wochen
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 116
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
Mit Zitat antworten
  #8 (permalink)  
Alt vor 3 Wochen
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 116
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
Mit Zitat antworten
  #9 (permalink)  
Alt vor 3 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.857
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.
Mit Zitat antworten
  #10 (permalink)  
Alt vor 3 Wochen
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 116
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
Mit Zitat antworten
Antwort

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:38 Uhr.



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