Formula Calculation
- Bibliotecas
- Dmitry Fedoseev
- Versión: 1.0
Biblioteca para calcular fórmulas.
La fórmula se especifica mediante una cadena. Puede establecer la fórmula en una variable de cadena en la ventana de propiedades.
La fórmula puede incluir operaciones aritméticas "+-/*" y todas las funciones excepto MathRand(): abs(), arccos(), arcsin(), arctan(), sin(), cos(), tan(), exp(), log(), mod(), max(), min(), pow(), ceil(), sqrt(), log10(), floor(), round(). Además, la fórmula puede incluir números (si el número es fraccionario, el separador es un punto) y argumentos. Un argumento empieza por la letra "a" (latina) y un número, por ejemplo "a0", "a1", etc.
Ejemplo de fórmula: "sqrt(a1*log10(a0))*a2+10.5". Ten en cuenta que la fórmula puede ser cualquier cosa, y que esto es sólo un ejemplo.
Importación de la biblioteca:
#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
Descripción de la función de biblioteca:
int AddFormula(string Formula) - función para añadir una fórmula a la biblioteca. Se llama al inicializar un Asesor Experto o indicador, en el que se utiliza la biblioteca. La función devuelve el índice de la fórmula, que debe especificarse al llamar a otras funciones de la biblioteca. La función de cálculo de fórmulas no es un intérprete de texto por el principio de funcionamiento. Cuando se llama a la función AddFormala(), se analiza y se construye una jerarquía de clases, con la ayuda de esta jerarquía se calcula la fórmula, lo que proporciona una velocidad de cálculo muy alta.
void FormulaSetArgument(int FormulaIndex,int ArgumentIndex,double ArgumentValue) - función para establecer los valores de los argumentos.
Parámetros:
int FormulaIndex - el índice de fórmula obtenido llamando a AddFormula().
int ArgumentIndex - índice del argumento (el número después de la letra "a" en el nombre del argumento).
double ArgumentValue - valor del argumento.
bool FormulaSolve(int FormulaIndex,double & Result) - cálculo de la fórmula. Devuelve true si el cálculo tiene éxito, false si falla (división por 0, etc.).
Parámetros:
int FormulaIndex - índice de la fórmula obtenida llamando a AddFormula().
double & Result - variable para el resultado del cálculo.
FormulaFreeAll() - eliminación de todas las fórmulas. La llamada a la función devuelve la biblioteca a su estado inicial.
Ejemplo de utilización de la biblioteca:
//+------------------------------------------------------------------+ //|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 //+------------------------------------------------------------------+ //| Función de inicio del programa de script| //+------------------------------------------------------------------+ void OnStart(){ double r=0; int f01=AddFormula("sqrt(a1*log10(a0))*a2+10.5"); if(f01==-1){ Alert("Error de fórmula".); return; } FormulaSetArgument(f01,0,10000); FormulaSetArgument(f01,1,25); FormulaSetArgument(f01,2,2); if(!FormulaSolve(f01,r)){ Alert("Error de cálculo".); return; } Alert("Resultado1: "+(string)r); FormulaSetArgument(f01,0,20); FormulaSetArgument(f01,1,30); FormulaSetArgument(f01,2,40); if(!FormulaSolve(f01,r)){ Alert("Error de cálculo".); return; } Alert("Resultado2: "+(string)r); FormulaFreeAll(); } //+------------------------------------------------------------------+
