下载MetaTrader 5

请观看如何免费下载自动交易

有趣的脚本?
因此发布一个链接 -
让其他人评价

喜欢这个脚本? 在MetaTrader 5客户端尝试它

2014.02.06 07:47
程序库

sToken - MetaTrader 5程序库

| Chinese English Русский Español Deutsch 日本語 Português

显示:
435
等级:
投票: 22
\MQL5\Scripts\
stoken.mq5 (22.71 KB)预览

本脚本含有一个类,能够用于处理由字符串定义的数学和逻辑表达式。

本脚本有两个类:cTokenBase 和 cToken (CTokenBase的一个成员)。cTokenBase类必须在使用前配置(如下)。

支持以下MQL5 数学函数abs, arccos, arcsin, arctan, ceil, cos, exp, floor, log, log10, max, min, mod, pow, rand, round, sin, sqrt, tan.

逻辑和数学表达式: /, %, *, +, -, >, <, >=, <=, ==, !=, &&, ||。

表达式可能包含数字,包括双精度数字,用户变量和用户数组。如果你要使用用户变量和数组,你需要添加函数来返回这些变量和数组的值。函数要添加到cTokenBase类中。

用户变量和数组以字母命名(大小写无所谓),数组元素定义如下:e[0], e[1], f[0], f[1]。

例如:

sToken表达式demo


sToken demo的结果


如何配置cTokenBase类

需要注册用户变量和数组。必须在UsersVariables()函数中完成。用户变量/数组列表包含以";"分隔的名称。

      void UsersVariables()
     {
         UserVariables="a;b;c;d"; // 用户变量列表
         UserArrays="e;f";       // 用户数组列表
      } 

2. 你需要在UserFunc(string FuncName)函数中增加一次相应函数的调用:

      string UserFunc(string FuncName)
     {
         if(FuncName=="a")return(a()); 
         if(FuncName=="b")return(b());
         if(FuncName=="c")return(c());
         if(FuncName=="d")return(d());
         Alert("Function for "+FuncName+" variable is not defined");
         return("0");
      }

3. 为所有用户变量添加函数:

      string a()
      {
         return("1");
      }
      string b()
      {
         return("2");
      }
      string c()
      {
         return("3");
      }
      string d()
      {
         return("4");
      } 

4. 添加相应函数(取决于ArrName)的调用到UserArray(string ArrName,int aIndex)函数中。数组元素的索引在aIndex变量中确定。

      string UserArray(string ArrName,int aIndex){
         if(ArrName=="e")return(e(aIndex));
         if(ArrName=="f")return(f(aIndex));
         Alert("Function for "+ArrName+" array is not defined");
         return("0");
      }

5. 为每个数组添加函数:

      string e(int Index)
      {
         string v[]={"1","2","3","4","5","6","7","8","9"};
         return(v[Index]);
      }
      string f(int Index)
      {
         string v[]={"10","20","30","40","50","60","70","80","90"};
         return(v[Index]);
      }

使用类

1. 为表达式声明一个外部输入变量:

input string Expression="enter expression here";

2. 在全局范围声明一个cToken类的变量:

cToken token;

3. 用表达式初始化类。

   token.Init(Expression);

4. 调用SolveExpression()方法

double Value=token.SolveExpression();

使用多个cTkoen类的实例,该类可以用于解释多个表达式:

cToken token1;
cToken token2;
cToken token3;
cToken token4;

在这种情况下,所有类的实例将使用相同的用户变量和数组(在cTokenBase类中声明)

你可以添加你自己的函数。


添加新的功能到cTkoen类中

  1. 注册一个新的函数。这必须在Init()函数中完成。
  2. 将用于计算的代码添加到SolveFunc(string Func,string & aRes[])函数中。函数的单数在aRes[]数组中。参数的个数没有限制。

本文译自 MetaQuotes Software Corp. 撰写的俄文原文
官方代码: https://www.mql5.com/ru/code/303

downloadhistory.mq5 downloadhistory.mq5

该脚本下载交易服务器上可用的(当前交易对象)历史数据。

cIntSpeech cIntSpeech

它使用话音引擎读出制定文本。

CDownLoadHistory类 CDownLoadHistory类

CDownLoadHistory类提供了下载历史数据的方法。

iChartsSwitchSymbol iChartsSwitchSymbol

当图表交易对象改变时,它将改变所有其他图表的交易对象。