Formula Calculation
- Bibliotheken
- Dmitry Fedoseev
- Version: 1.0
Bibliothek zum Berechnen von Formeln.
Die Formel wird durch eine Zeichenkette angegeben. Sie können die Formel in einer String-Variablen im Eigenschaftsfenster festlegen.
Die Formel kann arithmetische Operationen "+-/*" und alle Funktionen außer MathRand() enthalten: abs(), arccos(), arcsin(), arctan(), sin(), cos(), tan(), exp(), log(), mod(), max(), min(), pow(), ceil(), sqrt(), log10(), floor(), round(). Darüber hinaus kann die Formel Zahlen (bei Bruchzahlen ist das Trennzeichen ein Punkt) und Argumente enthalten. Ein Argument beginnt mit dem Buchstaben "a" (lateinisch) und einer Zahl, z.B.: "a0", "a1", usw.
Beispielformel: "sqrt(a1*log10(a0))*a2+10.5". Beachten Sie, dass die Formel beliebig sein kann und dies nur ein Beispiel ist.
Bibliothek importieren:
#import "Market//Formula Calculation.ex4" int AddFormula(string Formula); void FormulaSetArgument(int FormulaIndex,int ArgumentIndex,double ArgumentValue); bool FormulaSolve(int FormulaIndex,double & Result); void FormulaFreeAll(); #import
Beschreibung der Bibliotheksfunktion:
int AddFormula(string Formula) - Funktion zum Hinzufügen einer Formel zur Bibliothek. Sie wird bei der Initialisierung eines Expert Advisors oder Indikators, in dem die Bibliothek verwendet wird, aufgerufen. Die Funktion gibt den Formelindex zurück, der beim Aufruf anderer Bibliotheksfunktionen angegeben werden sollte. Die Formelberechnungsfunktion ist vom Funktionsprinzip her kein Textinterpreter. Wenn die Funktion AddFormala() aufgerufen wird, wird sie analysiert und eine Hierarchie von Klassen aufgebaut, mit Hilfe derer die Formel berechnet wird, was eine sehr hohe Berechnungsgeschwindigkeit ermöglicht.
void FormulaSetArgument(int FormulaIndex,int ArgumentIndex,double ArgumentValue) - Funktion zum Setzen der Werte von Argumenten.
Parameter:
int FormulaIndex - der Formelindex, der durch den Aufruf von AddFormula() erhalten wurde.
int ArgumentIndex - Argumentindex (die Zahl nach dem Buchstaben "a" im Argumentnamen).
double ArgumentValue - Wert des Arguments.
bool FormulaSolve(int FormulaIndex,double & Ergebnis) - Berechnung der Formel. Gibt true bei erfolgreicher Berechnung zurück, false bei einem Berechnungsfehler (Division durch 0, etc.).
Parameter:
int FormulaIndex - Index der Formel, die durch den Aufruf von AddFormula() erhalten wurde.
double & Result - Variable für das Ergebnis der Berechnung.
FormulaFreeAll() - Löschung aller Formeln. Der Aufruf der Funktion setzt die Bibliothek in ihren Ausgangszustand zurück.
Beispiel für die Verwendung der Bibliothek:
//+------------------------------------------------------------------+ //|sFormulaTest.mq4 | //| Copyright 2019, MetaQuotes Software Corp. | | //|https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2019, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #import "Market//Formula Calculation.ex4" int AddFormula(string Formula); void FormulaSetArgument(int FormulaIndex,int ArgumentIndex,double ArgumentValue); bool FormulaSolve(int FormulaIndex,double & Result); void FormulaFreeAll(); #import //+------------------------------------------------------------------+ //| Skript-Programmstartfunktion| //+------------------------------------------------------------------+ void OnStart(){ double r=0; int f01=AddFormula("sqrt(a1*log10(a0))*a2+10.5"); if(f01==-1){ Alert("Formelfehler".); return; } FormulaSetArgument(f01,0,10000); FormulaSetArgument(f01,1,25); FormulaSetArgument(f01,2,2); if(!FormulaSolve(f01,r)){ Alert("Berechnungsfehler".); return; } Alert("Ergebnis1:"+(string)r); FormulaSetArgument(f01,0,20); FormulaSetArgument(f01,1,30); FormulaSetArgument(f01,2,40); if(!FormulaSolve(f01,r)){ Alert("Berechnungsfehler".); return; } Alert("Ergebnis2:"+(string)r); FormulaFreeAll(); } //+------------------------------------------------------------------+
