外汇EA编写教程:从 MQL4 迁移到 MQL5

简介

很多开发人员已经累积了很多用 MQL4 编写的指标和交易策略。要在 Metatrader 5 中使用它们,应将它们转换为 MQL5。用 MQL5 重写所有程序并不是如此容易。如果有转换参考,则进行转换会容易得多,最好以例子说明。

在本文中,我愿意推荐我自己的有关从 MQL4 迁移 MQL5 的指南。

1. 图表周期

在 MQL5 图表中,周期常量出现改变,并且添加了一些新的时间周期(M2、M3、M4、M6、M10、M12、H2、H3、H6、H8、H12)。要转换 MQL4 时间周期,您可以使用以下函数:

ENUM_TIMEFRAMES TFMigrate(int tf)
  {
   switch(tf)
     {
      case 0: return(PERIOD_CURRENT);
      case 1: return(PERIOD_M1);
      case 5: return(PERIOD_M5);
      case 15: return(PERIOD_M15);
      case 30: return(PERIOD_M30);
      case 60: return(PERIOD_H1);
      case 240: return(PERIOD_H4);
      case 1440: return(PERIOD_D1);
      case 10080: return(PERIOD_W1);
      case 43200: return(PERIOD_MN1);
      
      case 2: return(PERIOD_M2);
      case 3: return(PERIOD_M3);
      case 4: return(PERIOD_M4);      
      case 6: return(PERIOD_M6);
      case 10: return(PERIOD_M10);
      case 12: return(PERIOD_M12);
      case 16385: return(PERIOD_H1);
      case 16386: return(PERIOD_H2);
      case 16387: return(PERIOD_H3);
      case 16388: return(PERIOD_H4);
      case 16390: return(PERIOD_H6);
      case 16392: return(PERIOD_H8);
      case 16396: return(PERIOD_H12);
      case 16408: return(PERIOD_D1);
      case 32769: return(PERIOD_W1);
      case 49153: return(PERIOD_MN1);      
      default: return(PERIOD_CURRENT);
     }
  }

应注意,在 MQL5 中,图表时间框架常量的数值(从 H1 起)不等于柱的分钟数(例如,在 MQL5 中,常量 PERIOD_H1 的数值 =16385,但是在 MQL4 中,PERIOD_H1=60)。如果在 MQL4 程序中使用了 MQL4 常量的数值,则在转换到 MQL5 时应考虑到这一点。

要确定图表的指定时间周期的分钟数,将函数 PeriodSeconds 返回的值除以 60。

2. 声明常量

在 MQL5 中缺少某些标准 MQL4 常量,因此应声明它们:

//+------------------------------------------------------------------
//|                                                     InitMQL4.mqh |
//|                                                 Copyright DC2008 |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------
#property copyright "keiji"
#property copyright "DC2008"
#property link      "https://www.mql5.com"
//---- 声明常量
#define OP_BUY 0           //买 
#define OP_SELL 1          //卖 
#define OP_BUYLIMIT 2      //BUY LIMIT 挂单类型 
#define OP_SELLLIMIT 3     //SELL LIMIT 挂单类型 
#define OP_BUYSTOP 4       //BUY STOP 挂单类型 
#define OP_SELLSTOP 5      //SELL STOP 挂单类型 
//---
#define MODE_OPEN 0
#define MODE_CLOSE 3
#define MODE_VOLUME 4 
#define MODE_REAL_VOLUME 5
#define MODE_TRADES 0
#define MODE_HISTORY 1
#define SELECT_BY_POS 0
#define SELECT_BY_TICKET 1
//---
#define DOUBLE_VALUE 0
#define FLOAT_VALUE 1
#define LONG_VALUE INT_VALUE
//---
#define CHART_BAR 0
#define CHART_CANDLE 1
//---
#define MODE_ASCEND 0
#define MODE_DESCEND 1
//---
#define MODE_LOW 1
#define MODE_HIGH 2
#define MODE_TIME 5
#define MODE_BID 9
#define MODE_ASK 10
#define MODE_POINT 11
#define MODE_DIGITS 12
#define MODE_SPREAD 13
#define MODE_STOPLEVEL 14
#define MODE_LOTSIZE 15
#define MODE_TICKVALUE 16
#define MODE_TICKSIZE 17
#define MODE_SWAPLONG 18
#define MODE_SWAPSHORT 19
#define MODE_STARTING 20
#define MODE_EXPIRATION 21
#define MODE_TRADEALLOWED 22
#define MODE_MINLOT 23
#define MODE_LOTSTEP 24
#define MODE_MAXLOT 25
#define MODE_SWAPTYPE 26
#define MODE_PROFITCALCMODE 27
#define MODE_MARGINCALCMODE 28
#define MODE_MARGININIT 29
#define MODE_MARGINMAINTENANCE 30
#define MODE_MARGINHEDGED 31
#define MODE_MARGINREQUIRED 32
#define MODE_FREEZELEVEL 33
//---
#define EMPTY -1

:MQl4 中的常量和 MQL5 中的常量不同,因此最好在一个单独的文件 initMQ4.mqh 中声明它们以备将来使用。

3. 预定义变量

MQL4  MQL5 说明
double Ask
MqlTick last_tick;
SymbolInfoTick(_Symbol,last_tick);
double Ask=last_tick.ask;

Ask
最新知道的当前交易品种的询价。
SymbolInfoTick
int Bars
int Bars=Bars(_Symbol,_Period);
Bars

当前图表中的柱的数量。
Bars

double Bid
MqlTick last_tick;
SymbolInfoTick(_Symbol,last_tick);
double Bid=last_tick.bid;
Bid
最新知道的当前交易品种的出价。
SymbolInfoTick
double Close[]
double Close[];
int count;   // 复制元素的数量
ArraySetAsSeries(Close,true);
CopyClose(_Symbol,_Period,0,count,Close);
Close

包含当前图表的每一根柱的收盘价的序列数组。
CopyClose、ArraySetAsSeries

int Digits
int Digits=_Digits;
Digits

当前交易品种的价格的小数位数。
_Digits

double High[]
double High[];
int count;   // 复制元素的数量
ArraySetAsSeries(High,true);
CopyHigh(_Symbol,_Period,0,count,High);
High

包含当前图表的每一根柱的最高价的序列数组。
CopyHigh、ArraySetAsSeries

double Low[]
double Low[];
int count;   // 复制元素的数量
ArraySetAsSeries(Low,true);
CopyLow(_Symbol,_Period,0,count,Low);
Low

包含当前图表的每一根柱的最低价的序列数组。
CopyLow、ArraySetAsSeries

double Open[]
double Open[];
int count;   // 复制元素的数量
ArraySetAsSeries(Open,true);
CopyOpen(_Symbol,_Period,0,count,Open);
Open

包含当前图表的每一根柱的开盘价的序列数组。
CopyOpen、ArraySetAsSeries

double Point
double Point=_Point;
Point

以报价货币表示的当前交易品种的点值。
_Point

datetime Time[]
datetime Time[];
int count;   // 复制元素的数量
ArraySetAsSeries(Time,true);
CopyTime(_Symbol,_Period,0,count,Time);
Time

包含当前图表的每一根柱的开盘时间的序列数组。datetime 等数据以秒为单位表示从 1970 年 1 月 1 日凌晨 00:00 起经过的时间。
CopyTime、ArraySetAsSeries

double Volume[]
long Volume[];
int count;   // 复制元素的数量
ArraySetAsSeries(Volume,true);
CopyTickVolume(_Symbol,_Period,0,count,Volume);
Volume

包含当前图表的每一根柱的价格变动量的序列数组。
CopyTickVolume、ArraySetAsSeries

4. 帐户信息

MQL4 MQL5 说明
double AccountBalance()
double AccountInfoDouble(ACCOUNT_BALANCE)
AccountBalance
返回当前帐户的余额值(帐户中的资金量)。
AccountInfoDouble
double AccountCredit()
double AccountInfoDouble(ACCOUNT_CREDIT)
AccountCredit
返回当前帐户的信用值。
AccountInfoDouble
string AccountCompany()
string AccountInfoString(ACCOUNT_COMPANY)
AccountCompany
返回当前帐户注册所在的经纪公司的名称。
AccountInfoString
string AccountCurrency()
string AccountInfoString(ACCOUNT_CURRENCY)
AccountCurrency
返回当前帐户的货币名称。
AccountInfoString
double AccountEquity()
double AccountInfoDouble(ACCOUNT_EQUITY)
AccountEquity
返回当前帐户的净资产值。净资产计算取决于交易服务器设置。
AccountInfoDouble
double AccountFreeMargin()
double AccountInfoDouble(ACCOUNT_FREEMARGIN)
AccountFreeMargin
返回当前帐户的可用预付款值。
AccountInfoDouble
double AccountFreeMarginCheck(string symbol,
                              int cmd,
                              double volume)
AccountFreeMarginCheck
返回当前帐户中以当前价格建立指定仓位之后剩下的可用预付款。
double AccountFreeMarginMode()
AccountFreeMarginMode
允许在当前帐户中建仓的可用预付款的计算模式。
int AccountLeverage()
int AccountInfoInteger(ACCOUNT_LEVERAGE)
AccountLeverage
返回当前帐户的杠杆。
AccountInfoInteger
double AccountMargin()
double AccountInfoDouble(ACCOUNT_MARGIN)
AccountMargin
返回当前帐户的预付款值。
AccountInfoDouble
string AccountName()
string AccountInfoString(ACCOUNT_NAME)
AccountName
返回当前帐户的名称。
AccountInfoString
int AccountNumber()
int AccountInfoInteger(ACCOUNT_LOGIN)
AccountNumber
返回当前帐户的帐号。
AccountInfoInteger
double AccountProfit()
double AccountInfoDouble(ACCOUNT_PROFIT)
AccountProfit
返回当前帐户的盈利值。
AccountInfoDouble
string AccountServer()
string AccountInfoString(ACCOUNT_SERVER)
AccountServer
返回所连接服务器的名称。
AccountInfoString
int AccountStopoutLevel()
double AccountInfoDouble(ACCOUNT_MARGIN_SO_SO)
AccountStopoutLevel
返回止损离场水平值。
AccountInfoDouble
int AccountStopoutMode()
int AccountInfoInteger(ACCOUNT_MARGIN_SO_MODE)
AccountStopoutMode
返回止损离场水平的计算模式。
AccountInfoInteger

5. 数组函数

MQL4 MQL5  说明
int ArrayBsearch(double array[],
                 double value,
                 int count=WHOLE_ARRAY,
                 int start=0,
                 int direction=MODE_ASCEND)
int ArrayBsearch(double    array[],
                 double    searched_value
                 )
ArrayBsearch
函数在一维数字数组中搜索指定的值。
ArrayBsearch
int ArrayCopy(object&dest[],
              object source[],
              int start_dest=0,
              int start_source=0,
              int count=WHOLE_ARRAY)
int ArrayCopy(void  dst_array[],
              void  src_array[],
              int   dst_start=0,
              int   src_start=0,
              int   cnt=WHOLE_ARRAY
              )
ArrayCopy
将数组复制为另一个数组。数组必须是相同的类型,但是类型为 double[], int[]、datetime[]、color[] 和 bool[] 的数组可以复制为相同类型的数组。返回复制元素的数量。
ArrayCopy
int ArrayCopyRates(double&dest_array[],
                   string symbol=NULL,
                   int timeframe=0)
ArrayCopyRates
将当前图表柱的数据复制到类型为 RateInfo[][6] 的两维数组,并返回复制的柱数,或者在失败时返回 -1。
int ArrayCopySeries(double&array[],
                    int series_index,
                    string symbol=NULL,
                    int timeframe=0)
int ArrayCopySeriesMQL4(double &array[],
                        int series_index,
                        string symbol=NULL,
                        int tf=0)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   int count=Bars(symbol,timeframe);
   switch(series_index)
     {
      case MODE_OPEN:
         return(CopyOpen(symbol,timeframe,0,count,array));
      case MODE_LOW:
         return(CopyLow(symbol,timeframe,0,count,array));
      case MODE_HIGH:
         return(CopyHigh(symbol,timeframe,0,count,array));
      case MODE_CLOSE:
         return(CopyClose(symbol,timeframe,0,count,array));

      default: return(0);
     }
   return(0);
  }
ArrayCopySeries
将一个时间序列数组复制到一个自定义数组,并返回复制元素的数量。
CopyOpen、CopyLow、CopyHigh、CopyClose、Bars
int ArrayDimension( object array[])
ArrayDimension
返回数组的维度。
bool ArrayGetAsSeries( object array[])
bool ArrayGetAsSeries(void  array)
ArrayGetAsSeries
如果数组是按时间序列数组组织的,则返回 TRUE(数组元素是从最后一个到第一个索引的),否则返回 FALSE。
ArrayGetAsSeries
int ArrayInitialize(double &array[],
                    double value)
int ArrayInitializeMQL4(double &array[],
                        double value)
  {
   ArrayInitialize(array,value);
   return(ArraySize(array));
  }
ArrayInitialize
将数字数组的所有元素设置为相同的值。返回被初始化的元素的数量。
ArrayInitialize、ArraySize
bool ArrayIsSeries( object array[])
bool ArrayIsSeries(void  array[])
ArrayIsSeries
如果正在检查的数组是时间序列数组(Time[]、Open[]、Close[]、High[]、Low[] 或 Volume[]),则返回 TRUE,否则返回 FALSE。
ArrayIsSeries
int ArrayMaximum(double array[],
                 int count=WHOLE_ARRAY,
                 int start=0)
int ArrayMaximumMQL4(double &array[],
                     int count=WHOLE_ARRAY,
                     int start=0)
  {
   return(ArrayMaximum(array,start,count));
  }
ArrayMaximum
搜索具有最大值的元素。函数返回此最大值元素在数组中的位置。
ArrayMaximum
int ArrayMinimum(double array[],
                 int count=WHOLE_ARRAY,
                 int start=0)
int ArrayMinimumMQL4(double &array[],
                     int count=WHOLE_ARRAY,
                     int start=0)
  {
   return(ArrayMinimum(array,start,count));
  }
ArrayMinimum
搜索具有最小值的元素。函数返回此最小值元素在数组中的位置。
ArrayMinimum
int ArrayRange(object array[],
               int range_index)
int ArrayRange(void  array[],
               int   rank_index
               )
ArrayRange
返回数组指定维度中元素的数量。
ArrayRange
int ArrayResize(object &array[],
                int new_size)
int ArrayResize(void  array[],
                int   new_size,
                int   allocated_size=0
                )
ArrayResize
为第一维设置一个新的大小。
ArrayResize
bool ArraySetAsSeries(double &array[],
                      bool set)
bool ArraySetAsSeries(void  array[],
                      bool  set
                      )
ArraySetAsSeries
返回数组指定维度中的元素数量。因为索引是基于零的,维的大小比最大索引大 1。
ArraySetAsSeries
int ArraySize( object array[])
int ArraySize(void  array[])
ArraySize
返回数组包含的元素的数量。
ArraySize
int ArraySort(double &array[],
              int count=WHOLE_ARRAY,
              int start=0,
              int sort_dir=MODE_ASCEND)
int ArraySortMQL4(double &array[],
                  int count=WHOLE_ARRAY,
                  int start=0,
                  int sort_dir=MODE_ASCEND)
  {
   switch(sort_dir)
     {
      case MODE_ASCEND:
         ArraySetAsSeries(array,true);
      case MODE_DESCEND:
         ArraySetAsSeries(array,false);

      default: ArraySetAsSeries(array,true);
     }
   ArraySort(array);
   return(0);
  }
ArraySort
按第一维对数字数组排序。不能通过 ArraySort() 对序列数组进行排序。
ArraySort、ArraySetAsSeries

6. 检查

MQL4 MQL5 说明
int GetLastError()
int GetLastError()
GetLastError
函数返回最后一次发生的错误,然后是特殊变量 last_error 的值,其中,存储的最后一个错误的代码将被归零。
GetLastError
bool IsConnected()
bool TerminalInfoInteger(TERMINAL_CONNECTED)
IsConnected
函数返回客户端与执行数据泵功能的服务器之间的主连接的状态。如果成功建立到服务器的连接,则返回 TRUE,否则返回 FALSE。
TerminalInfoInteger
bool IsDemo()
bool IsDemoMQL4()
  {
   if(AccountInfoInteger(ACCOUNT_TRADE_MODE)==ACCOUNT_TRADE_MODE_DEMO)
      return(true);
   else
      return(false);
  }
IsDemo
如果 EA 交易程序在一个演示帐户中运行,则返回 TRUE,否则返回 FALSE。
AccountInfoInteger
bool IsDllsAllowed()
bool TerminalInfoInteger(TERMINAL_DLLS_ALLOWED)
IsDllsAllowed
如果允许针对 EA 交易程序调用函数 DLL,则返回 TRUE,返回否则 FALSE。
TerminalInfoInteger
bool IsExpertEnabled()
bool AccountInfoInteger(ACCOUNT_TRADE_EXPERT)
IsExpertEnabled
如果在客户端中允许使用 EA 交易程序,则返回 TRUE,否则返回 FALSE。
AccountInfoInteger
bool IsLibrariesAllowed()
bool MQLInfoInteger(MQL5_DLLS_ALLOWED)
IsLibrariesAllowed
如果 EA 交易程序能够调用库函数,则返回 TRUE,否则返回 FALSE。
MQLInfoInteger
bool IsOptimization()
bool MQLInfoInteger(MQL5_OPTIMIZATION)
IsOptimization
如果 EA 交易程序在策略测试程序的优化模式中运行,则返回 TRUE,否则返回 FALSE。
MQLInfoInteger
bool IsStopped()
bool IsStopped()
IsStopped
如果程序(EA 交易程序或脚本)被命令停止其操作,则返回 TRUE,否则返回 FALSE。
IsStopped
bool IsTesting()
bool MQLInfoInteger(MQL5_TESTING)
IsTesting
如果 EA 交易程序在测试模式中运行,则返回 TRUE,否则返回 FALSE。
MQLInfoInteger
bool IsTradeAllowed()
bool MQLInfoInteger(MQL5_TRADE_ALLOWED)
IsTradeAllowed
如果允许用 EA 交易程序进行交易并且交易线程未被占用,则返回 TRUE,否则返回 FALSE。
MQLInfoInteger
bool IsTradeContextBusy()
IsTradeContextBusy
如果交易线程被另一 EA 交易程序占用,则返回 TRUE,否则返回 FALSE。
bool IsVisualMode()
bool MQLInfoInteger(MQL5_VISUAL_MODE)
IsVisualMode
如果 EA 交易模式在选中了 “Visual Mode”(可视模式)按钮的情况下测试,则返回 TRUE,否则返回 FALSE。
MQLInfoInteger
int UninitializeReason()
int UninitializeReason()
UninitializeReason
返回 EA 交易程序、自定义指标和脚本未初始化的原因代码。
UninitializeReason

7. 客户端

MQL4  MQL5  说明
string TerminalCompany()
string TerminalInfoString(TERMINAL_COMPANY)
TerminalCompany
返回拥有客户端的公司的名称。
TerminalInfoString
string TerminalName()
string TerminalInfoString(TERMINAL_NAME)
TerminalName
返回客户端名称。
TerminalInfoString
string TerminalPath()
string TerminalInfoString(TERMINAL_PATH)
TerminalPath
返回客户端的启动目录。
TerminalInfoString

8. 公共函数

MQL4 MQL5 说明
void Alert(...)
void Alert(argument,...)
Alert
显示一个含有用户定义数据的对话框。参数可以是任意类型。
Alert
void Comment(...)
void Comment(argument,...)
Comment
函数在图表的左上角输出用户定义的备注。
Comment
int GetTickCount()
uint GetTickCount()
GetTickCount
GetTickCount() 函数获取系统启动后经过的毫秒数。
GetTickCount
double MarketInfo(string symbol,
                  int type)
double MarketInfoMQL4(string symbol,
                      int type)
  {
   switch(type)
     {
      case MODE_LOW:
         return(SymbolInfoDouble(symbol,SYMBOL_LASTLOW));
      case MODE_HIGH:
         return(SymbolInfoDouble(symbol,SYMBOL_LASTHIGH));
      case MODE_TIME:
         return(SymbolInfoInteger(symbol,SYMBOL_TIME));
      case MODE_BID:
         return(Bid);
      case MODE_ASK:
         return(Ask);
      case MODE_POINT:
         return(SymbolInfoDouble(symbol,SYMBOL_POINT));
      case MODE_DIGITS:
         return(SymbolInfoInteger(symbol,SYMBOL_DIGITS));
      case MODE_SPREAD:
         return(SymbolInfoInteger(symbol,SYMBOL_SPREAD));
      case MODE_STOPLEVEL:
         return(SymbolInfoInteger(symbol,SYMBOL_TRADE_STOPS_LEVEL));
      case MODE_LOTSIZE:
         return(SymbolInfoDouble(symbol,SYMBOL_TRADE_CONTRACT_SIZE));
      case MODE_TICKVALUE:
         return(SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_VALUE));
      case MODE_TICKSIZE:
         return(SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE));
      case MODE_SWAPLONG:
         return(SymbolInfoDouble(symbol,SYMBOL_SWAP_LONG));
      case MODE_SWAPSHORT:
         return(SymbolInfoDouble(symbol,SYMBOL_SWAP_SHORT));
      case MODE_STARTING:
         return(0);
      case MODE_EXPIRATION:
         return(0);
      case MODE_TRADEALLOWED:
         return(0);
      case MODE_MINLOT:
         return(SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN));
      case MODE_LOTSTEP:
         return(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP));
      case MODE_MAXLOT:
         return(SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX));
      case MODE_SWAPTYPE:
         return(SymbolInfoInteger(symbol,SYMBOL_SWAP_MODE));
      case MODE_PROFITCALCMODE:
         return(SymbolInfoInteger(symbol,SYMBOL_TRADE_CALC_MODE));
      case MODE_MARGINCALCMODE:
         return(0);
      case MODE_MARGININIT:
         return(0);
      case MODE_MARGINMAINTENANCE:
         return(0);
      case MODE_MARGINHEDGED:
         return(0);
      case MODE_MARGINREQUIRED:
         return(0);
      case MODE_FREEZELEVEL:
         return(SymbolInfoInteger(symbol,SYMBOL_TRADE_FREEZE_LEVEL));

      default: return(0);
     }
   return(0);
  }
MarketInfo
返回在 Market Watch(市场观察)窗口中列出的证券的各种数据。
SymbolInfoInteger、SymbolInfoDouble、Bid、Ask
int MessageBox(string text=NULL,
               string caption=NULL,
               int flags=EMPTY)
int MessageBox(string  text,
               string  caption=NULL,
               int     flags=0)
MessageBox
MessageBox 函数创建、显示和操作消息框。
MessageBox
void PlaySound(string filename)
bool PlaySound(string filename)
PlaySound
函数播放一个声音文件。
PlaySound
void Print(...)
void Print(argument,...)
Print
将一条消息打印到 EA 交易程序的日志。
Print
bool SendFTP(string filename,
             string ftp_path=NULL)
bool SendFTP(string filename,
             string ftp_path=NULL)
SendFTP
将文件发送到在 Tools(工具)->Options(选项)->Publisher(发布者)选项卡中设置的 FTP 服务器。如果尝试失败,则返回 FALSE。
SendFTP
void SendMail(string subject,
              string some_text)
bool SendMail(string  subject,
              string  some_text)
SendMail
向在 Tools(工具)->Options(选项)->EMail(电子邮件)选项卡中设置的电子邮件地址发送一封邮件。
SendMail
void Sleep(int milliseconds)
void Sleep(int milliseconds)
Sleep
Sleep() 函数在指定间隔内暂停当前 EA 交易程序的执行。
Sleep

9. 转换函数

MQL4 MQL5 说明
string CharToStr(int char_code)
string CharToString(int char_code)
CharToStr
将符号代码转换为单字符的字符串。
CharToString
string DoubleToStr(double value,
                   int digits)
string DoubleToString(double value,
                      int digits=8)
DoubleToStr
返回含有转换为指定精度格式的数字值的文本字符串。
DoubleToString
double NormalizeDouble(double value,
                       int digits)
double NormalizeDouble(double value,
                       int digits)
NormalizeDouble
将浮点值四舍五入到指定精度。返回双精度类型的标准化值。
NormalizeDouble
double StrToDouble(string value)
double StringToDouble(string value)
StrToDouble
将数字的字符串表示转换为双精度类型(具有浮点的双精度格式)。
StringToDouble
int StrToInteger(string value)
long StringToInteger(string value)
StrToInteger
将含有数值字符表示的字符串转换为 int(整数)类型的值。
StringToInteger
datetime StrToTime(string value)
datetime StringToTime(string value)
StrToTime
将格式为 “yyyy.mm.dd hh:mi” 的字符串转换为 datetime 类型(从 1970 年 1 月 1 日起经过的秒数)。
StringToTime
string TimeToStr(datetime value,
                 int mode=TIME_DATE|TIME_MINUTES)
string TimeToString(datetime value,
                    int mode=TIME_DATE|TIME_MINUTES)
TimeToStr
将含有从 1970 年 1 月 1 日起经过的秒数的值转换为 “yyyy.mm.dd hh:mi” 格式的字符串。
TimeToString

10. 自定义指标

MQL4 MQL5  说明
void IndicatorBuffers(int count)
IndicatorBuffers
为用于自定义指标计算的缓存分配内存。
int IndicatorCounted()
int IndicatorCountedMQL4()
  {
   if(prev_calculated>0) return(prev_calculated-1);
   if(prev_calculated==0) return(0);
   return(0);
  }
IndicatorCounted
函数返回在上一次启动指标之后没有改变的柱的数量。
OnCalculate
void IndicatorDigits(int digits)
bool IndicatorSetInteger(INDICATOR_DIGITS,digits)
IndicatorDigits
设置用于虚拟化指标值的精度格式(小数点后面的位数)。
IndicatorSetInteger
void IndicatorShortName(string name)
bool IndicatorSetString(INDICATOR_SHORTNAME,name)
IndicatorShortName
设置在数据窗口和图表子窗口中显示自定义指标的“短”名称。
IndicatorSetString
void SetIndexArrow(int index,
                   int code)
bool PlotIndexSetInteger(index,PLOT_ARROW,code)
SetIndexArrow
为 DRAW_ARROW 类型的指标线设置一个箭头符号。
PlotIndexSetInteger
bool SetIndexBuffer(int index,
                    double array[])
bool SetIndexBuffer(index,array,INDICATOR_DATA)
SetIndexBuffer
在将全局水平声明的数组变量绑定到自定义指标的预定义缓存。
SetIndexBuffer
void SetIndexDrawBegin(int index,
                       int begin)
bool PlotIndexSetInteger(index,PLOT_DRAW_BEGIN,begin)
SetIndexDrawBegin
设置绘制指定指标线必须从其开始的柱号(从数据开始)。
PlotIndexSetInteger
void SetIndexEmptyValue(int index,
                        double value)
bool PlotIndexSetDouble(index,PLOT_EMPTY_VALUE,value)
SetIndexEmptyValue
将绘制线设置为空值。
PlotIndexSetDouble
void SetIndexLabel(int index,
                   string text)
bool PlotIndexSetString(index,PLOT_LABEL,text)
SetIndexLabel
设置要显示在数据窗口和工具提示中的绘制线说明。
PlotIndexSetString
void SetIndexShift(int index,
                   int shift)
bool PlotIndexSetInteger(index,PLOT_SHIFT,shift)
SetIndexShift
设置绘制线的偏移。
PlotIndexSetInteger
void SetIndexStyle(int index,
                   int type,
                   int style=EMPTY,
                   int width=EMPTY,
                   color clr=CLR_NONE)
void SetIndexStyleMQL4(int index,
                       int type,
                       int style=EMPTY,
                       int width=EMPTY,
                       color clr=CLR_NONE)
  {
   if(width>-1)
      PlotIndexSetInteger(index,PLOT_LINE_WIDTH,width);
   if(clr!=CLR_NONE)
      PlotIndexSetInteger(index,PLOT_LINE_COLOR,clr);
   switch(type)
     {
      case 0:
         PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_LINE);
      case 1:
         PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_SECTION);
      case 2:
         PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_HISTOGRAM);
      case 3:
         PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_ARROW);
      case 4:
         PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
      case 12:
         PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_NONE);

      default:
         PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_LINE);
     }
   switch(style)
     {
      case 0:
         PlotIndexSetInteger(index,PLOT_LINE_STYLE,STYLE_SOLID);
      case 1:
         PlotIndexSetInteger(index,PLOT_LINE_STYLE,STYLE_DASH);
      case 2:
         PlotIndexSetInteger(index,PLOT_LINE_STYLE,STYLE_DOT);
      case 3:
         PlotIndexSetInteger(index,PLOT_LINE_STYLE,STYLE_DASHDOT);
      case 4:
         PlotIndexSetInteger(index,PLOT_LINE_STYLE,STYLE_DASHDOTDOT);

      default: return;
     }
SetIndexStyle
为指定的指标线设置新的类型、样式、宽度和颜色。
PlotIndexSetInteger
void SetLevelStyle(int draw_style,
                   int line_width,
                   color clr=CLR_NONE)
void SetLevelStyleMQL4(int draw_style,
                       int line_width,
                       color clr=CLR_NONE)
  {
   IndicatorSetInteger(INDICATOR_LEVELWIDTH,line_width);
   if(clr!=CLR_NONE)
      IndicatorSetInteger(INDICATOR_LEVELCOLOR,clr);
   switch(draw_style)
     {
      case 0:
         IndicatorSetInteger(INDICATOR_LEVELSTYLE,STYLE_SOLID);
      case 1:
         IndicatorSetInteger(INDICATOR_LEVELSTYLE,STYLE_DASH);
      case 2:
         IndicatorSetInteger(INDICATOR_LEVELSTYLE,STYLE_DOT);
      case 3:
         IndicatorSetInteger(INDICATOR_LEVELSTYLE,STYLE_DASHDOT);
      case 4:
         IndicatorSetInteger(INDICATOR_LEVELSTYLE,STYLE_DASHDOTDOT);

      default: return;
     }
  }
SetLevelStyle
函数设置要在单独的窗口中输出的指标的水平线的新样式、宽度和颜色。
IndicatorSetInteger
void SetLevelValue(int level,
                   double value)
bool IndicatorSetDouble(INDICATOR_LEVELVALUE,level,value)
SetLevelValue
函数设置要在单独的窗口中输出的指标的指定水平线的值。
IndicatorSetDouble

11. 日期与时间函数

MQL4  MQL5 说明
int Day()
int DayMQL4()
  {
   MqlDateTime tm;
   TimeCurrent(tm);
   return(tm.day);
  }
Day
返回一个月中的当前日期,即最新已知服务器时间的一个月中的日期。
TimeCurrent、MqlDateTime
int DayOfWeek()
int DayOfWeekMQL4()
  {
   MqlDateTime tm;
   TimeCurrent(tm);
   return(tm.day_of_week);
  }
DayOfWeek
返回最新已知服务器时间的当前基于零的星期几(0-星期天、1、2、3、4、5、6)。
TimeCurrent, MqlDateTime
int DayOfYear()
int DayOfYearMQL4()
  {
   MqlDateTime tm;
   TimeCurrent(tm);
   return(tm.day_of_year);
  }
DayOfYear
返回一年中的当前日期(1 表示 1 月 1 日,… ,365(6) 表示 12 月 31 日),即最新已知服务器时间的一年中的日期。
TimeCurrent, MqlDateTime
int Hour()
int HourMQL4()
  {
   MqlDateTime tm;
   TimeCurrent(tm);
   return(tm.hour);
  }
Hour
返回程序启动时最新已知服务器时间的小时 (0,1,2,..23)(此值在程序执行期间不会改变)。
TimeCurrent、MqlDateTime
int Minute()
int MinuteMQL4()
  {
   MqlDateTime tm;
   TimeCurrent(tm);
   return(tm.min);
  }
Minute
返回程序启动时最新已知服务器时间的当前分钟 (0,1,2,..59)(此值在程序执行期间不会改变)。
TimeCurrent、MqlDateTime
int Month()
int MonthMQL4()
  {
   MqlDateTime tm;
   TimeCurrent(tm);
   return(tm.mon);
  }
Month
作为数字返回当前月份(1- 1 月、2、3、4、5、6、7、8、9、10、11、12),即最新已知服务器时间的月份。
TimeCurrent、MqlDateTime
int Seconds()
int SecondsMQL4()
  {
   MqlDateTime tm;
   TimeCurrent(tm);
   return(tm.sec);
  }
Seconds
返回程序启动时从最新已知服务器时间的当前分钟开始过去的秒数(此值在程序执行期间不会改变)。
TimeCurrent、MqlDateTime
datetime TimeCurrent()
datetime TimeCurrent()
TimeCurrent
作为从 1970 年 1 月 1 日 00:00 起过去的秒数返回最新已知服务器时间(最新报价的到达时间)。
TimeCurrent
int TimeDay(datetime date)
int TimeDayMQL4(datetime date)
  {
   MqlDateTime tm;
   TimeToStruct(date,tm);
   return(tm.day);
  }
TimeDay
返回指定日期的一月中的日期 (1 – 31)。
TimeToStruct、MqlDateTime
int TimeDayOfWeek(datetime date)
int TimeDayOfWeekMQL4(datetime date)
  {
   MqlDateTime tm;
   TimeToStruct(date,tm);
   return(tm.day_of_week);
  }
TimeDayOfWeek
返回指定日期的基于零的星期几(0 表示星期天、1、2、3、4、5、6)。
TimeToStruct、MqlDateTime
int TimeDayOfYear(datetime date)
int TimeDayOfYearMQL4(datetime date)
  {
   MqlDateTime tm;
   TimeToStruct(date,tm);
   return(tm.day_of_year);
  }
TimeDayOfYear
返回指定日期的一年中的天数(1 表示 1 月 1 日,…,365(6) 表示 12 月 31 日)。
TimeToStruct、MqlDateTime
int TimeHour(datetime time)
int TimeHourMQL4(datetime date)
  {
   MqlDateTime tm;
   TimeToStruct(date,tm);
   return(tm.hour);
  }
TimeHour
返回指定时间的小时。
TimeToStruct、MqlDateTime
datetime TimeLocal()
datetime TimeLocal()
TimeLocal
作不从 1970 年 1 月 1 日 00:00 起经过的秒数返回本地计算机时间。
TimeLocal
int TimeMinute(datetime time)
int TimeMinuteMQL4(datetime date)
  {
   MqlDateTime tm;
   TimeToStruct(date,tm);
   return(tm.min);
  }
TimeMinute
返回指定时间的分钟。
TimeToStruct、MqlDateTime
int TimeMonth(datetime time)
int TimeMonthMQL4(datetime date)
  {
   MqlDateTime tm;
   TimeToStruct(date,tm);
   return(tm.mon);
  }
TimeMonth
返回指定时间的月份。
TimeToStruct、MqlDateTime
int TimeSeconds(datetime time)
int TimeSecondsMQL4(datetime date)
  {
   MqlDateTime tm;
   TimeToStruct(date,tm);
   return(tm.sec);
  }
TimeSeconds
返回指定时间从分钟开始时过去的秒数。
TimeToStruct、MqlDateTime
int TimeYear(datetime time)
int TimeYearMQL4(datetime date)
  {
   MqlDateTime tm;
   TimeToStruct(date,tm);
   return(tm.year);
  }
TimeYear
返回指定日期的年份。返回的值在 1970 至 2037 的范围内。
TimeToStruct、MqlDateTime
int Year()
int YearMQL4()
  {
   MqlDateTime tm;
   TimeCurrent(tm);
   return(tm.year);
  }
Year
返回当前年份,即最后已知服务器时间的年份。
TimeCurrent、MqlDateTime

12. 文件函数

MQL4  MQL5  说明
void FileClose(int handle)
void FileClose(int file_handle)
FileClose
关闭先前通过 FileOpen() 函数打开的文件。
FileClose
void FileDelete(string filename)
bool FileDelete(string file_name
                int common_flag=0)
FileDelete
删除指定文件名。
FileDelete
void FileFlush(int handle)
void FileFlush(int file_handle)
FileFlush
将存储在文件缓存中的所有数据刷新到磁盘。
FileFlush
bool FileIsEnding(int handle)
bool FileIsEnding(int file_handle)
FileIsEnding
如果文件指针处于文件末尾,则返回逻辑 true,否则返回 false。
FileIsEnding
bool FileIsLineEnding(int handle)
bool FileIsLineEnding(int file_handle)
FileIsLineEnding
对于 CSV 文件,如果文件指针在行的末尾,则返回逻辑 true,否则返回 false。
FileIsLineEnding
int FileOpen(string filename,
             int mode,
             int delimiter=';')
int FileOpen(string ile_name,
             int pen_flags,
             short delimiter='/t'
             uint codepage=CP_ACP)
FileOpen
打开用于输入和/或输出的文件。返回打开文件的文件句柄,失败时则返回 -1。
FileOpen
int FileOpenHistory(string filename,
                    int mode,
                    int delimiter=';')
FileOpenHistory
打开当前历史记录目录 (terminal_directory/history/server_name) 或其子文件夹中的文件。返回打开文件的文件句柄。如果函数失败,返回值为 -1。
int FileReadArray(int handle,
                  object &array[],
                  int start,
                  int count)
uint FileReadArray(int file_handle,
                   void array[],
                   int start_item=0,
                   int items_count=WHOLE_ARRAY)
FileReadArray
将指定数量的元素从二进制文件读入数组。
FileReadArray
double FileReadDouble(int handle,
                      int size=DOUBLE_VALUE)
double FileReadDoubleMQL4(int handle,
                          int size=DOUBLE_VALUE)
  {
   return(FileReadDouble(handle));
  }
FileReadDouble
从当前二进制文件位置读取具有浮点的双精度数字。
FileReadDouble
int FileReadInteger(int handle,
                    int size=LONG_VALUE)
int FileReadInteger(int file_handle,
                    int size=INT_VALUE)
FileReadInteger
从当前二进制文件位置读取整数。
FileReadInteger
double FileReadNumber(int handle)
double FileReadNumber(int file_handle)
FileReadNumber
从当前文件位置读取分隔符前的数字。仅适用于 CSV 文件。
FileReadNumber
string FileReadString(int handle,
                      int length=0)
string FileReadString(int file_handle,
                      int size=-1)
FileReadString
函数从当前文件位置读取一个字符串。
FileReadString
bool FileSeek(int handle,
              int offset,
              int origin)
bool FileSeekMQL4(long handle,
                  int offset,
                  ENUM_FILE_POSITION origin)
  {
   FileSeek(handle,offset,origin);
   return(true);
  }
FileSeek
函数将文件指针从开头、末尾或当前文件位置移动一个新位置,偏移量以字节为单位。
FileSeek
int FileSize(int handle)
ulong FileSize(int file_handle)
FileSize
函数以字节为单位返回文件大小。
FileSize
int FileTell(int handle)
ulong FileTell(int file_handle)
FileTell
返回文件指针的当前位置。
FileTell
int FileWrite(int handle,...)
uint FileWrite(int file_handle,...)
FileWrite
函数用于将数据写入一个 CSV 文件,自动插入分隔符。
FileWrite
int FileWriteArray(int handle,
                   object array[],
                   int start,
                   int count)
int FileWriteArray(int file_handle,
                   void array[],
                   int start_item=0,
                   int items_count=WHOLE_ARRAY)
FileWriteArray
函数将数组写入一个二进制文件。
FileWriteArray
int FileWriteDouble(int handle,
                    double value,
                    int size=DOUBLE_VALUE)
uint FileWriteDouble(int file_handle,
                     double dvalue)
FileWriteDouble
函数将一个具有浮点的双精度值写入一个二进制文件。
FileWriteDouble
int FileWriteInteger(int handle,
                     int value,
                     int size=LONG_VALUE)
uint FileWriteInteger(int file_handle,
                      int ivalue,
                      int size=INT_VALUE)
FileWriteInteger
函数将整数值写入一个二进制文件。
FileWriteInteger
int FileWriteString(int handle,
                    string value,
                    int size)
uint FileWriteString(int file_handle,
                     string svalue,
                     int size=-1)
FileWriteString
函数从当前文件位置将字符串写入一个二进制文件。
FileWriteString

13. 全局变量

MQL4 MQL5  说明
bool GlobalVariableCheck(string name)
bool GlobalVariableCheck(string name)
GlobalVariableCheck
如果全局变量存在,则返回 TRUE,否则返回 FALSE。
GlobalVariableCheck
bool GlobalVariableDel(string name)
bool GlobalVariableDel(string name)
GlobalVariableDel
删除全局变量。
GlobalVariableDel
double GlobalVariableGet(string name)
double GlobalVariableGet(string name)
GlobalVariableGet
返回现有全局变量的值,出错时返回 0。
GlobalVariableGet
string GlobalVariableName(int index)
string GlobalVariableName(int index)
GlobalVariableName
函数通过全局变量在全局变量列表中的索引返回全局变量的名称。
GlobalVariableName
datetime GlobalVariableSet(string name,
                           double value)
datetime GlobalVariableSet(string name,
                           double value)
GlobalVariableSet
将全局变量设置为新值。如果全局变量不存在,则系统创建一个新的全局变量。
GlobalVariableSet
bool GlobalVariableSetOnCondition(string name,
                                  double value,
                                  double check_value)
bool GlobalVariableSetOnCondition(string name,
                                  double value,
                                  double check_value)
GlobalVariableSetOnCondition
如果当前值等于第三个参数 check_value 的值,则将现有全局变量设置为新值。
GlobalVariableSetOnCondition
int GlobalVariablesDeleteAll(string prefix_name=NULL)
int GlobalVariablesDeleteAll(string prefix_name=NULL
                             datetime limit_data=0)
GlobalVariablesDeleteAll
删除全局变量。
GlobalVariablesDeleteAll
int GlobalVariablesTotal()
int GlobalVariablesTotal()
GlobalVariablesTotal
函数返回全局变量的总数。
GlobalVariablesTotal

14. 数学函数

 MQL4 MQL5  说明
double MathAbs(double value)
double MathAbs(double value)
MathAbs
返回指定数值的绝对值(模数)。
MathAbs
double MathArccos(double x)
double MathArccos(double val)
MathArccos
MathArccos 函数返回 0 至 Pi(弧度)内 x 的反余弦值。
MathArccos
double MathArcsin(double x)
double MathArcsin(double val)
MathArcsin
MathArcsin 函数返回 -Pi/2 至 Pi/2 弧度内 x 的反正弦值。
MathArcsin
double MathArctan(double x)
double MathArctan(double value)
MathArctan
MathArctan 返回 x 的反正切值。
MathArctan
double MathCeil(double x)
double MathCeil(double val)
MathCeil
MathCeil 函数返回表示大于或等于 x 的最小整数的数值。
MathCeil
double MathCos(double value)
double MathCos(double value)
MathCos
返回指定角度的余弦值。
MathCos
double MathExp(double d)
double MathExp(double value)
MathExp
返回 e 的 d 次幂。
MathExp
double MathFloor(double x)
double MathFloor(double val)
MathFloor
MathFloor 函数返回表示小于或等于 x 的最大整数的数值。
MathFloor
double MathLog(double x)
double MathLog(double val)
MathLog
如果成功,MathLog 函数返回 x 的自然对数。
MathLog
double MathMax(double value1,
               double value2)
double MathMax(double value1,
               double value2)
MathMax
返回两个数值中的最大值。
MathMax
double MathMin(double value1,
               double value2)
double MathMin(double value1,
               double value2)
MathMin
返回两个数值中的最小值。
MathMin
double MathMod(double value1,
               double value2)
double MathMod(double value1,
               double value2)
MathMod
函数返回两个数相除后的浮点余数。
MathMod
double MathPow(double base,
               double exponent)
double MathPow(double base,
               double exponent)
MathPow
返回底表达式的指定幂的值(指数值)。
MathPow
int MathRand()
int MathRand()
MathRand
MathRand 函数返回 0 至 32767 内的伪随机数。
MathRand
double MathRound(double value)
double MathRound(double value)
MathRound
返回指定数值最接近整数的四舍五入值。
MathRound
double MathSin(double value)
double MathSin(double value)
MathSin
返回指定角度的正弦值。
MathSin
double MathSqrt(double x)
double MathSqrt(double value)
MathSqrt
MathSqrt 函数返回 x 的平方根。
MathSqrt
void MathSrand(int seed)
void MathSrand(int seed)
MathSrand
MathSrand() 函数设置用于生成一系列伪随机整数的起点。
MathSrand
double MathTan(double x)
double MathTan(double rad)
MathTan
MathTan 返回 x 的正切值。
MathTan

15. 对象函数

MQL4  MQL5 说明
bool ObjectCreate(string name,
                  int type,
                  int window,
                  datetime time1,
                  double price1,
                  datetime time2=0,
                  double price2=0,
                  datetime time3=0,
                  double price3=0)
bool ObjectCreateMQL4(string name,
                      ENUM_OBJECT type,
                      int window,
                      datetime time1,
                      double price1,
                      datetime time2=0,
                      double price2=0,
                      datetime time3=0,
                      double price3=0)
  {
   return(ObjectCreate(0,name,type,window,
          time1,price1,time2,price2,time3,price3));
  }
ObjectCreate
在指定窗口中创建一个具有指定名称、类型和初始坐标的对象。
ObjectCreate
bool ObjectDelete(string name)
bool ObjectDeleteMQL4(string name)
  {
   return(ObjectDelete(0,name));
  }
ObjectDelete
删除具有指定名称的对象。
ObjectDelete
string ObjectDescription(string name)
string ObjectDescriptionMQL4(string name)
  {
   return(ObjectGetString(0,name,OBJPROP_TEXT));
  }
ObjectDescription
返回对象说明。
ObjectGetString
int ObjectFind(string name)
int ObjectFindMQL4(string name)
  {
   return(ObjectFind(0,name));
  }
ObjectFind
搜索具有指定名称的对象。
ObjectFind
double ObjectGet(string name,
                 int prop_id)
double ObjectGetMQL4(string name,
                     int index)
  {
   switch(index)
     {
      case OBJPROP_TIME1:
         return(ObjectGetInteger(0,name,OBJPROP_TIME));
      case OBJPROP_PRICE1:
         return(ObjectGetDouble(0,name,OBJPROP_PRICE));
      case OBJPROP_TIME2:
         return(ObjectGetInteger(0,name,OBJPROP_TIME,1));
      case OBJPROP_PRICE2:
         return(ObjectGetDouble(0,name,OBJPROP_PRICE,1));
      case OBJPROP_TIME3:
         return(ObjectGetInteger(0,name,OBJPROP_TIME,2));
      case OBJPROP_PRICE3:
         return(ObjectGetDouble(0,name,OBJPROP_PRICE,2));
      case OBJPROP_COLOR:
         return(ObjectGetInteger(0,name,OBJPROP_COLOR));
      case OBJPROP_STYLE:
         return(ObjectGetInteger(0,name,OBJPROP_STYLE));
      case OBJPROP_WIDTH:
         return(ObjectGetInteger(0,name,OBJPROP_WIDTH));
      case OBJPROP_BACK:
         return(ObjectGetInteger(0,name,OBJPROP_WIDTH));
      case OBJPROP_RAY:
         return(ObjectGetInteger(0,name,OBJPROP_RAY_RIGHT));
      case OBJPROP_ELLIPSE:
         return(ObjectGetInteger(0,name,OBJPROP_ELLIPSE));
      case OBJPROP_SCALE:
         return(ObjectGetDouble(0,name,OBJPROP_SCALE));
      case OBJPROP_ANGLE:
         return(ObjectGetDouble(0,name,OBJPROP_ANGLE));
      case OBJPROP_ARROWCODE:
         return(ObjectGetInteger(0,name,OBJPROP_ARROWCODE));
      case OBJPROP_TIMEFRAMES:
         return(ObjectGetInteger(0,name,OBJPROP_TIMEFRAMES));
      case OBJPROP_DEVIATION:
         return(ObjectGetDouble(0,name,OBJPROP_DEVIATION));
      case OBJPROP_FONTSIZE:
         return(ObjectGetInteger(0,name,OBJPROP_FONTSIZE));
      case OBJPROP_CORNER:
         return(ObjectGetInteger(0,name,OBJPROP_CORNER));
      case OBJPROP_XDISTANCE:
         return(ObjectGetInteger(0,name,OBJPROP_XDISTANCE));
      case OBJPROP_YDISTANCE:
         return(ObjectGetInteger(0,name,OBJPROP_YDISTANCE));
      case OBJPROP_FIBOLEVELS:
         return(ObjectGetInteger(0,name,OBJPROP_LEVELS));
      case OBJPROP_LEVELCOLOR:
         return(ObjectGetInteger(0,name,OBJPROP_LEVELCOLOR));
      case OBJPROP_LEVELSTYLE:
         return(ObjectGetInteger(0,name,OBJPROP_LEVELSTYLE));
      case OBJPROP_LEVELWIDTH:
         return(ObjectGetInteger(0,name,OBJPROP_LEVELWIDTH));
     }
  }
ObjectGet
函数返回指定对象属性的值。
ObjectGetInteger、ObjectGetDouble

string ObjectGetFiboDescription(string name,
                                int index)
string ObjectGetFiboDescriptionMQL4(string name,
                                    int index)
  {
   return(ObjectGetString(0,name,OBJPROP_LEVELTEXT,index));
  }
ObjectGetFiboDescription
函数返回斐波纳契对象的层级说明。
ObjectGetString
int ObjectGetShiftByValue(string name,
                          double value)
int ObjectGetShiftByValueMQL4(string name,
                              double value)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(PERIOD_CURRENT);
   datetime Arr[];
   int shift;
   MqlRates mql4[];
   if(ObjectGetTimeByValue(0,name,value)<0) return(-1);
   CopyRates(NULL,timeframe,0,1,mql4);
   if(CopyTime(NULL,timeframe,mql4[0].time,
      ObjectGetTimeByValue(0,name,value),Arr)>0)
      return(ArraySize(Arr)-1);
   else return(-1);
  }
ObjectGetShiftByValue
函数计算并返回指定价格的柱索引(相对于当前柱的偏移)。
MqlRates、ObjectGetTimeByValue、CopyRates、CopyTime、ArraySize
double ObjectGetValueByShift(string name,
                             int shift)
double ObjectGetValueByShiftMQL4(string name,
                                 int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(PERIOD_CURRENT);
   MqlRates mql4[];
   CopyRates(NULL,timeframe,shift,1,mql4);
   return(ObjectGetValueByTime(0,name,mql4[0].time,0));
  }
ObjectGetValueByShift
函数计算并返回指定柱(相对于当前柱的偏移)的价格值。
MqlRates、CopyRates、ObjectGetValueByTime
bool ObjectMove(string name,
                int point,
                datetime time1,
                double price1)
bool ObjectMoveMQL4(string name,
                    int point,
                    datetime time1,
                    double price1)
  {
   return(ObjectMove(0,name,point,time1,price1));
  }
ObjectMove
函数在图表中移动对象坐标。视它们的类型而定,对象可以有一至三个坐标。
ObjectMove
string ObjectName(int index)
string ObjectNameMQL4(int index)
  {
   return(ObjectName(0,index));
  }
ObjectName
函数按对象在对象列表中的索引返回对象名称。
ObjectName
int ObjectsDeleteAll(int window=EMPTY,
                     int type=EMPTY)
int ObjectsDeleteAllMQL4(int window=EMPTY,
                         int type=EMPTY)
  {
   return(ObjectsDeleteAll(0,window,type));
  }
ObjectsDeleteAll
在指定的图表子窗口中删除指定类型的所有对象。
ObjectsDeleteAll
bool ObjectSet(string name,
               int prop_id,
               double value)
bool ObjectSetMQL4(string name,
                   int index,
                   double value)
  {
   switch(index)
     {
      case OBJPROP_TIME1:
         ObjectSetInteger(0,name,OBJPROP_TIME,(int)value);return(true);
      case OBJPROP_PRICE1:
         ObjectSetDouble(0,name,OBJPROP_PRICE,value);return(true);
      case OBJPROP_TIME2:
         ObjectSetInteger(0,name,OBJPROP_TIME,1,(int)value);return(true);
      case OBJPROP_PRICE2:
         ObjectSetDouble(0,name,OBJPROP_PRICE,1,value);return(true);
      case OBJPROP_TIME3:
         ObjectSetInteger(0,name,OBJPROP_TIME,2,(int)value);return(true);
      case OBJPROP_PRICE3:
         ObjectSetDouble(0,name,OBJPROP_PRICE,2,value);return(true);
      case OBJPROP_COLOR:
         ObjectSetInteger(0,name,OBJPROP_COLOR,(int)value);return(true);
      case OBJPROP_STYLE:
         ObjectSetInteger(0,name,OBJPROP_STYLE,(int)value);return(true);
      case OBJPROP_WIDTH:
         ObjectSetInteger(0,name,OBJPROP_WIDTH,(int)value);return(true);
      case OBJPROP_BACK:
         ObjectSetInteger(0,name,OBJPROP_BACK,(int)value);return(true);
      case OBJPROP_RAY:
         ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,(int)value);return(true);
      case OBJPROP_ELLIPSE:
         ObjectSetInteger(0,name,OBJPROP_ELLIPSE,(int)value);return(true);
      case OBJPROP_SCALE:
         ObjectSetDouble(0,name,OBJPROP_SCALE,value);return(true);
      case OBJPROP_ANGLE:
         ObjectSetDouble(0,name,OBJPROP_ANGLE,value);return(true);
      case OBJPROP_ARROWCODE:
         ObjectSetInteger(0,name,OBJPROP_ARROWCODE,(int)value);return(true);
      case OBJPROP_TIMEFRAMES:
         ObjectSetInteger(0,name,OBJPROP_TIMEFRAMES,(int)value);return(true);
      case OBJPROP_DEVIATION:
         ObjectSetDouble(0,name,OBJPROP_DEVIATION,value);return(true);
      case OBJPROP_FONTSIZE:
         ObjectSetInteger(0,name,OBJPROP_FONTSIZE,(int)value);return(true);
      case OBJPROP_CORNER:
         ObjectSetInteger(0,name,OBJPROP_CORNER,(int)value);return(true);
      case OBJPROP_XDISTANCE:
         ObjectSetInteger(0,name,OBJPROP_XDISTANCE,(int)value);return(true);
      case OBJPROP_YDISTANCE:
         ObjectSetInteger(0,name,OBJPROP_YDISTANCE,(int)value);return(true);
      case OBJPROP_FIBOLEVELS:
         ObjectSetInteger(0,name,OBJPROP_LEVELS,(int)value);return(true);
      case OBJPROP_LEVELCOLOR:
         ObjectSetInteger(0,name,OBJPROP_LEVELCOLOR,(int)value);return(true);
      case OBJPROP_LEVELSTYLE:
         ObjectSetInteger(0,name,OBJPROP_LEVELSTYLE,(int)value);return(true);
      case OBJPROP_LEVELWIDTH:
         ObjectSetInteger(0,name,OBJPROP_LEVELWIDTH,(int)value);return(true);

      default: return(false);
     }
   return(false);
  }
ObjectSet
更改指定对象属性的值。
ObjectSetInteger、ObjectSetDouble
bool ObjectSetFiboDescription(string name,
                              int index,
                              string text)
bool ObjectSetFiboDescriptionMQL4(string name,
                                  int index,
                                  string text)
  {
   return(ObjectSetString(0,name,OBJPROP_LEVELTEXT,index,text));
  }
ObjectSetFiboDescription
函数将新的说明指定到斐波纳契对象的层级。
ObjectSetString
bool ObjectSetText(string name,
                   string text,
                   int font_size,
                   string font_name=NULL,
                   color text_color=CLR_NONE)
bool ObjectSetTextMQL4(string name,
                       string text,
                       int font_size,
                       string font="",
                       color text_color=CLR_NONE)
  {
   int tmpObjType=(int)ObjectGetInteger(0,name,OBJPROP_TYPE);
   if(tmpObjType!=OBJ_LABEL && tmpObjType!=OBJ_TEXT) return(false);
   if(StringLen(text)>0 && font_size>0)
     {
      if(ObjectSetString(0,name,OBJPROP_TEXT,text)==true
         && ObjectSetInteger(0,name,OBJPROP_FONTSIZE,font_size)==true)
        {
         if((StringLen(font)>0)
            && ObjectSetString(0,name,OBJPROP_FONT,font)==false)
            return(false);
         if(text_color>-1
            && ObjectSetInteger(0,name,OBJPROP_COLOR,text_color)==false)
            return(false);
         return(true);
        }
      return(false);
     }
   return(false);
  }
ObjectSetText
更改对象说明。
ObjectGetInteger、ObjectSetString、ObjectSetInteger、StringLen
int ObjectsTotal(int type=EMPTY)
int ObjectsTotalMQL4(int type=EMPTY,
                     int window=-1)
  {
   return(ObjectsTotal(0,window,type));
  }
ObjectsTotal
返回图表中指定类型的对象总数。
ObjectsTotal
int ObjectType(string name)
int ObjectTypeMQL4(string name)
  {
   return((int)ObjectGetInteger(0,name,OBJPROP_TYPE));
  }
ObjectType
函数返回对象类型值。
ObjectGetInteger

16. 字符串函数

MQL4 MQL5  说明
string StringConcatenate(...)
int StringConcatenate(string &string_var,
                      void argument1
                      void argument2
                      ...)
StringConcatenate
构建所传递数据的字符串,并返回该字符串。
StringConcatenate
int StringFind(string text,
               string matched_text,
               int start=0)
int StringFind(string string_value,
               string match_substring,
               int start_pos=0)
StringFind
搜索子字符串。返回搜索的子字符串在字符串中的开始位置,如果找不到子字符串,则返回 -1。
StringFind
int StringGetChar(string text,
                  int pos)
ushort StringGetCharacter(string string_value,
                          int pos)
StringGetChar
返回字符串中指定位置的字符(代码)。
StringGetCharacter
int StringLen(string text)
int StringLen(string string_value)
StringLen
返回字符串中的字符数量。
StringLen
string StringSetChar(string text,
                     int pos,
                     int value)
bool StringSetCharacter(string &string_var,
                        int pos,
                        ushort character)
StringSetChar
返回在指定位置更改了字符的字符串副本。
StringSetCharacter
string StringSubstr(string text,
                    int start,
                    int length=0)
string StringSubstr(string string_value,
                    int start_pos,
                    int length=-1)
StringSubstr
在文本字符串中从指定位置开始提取子字符串。
StringSubstr
string StringTrimLeft(string text)
int StringTrimLeft(string& string_var)
StringTrimLeft
函数截去字符串左侧的换行符、空格和制表符。
StringTrimLeft
string StringTrimRight(string text)
int StringTrimRight(string& string_var)
StringTrimRight
函数截去字符串右侧的换行符、空格和制表符。
StringTrimRight

17. 技术指标

在“MQL5 初学者:在‘EA 交易’中使用技术指标的指南”一文中考虑了在 EA 交易程序中使用技术指标的原则。在该参考中使用的方法足以为指定的价格获得指标计算结果。要使用此方法,我们需要辅助函数:

double CopyBufferMQL4(int handle,int index,int shift)
  {
   double buf[];
   switch(index)
     {
      case 0: if(CopyBuffer(handle,0,shift,1,buf)>0)
         return(buf[0]); break;
      case 1: if(CopyBuffer(handle,1,shift,1,buf)>0)
         return(buf[0]); break;
      case 2: if(CopyBuffer(handle,2,shift,1,buf)>0)
         return(buf[0]); break;
      case 3: if(CopyBuffer(handle,3,shift,1,buf)>0)
         return(buf[0]); break;
      case 4: if(CopyBuffer(handle,4,shift,1,buf)>0)
         return(buf[0]); break;
      default: break;
     }
   return(EMPTY_VALUE);
  }

让我们声明以下常量:

ENUM_MA_METHOD MethodMigrate(int method)
  {
   switch(method)
     {
      case 0: return(MODE_SMA);
      case 1: return(MODE_EMA);
      case 2: return(MODE_SMMA);
      case 3: return(MODE_LWMA);
      default: return(MODE_SMA);
     }
  }
ENUM_APPLIED_PRICE PriceMigrate(int price)
  {
   switch(price)
     {
      case 1: return(PRICE_CLOSE);
      case 2: return(PRICE_OPEN);
      case 3: return(PRICE_HIGH);
      case 4: return(PRICE_LOW);
      case 5: return(PRICE_MEDIAN);
      case 6: return(PRICE_TYPICAL);
      case 7: return(PRICE_WEIGHTED);
      default: return(PRICE_CLOSE);
     }
  }
ENUM_STO_PRICE StoFieldMigrate(int field)
  {
   switch(field)
     {
      case 0: return(STO_LOWHIGH);
      case 1: return(STO_CLOSECLOSE);
      default: return(STO_LOWHIGH);
     }
  }
//+------------------------------------------------------------------
enum ALLIGATOR_MODE  { MODE_GATORJAW=1,   MODE_GATORTEETH, MODE_GATORLIPS };
enum ADX_MODE        { MODE_MAIN,         MODE_PLUSDI, MODE_MINUSDI };
enum UP_LOW_MODE     { MODE_BASE,         MODE_UPPER,      MODE_LOWER };
enum ICHIMOKU_MODE   { MODE_TENKANSEN=1,  MODE_KIJUNSEN, MODE_SENKOUSPANA, MODE_SENKOUSPANB, MODE_CHINKOUSPAN };
enum MAIN_SIGNAL_MODE{ MODE_MAIN,         MODE_SIGNAL };
MQL4  MQL5  说明
double iAC(string symbol,
           int timeframe,
           int shift)
double iACMQL4(string symbol,
               int tf,
               int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   int handle=iAC(symbol,timeframe);
   if(handle<0)
     {
      Print("此 iAC 对象不能创建: 错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,0,shift));
  }
iAC
计算 Bill Williams 的加速/减速振荡技术指标。
iAC
double iAD(string symbol,
           int timeframe,
           int shift)
double iADMQL4(string symbol,
               int tf,
               int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   int handle=(int)iAD(symbol,timeframe,VOLUME_TICK);
   if(handle<0)
     {
      Print("此 iAD 对象不能创建: 错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,0,shift));
  }
iAD
计算累积分布指标并返回其值。
iAD
double iAlligator(string symbol,
                  int timeframe,
                  int jaw_period,
                  int jaw_shift,
                  int teeth_period,
                  int teeth_shift,
                  int lips_period,
                  int lips_shift,
                  int ma_method,
                  int applied_price,
                  int mode,
                  int shift)
double iAlligatorMQL4(string symbol,
                      int tf,
                      int jaw_period,
                      int jaw_shift,
                      int teeth_period,
                      int teeth_shift,
                      int lips_period,
                      int lips_shift,
                      int method,
                      int price,
                      int mode,
                      int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   ENUM_MA_METHOD ma_method=MethodMigrate(method);
   ENUM_APPLIED_PRICE applied_price=PriceMigrate(price);
   int handle=iAlligator(symbol,timeframe,jaw_period,jaw_shift,
                         teeth_period,teeth_shift,
                         lips_period,lips_shift,
                         ma_method,applied_price);
   if(handle<0)
     {
      Print("此 iAlligator 对象不能创建: 错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,mode-1,shift));
  }
iAlligator
计算 Bill Williams 的鳄鱼指标并返回其值。
iAlligator
double iADX(string symbol,
            int timeframe,
            int period,
            int applied_price,
            int mode,
            int shift)
double iADXMQL4(string symbol,
                int tf,
                int period,
                int price,
                int mode,
                int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   int handle=iADX(symbol,timeframe,period);
   if(handle<0)
     {
      Print("此 iADX 对象不能创建: 错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,mode,shift));
  }
iADX
计算趋向指标并返回其值。
iADX
double iATR(string symbol,
            int timeframe,
            int period,
            int shift)
double iATRMQL4(string symbol,
                int tf,
                int period,
                int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   int handle=iATR(symbol,timeframe,period);
   if(handle<0)
     {
      Print("此 iATR 对象不能创建: 错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,0,shift));
  }
iATR
计算平均真实波动范围指标并返回其值。
iATR
double iAO(string symbol,
           int timeframe,
           int shift)
double iAOMQL4(string symbol,
               int tf,
               int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   int handle=iAO(symbol,timeframe);
   if(handle<0)
     {
      Print("此 iAO 对象不能创建: 错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,0,shift));
  }
iAO
计算 Bill Williams 的动量振荡指标并返回其值。
iAO
double iBearsPower(string symbol,
                   int timeframe,
                   int period,
                   int applied_price,
                   int shift)
double iBearsPowerMQL4(string symbol,
                       int tf,
                       int period,
                       int price,
                       int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   int handle=iBearsPower(symbol,timeframe,period);
   if(handle<0)
     {
      Print("此 iBearsPower 对象不能创建: 错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,0,shift));
  }
iBearsPower
计算熊市力量动量指标并返回其值。
iBearsPower
double iBands(string symbol,
              int timeframe,
              int period,
              int deviation,
              int bands_shift,
              int applied_price,
              int mode,
              int shift)
double iBandsMQL4(string symbol,
                  int tf,
                  int period,
                  double deviation,
                  int bands_shift,
                  int method,
                  int mode,
                  int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   ENUM_MA_METHOD ma_method=MethodMigrate(method);
   int handle=iBands(symbol,timeframe,period,
                     bands_shift,deviation,ma_method);
   if(handle<0)
     {
      Print("此 iBands 对象不能创建: 错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,mode,shift));
  }
iBands
计算布林带指标并返回其值。
iBands
double iBandsOnArray(double array[],
                     int total,
                     int period,
                     int deviation,
                     int bands_shift,
                     int mode,
                     int shift)
iBandsOnArray
用存储在数字数组中的数据计算布林带指标。
double iBullsPower(string symbol,
                   int timeframe,
                   int period,
                   int applied_price,
                   int shift)
double iBullsPowerMQL4(string symbol,
                       int tf,
                       int period,
                       int price,
                       int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   int handle=iBullsPower(symbol,timeframe,period);
   if(handle<0)
     {
      Print("此 iBullsPower 对象不能创建: 错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,0,shift));
  }
iBullsPower
计算牛市力量动量指标并返回其值。
iBullsPower
double iCCI(string symbol,
            int timeframe,
            int period,
            int applied_price,
            int shift)
double iCCIMQL4(string symbol,
                int tf,
                int period,
                int price,
                int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   ENUM_APPLIED_PRICE applied_price=PriceMigrate(price);
   int handle=iCCI(symbol,timeframe,period,price);
   if(handle<0)
     {
      Print("此 iCCI 对象不能创建: 错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,0,shift));
  }
iCCI
计算顺市指标并返回其值。
iCCI
double iCCIOnArray(double array[],
                   int total,
                   int period,
                   int shift)
iCCIOnArray
用存储在数字数组中的数据计算顺市指标。
double iCustom(string symbol,
               int timeframe,
               string name,
               ...,
               int mode,
               int shift)
int iCustom(string symbol,
            ENUM_TIMEFRAMES period,
            string name
            ...)
iCustom
计算指定的自定义指标并返回其值。
iCustom
double iDeMarker(string symbol,
                 int timeframe,
                 int period,
                 int shift)
double iDeMarkerMQL4(string symbol,
                     int tf,
                     int period,
                     int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   int handle=iDeMarker(symbol,timeframe,period);
   if(handle<0)
     {
      Print("此 iDeMarker 对象不能创建: 错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,0,shift));
  }
iDeMarker
计算 DeMarker 指标并返回其值。
iDeMarker
double iEnvelopes(string symbol,
                  int timeframe,
                  int ma_period,
                  int ma_method,
                  int ma_shift,
                  int applied_price,
                  double deviation,
                  int mode,
                  int shift)
double EnvelopesMQL4(string symbol,
                     int tf,
                     int ma_period,
                     int method,
                     int ma_shift,
                     int price,
                     double deviation,
                     int mode,
                     int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   ENUM_MA_METHOD ma_method=MethodMigrate(method);
   ENUM_APPLIED_PRICE applied_price=PriceMigrate(price);
   int handle=iEnvelopes(symbol,timeframe,
                         ma_period,ma_shift,ma_method,
                         applied_price,deviation);
   if(handle<0)
     {
      Print("此 iEnvelopes 对象不能创建: 错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,mode-1,shift));
  }
iEnvelopes
计算包络线指标并返回其值。
iEnvelopes
double iEnvelopesOnArray(double array[],
                         int total,
                         int ma_period,
                         int ma_method,
                         int ma_shift,
                         double deviation,
                         int mode,
                         int shift)
iEnvelopesOnArray
用存储在数字数组中的数据计算包络线指标。
double iForce(string symbol,
              int timeframe,
              int period,
              int ma_method,
              int applied_price,
              int shift)
double iForceMQL4(string symbol,
                  int tf,
                  int period,
                  int method,
                  int price,
                  int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   ENUM_MA_METHOD ma_method=MethodMigrate(method);
   int handle=iForce(symbol,timeframe,period,ma_method,VOLUME_TICK);
   if(handle<0)
     {
      Print("此 iForce 对象不能创建: 错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,0,shift));
  }
iForce
计算强力指数并返回其值。
iForce
double iFractals(string symbol,
                 int timeframe,
                 int mode,
                 int shift)
double iFractalsMQL4(string symbol,
                     int tf,
                     int mode,
                     int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   int handle=iFractals(symbol,timeframe);
   if(handle<0)
     {
      Print("此 iFractals 对象不能创建: 错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,mode-1,shift));
  }
iFractals
计算分形指标并返回其值。
iFractals
double iGator(string symbol,
              int timeframe,
              int jaw_period,
              int jaw_shift,
              int teeth_period,
              int teeth_shift,
              int lips_period,
              int lips_shift,
              int ma_method,
              int applied_price,
              int mode,
              int shift)
double iGatorMQL4(string symbol,
                  int tf,
                  int jaw_period,
                  int jaw_shift,
                  int teeth_period,
                  int teeth_shift,
                  int lips_period,
                  int lips_shift,
                  int method,
                  int price,
                  int mode,
                  int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   ENUM_MA_METHOD ma_method=MethodMigrate(method);
   ENUM_APPLIED_PRICE applied_price=PriceMigrate(price);
   int handle=iGator(symbol,timeframe,jaw_period,jaw_shift,
                     teeth_period,teeth_shift,
                     lips_period,lips_shift,
                     ma_method,applied_price);
   if(handle<0)
     {
      Print("此 iGator 对象不能创建: 错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,mode-1,shift));
  }
iGator
计算鳄鱼振荡指标。
iGator
double iIchimoku(string symbol,
                 int timeframe,
                 int tenkan_sen,
                 int kijun_sen,
                 int senkou_span_b,
                 int mode,
                 int shift)
double iIchimokuMQL4(string symbol,
                     int tf,
                     int tenkan_sen,
                     int kijun_sen,
                     int senkou_span_b,
                     int mode,
                     int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   int handle=iIchimoku(symbol,timeframe,
                        tenkan_sen,kijun_sen,senkou_span_b);
   if(handle<0)
     {
      Print("此 iIchimoku 对象不能创建: 错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,mode-1,shift));
  }
iIchimoku
计算 Ichimoku Kinko Hyo 指标并返回其值。
iIchimoku
double iBWMFI(string symbol,
              int timeframe,
              int shift)
double iBWMFIMQL4(string symbol,
                  int tf,
                  int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   int handle=(int)iBWMFI(symbol,timeframe,VOLUME_TICK);
   if(handle<0)
     {
      Print("此 iBWMFI 对象不能创建: 错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,0,shift));
  }
iBWMFI
计算 Bill Williams 市场促进指数并返回其值。
iBWMFI
double iMomentum(string symbol,
                 int timeframe,
                 int period,
                 int applied_price,
                 int shift)
double iMomentumMQL4(string symbol,
                     int tf,
                     int period,
                     int price,
                     int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   ENUM_APPLIED_PRICE applied_price=PriceMigrate(price);
   int handle=iMomentum(symbol,timeframe,period,applied_price);
   if(handle<0)
     {
      Print("此 iMomentum 对象不能创建: 错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,0,shift));
  }
iMomentum
计算动量指标并返回其值。
iMomentum
double iMomentumOnArray(double array[],
                        int total,
                        int period,
                        int shift)
iMomentumOnArray
用存储在数字数组中的数据计算动量指标。
double iMFI(string symbol,
            int timeframe,
            int period,
            int shift)
double iMFIMQL4(string symbol,
                int tf,
                int period,
                int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   int handle=(int)iMFI(symbol,timeframe,period,VOLUME_TICK);
   if(handle<0)
     {
      Print("此 iMFI 对象不能创建: 错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,0,shift));
  }
iMFI
计算资金流向指标并返回其值。
iMFI
double iMA(string symbol,
           int timeframe,
           int period,
           int ma_shift,
           int ma_method,
           int applied_price,
           int shift)
double iMAMQL4(string symbol,
               int tf,
               int period,
               int ma_shift,
               int method,
               int price,
               int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   ENUM_MA_METHOD ma_method=MethodMigrate(method);
   ENUM_APPLIED_PRICE applied_price=PriceMigrate(price);
   int handle=iMA(symbol,timeframe,period,ma_shift,
                  ma_method,applied_price);
   if(handle<0)
     {
      Print("此 iMA 对象不能创建: 错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,0,shift));
  }
iMA
计算移动平均线指标并返回其值。
iMA
double iMAOnArray(double array[],
                  int total,
                  int period,
                  int ma_shift,
                  int ma_method,
                  int shift)
double iMAOnArrayMQL4(double &array[],
                      int total,
                      int period,
                      int ma_shift,
                      int ma_method,
                      int shift)
  {
   double buf[],arr[];
   if(total==0) total=ArraySize(array);
   if(total>0 && total<=period) return(0);
   if(shift>total-period-ma_shift) return(0);
   switch(ma_method)
     {
      case MODE_SMA :
        {
         total=ArrayCopy(arr,array,0,shift+ma_shift,period);
         if(ArrayResize(buf,total)<0) return(0);
         double sum=0;
         int    i,pos=total-1;
         for(i=1;i<period;i++,pos--)
            sum+=arr[pos];
         while(pos>=0)
           {
            sum+=arr[pos];
            buf[pos]=sum/period;
            sum-=arr[pos+period-1];
            pos--;
           }
         return(buf[0]);
        }
      case MODE_EMA :
        {
         if(ArrayResize(buf,total)<0) return(0);
         double pr=2.0/(period+1);
         int    pos=total-2;
         while(pos>=0)
           {
            if(pos==total-2) buf[pos+1]=array[pos+1];
            buf[pos]=array[pos]*pr+buf[pos+1]*(1-pr);
            pos--;
           }
         return(buf[shift+ma_shift]);
        }
      case MODE_SMMA :
        {
         if(ArrayResize(buf,total)<0) return(0);
         double sum=0;
         int    i,k,pos;
         pos=total-period;
         while(pos>=0)
           {
            if(pos==total-period)
              {
               for(i=0,k=pos;i<period;i++,k++)
                 {
                  sum+=array[k];
                  buf[k]=0;
                 }
              }
            else sum=buf[pos+1]*(period-1)+array[pos];
            buf[pos]=sum/period;
            pos--;
           }
         return(buf[shift+ma_shift]);
        }
      case MODE_LWMA :
        {
         if(ArrayResize(buf,total)<0) return(0);
         double sum=0.0,lsum=0.0;
         double price;
         int    i,weight=0,pos=total-1;
         for(i=1;i<=period;i++,pos--)
           {
            price=array[pos];
            sum+=price*i;
            lsum+=price;
            weight+=i;
           }
         pos++;
         i=pos+period;
         while(pos>=0)
           {
            buf[pos]=sum/weight;
            if(pos==0) break;
            pos--;
            i--;
            price=array[pos];
            sum=sum-lsum+price*period;
            lsum-=array[i];
            lsum+=price;
           }
         return(buf[shift+ma_shift]);
        }
      default: return(0);
     }
   return(0);
  }
double iOsMA(string symbol,
             int timeframe,
             int fast_ema_period,
             int slow_ema_period,
             int signal_period,
             int applied_price,
             int shift)
double iOsMAMQL4(string symbol,
                 int tf,
                 int fast_ema_period,
                 int slow_ema_period,
                 int signal_period,
                 int price,
                 int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   ENUM_APPLIED_PRICE applied_price=PriceMigrate(price);
   int handle=iOsMA(symbol,timeframe,
                    fast_ema_period,slow_ema_period,
                    signal_period,applied_price);
   if(handle<0)
     {
      Print("此 iOsMA 对象不能创建: 错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,0,shift));
  }
iOsMA
计算移动平均线动量指标并返回其值。
iOsMA
double iMACD(string symbol,
             int timeframe,
             int fast_ema_period,
             int slow_ema_period,
             int signal_period,
             int applied_price,
             int mode,
             int shift)
double iMACDMQL4(string symbol,
                 int tf,
                 int fast_ema_period,
                 int slow_ema_period,
                 int signal_period,
                 int price,
                 int mode,
                 int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   ENUM_APPLIED_PRICE applied_price=PriceMigrate(price);
   int handle=iMACD(symbol,timeframe,
                    fast_ema_period,slow_ema_period,
                    signal_period,applied_price);
   if(handle<0)
     {
      Print("此 iMACD 对象不能创建: 错误 ",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,mode,shift));
  }
iMACD
计算平滑异动移动平均线动量指标并返回其值。
iMACD
double iOBV(string symbol,
            int timeframe,
            int applied_price,
            int shift)
double iOBVMQL4(string symbol,
                int tf,
                int price,
                int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   int handle=iOBV(symbol,timeframe,VOLUME_TICK);
   if(handle<0)
     {
      Print("此 iOBV 对象不能创建: 错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,0,shift));
  }
iOBV
计算平衡交易量指标并返回其值。
iOBV
double iSAR(string symbol,
            int timeframe,
            double step,
            double maximum,
            int shift)
double iSARMQL4(string symbol,
                int tf,
                double step,
                double maximum,
                int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   int handle=iSAR(symbol,timeframe,step,maximum);
   if(handle<0)
     {
      Print("此 iSAR 对象不能创建: 错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,0,shift));
  }
iSAR
计算抛物线停止和反向系统指标并返回其值。
iSAR
double iRSI(string symbol,
            int timeframe,
            int period,
            int applied_price,
            int shift)
double iRSIMQL4(string symbol,
                int tf,
                int period,
                int price,
                int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   ENUM_APPLIED_PRICE applied_price=PriceMigrate(price);
   int handle=iRSI(symbol,timeframe,period,applied_price);
   if(handle<0)
     {
      Print("此 iRSI 对象不能创建: 错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,0,shift));
  }
iRSI
计算相对强弱指数并返回其值。
iRSI
double iRSIOnArray(double array[],
                   int total,
                   int period,
                   int shift)
iRSIOnArray
用存储在数字数组中的数据计算相对强弱指数。
double iRVI(string symbol,
            int timeframe,
            int period,
            int mode,
            int shift)
double iRVIMQL4(string symbol,
                int tf,
                int period,
                int mode,
                int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   int handle=iRVI(symbol,timeframe,period);
   if(handle<0)
     {
      Print("此 iRVI 对象不能创建: 错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,mode,shift));
  }
iRVI
计算相对能量指数并返回其值。
iRVI
double iStdDev(string symbol,
               int timeframe,
               int ma_period,
               int ma_shift,
               int ma_method,
               int applied_price,
               int shift)
double iStdDevMQL4(string symbol,
                   int tf,
                   int ma_period,
                   int ma_shift,
                   int method,
                   int price,
                   int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   ENUM_MA_METHOD ma_method=MethodMigrate(method);
   ENUM_APPLIED_PRICE applied_price=PriceMigrate(price);
   int handle=iStdDev(symbol,timeframe,ma_period,ma_shift,
                      ma_method,applied_price);
   if(handle<0)
     {
      Print("此 iStdDev 对象不能创建: 错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,0,shift));
  }
iStdDev
计算标准方差指标并返回其值。
iStdDev
double iStdDevOnArray(double array[],
                      int total,
                      int ma_period,
                      int ma_shift,
                      int ma_method,
                      int shift)
iStdDevOnArray
用存储在数字数组中的数据计算标准方差指标。
double iStochastic(string symbol,
                   int timeframe,
                   int%Kperiod,
                   int%Dperiod,
                   int slowing,
                   int method,
                   int price_field,
                   int mode,
                   int shift)
double iStochasticMQL4(string symbol,
                       int tf,
                       int Kperiod,
                       int Dperiod,
                       int slowing,
                       int method,
                       int field,
                       int mode,
                       int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   ENUM_MA_METHOD ma_method=MethodMigrate(method);
   ENUM_STO_PRICE price_field=StoFieldMigrate(field);
   int handle=iStochastic(symbol,timeframe,Kperiod,Dperiod,
                          slowing,ma_method,price_field);
   if(handle<0)
     {
      Print("此 iStochastic 对象不能创建: 错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,mode,shift));
  }
iStochastic
计算随机动量指标并返回其值。
iStochastic
double iWPR(string symbol,
            int timeframe,
            int period,
            int shift)
double iWPRMQL4(string symbol,
                int tf,
                int period,
                int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   int handle=iWPR(symbol,timeframe,period);
   if(handle<0)
     {
      Print("此 iWPR 对象不能创建: 错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,0,shift));
  }
iWPR
计算 Larry William 百分比范围指标并返回其值。
iWPR

18. 时间序列访问

MQL4  MQL5  说明
int iBars(string symbol,
          int timeframe)
int iBarsMQL4(string symbol,int tf)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   return(Bars(symbol,timeframe));
  }

int iBarsMQL4(string symbol,int tf)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   return(Bars(symbol,timeframe));
  }

Bars
返回指定图表中柱的数量。
Bars

int iBarShift(string symbol,
              int timeframe,
              datetime time,
              bool exact=false
int iBarShiftMQL4(string symbol,
                  int tf,
                  datetime time,
                  bool exact=false)
  {
   if(time<0) return(-1);
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   datetime Arr[],time1;
   CopyTime(symbol,timeframe,0,1,Arr);
   time1=Arr[0];
   if(CopyTime(symbol,timeframe,time,time1,Arr)>0)
     {
      if(ArraySize(Arr)>2) return(ArraySize(Arr)-1);
      if(time<time1) return(1);
      else return(0);
     }
   else return(-1);
  }
iBarShift
按建立时间搜索柱。
CopyTime、ArraySize
double iClose(string symbol,
              int timeframe,
              int shift)
double iCloseMQL4(string symbol,int tf,int index)
{
   if(index < 0) return(-1);
   double Arr[];
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   if(CopyClose(symbol,timeframe, index, 1, Arr)>0) 
        return(Arr[0]);
   else return(-1);
}
Close
返回具有指定时间框架和偏移的指定交易品种的柱的收盘价。如果本地历史记录是空的(未加载),则函数返回 0。
CopyRates、MqlRates
double iHigh(string symbol,
             int timeframe,
             int shift)
double iHighMQL4(string symbol,int tf,int index)

{
   if(index < 0) return(-1);
   double Arr[];
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   if(CopyHigh(symbol,timeframe, index, 1, Arr)>0) 
        return(Arr[0]);
   else return(-1);
}

High
返回具有指定时间框架和偏移的指定交易品种的柱的最高价。如果本地历史记录是空的(未加载),则函数返回 0。
CopyRates、MqlRates
int iHighest(string symbol,
             int timeframe,
             int type,
             int count=WHOLE_ARRAY,
             int start=0)
int iHighestMQL4(string symbol,
                 int tf,
                 int type,
                 int count=WHOLE_ARRAY,
                 int start=0)
  {
   if(start<0) return(-1);
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   if(count<=0) count=Bars(symbol,timeframe);
   if(type<=MODE_OPEN)
     {
      double Open[];
      ArraySetAsSeries(Open,true);
      CopyOpen(symbol,timeframe,start,count,Open);
      return(ArrayMaximum(Open,0,count)+start);
     }
   if(type==MODE_LOW)
     {
      double Low[];
      ArraySetAsSeries(Low,true);
      CopyLow(symbol,timeframe,start,count,Low);
      return(ArrayMaximum(Low,0,count)+start);
     }
   if(type==MODE_HIGH)
     {
      double High[];
      ArraySetAsSeries(High,true);
      CopyHigh(symbol,timeframe,start,count,High);
      return(ArrayMaximum(High,0,count)+start);
     }
   if(type==MODE_CLOSE)
     {
      double Close[];
      ArraySetAsSeries(Close,true);
      CopyClose(symbol,timeframe,start,count,Close);
      return(ArrayMaximum(Close,0,count)+start);
     }
   if(type==MODE_VOLUME)
     {
      long Volume[];
      ArraySetAsSeries(Volume,true);
      CopyTickVolume(symbol,timeframe,start,count,Volume);
      return(ArrayMaximum(Volume,0,count)+start);
     }
   if(type>=MODE_TIME)
     {
      datetime Time[];
      ArraySetAsSeries(Time,true);
      CopyTime(symbol,timeframe,start,count,Time);
      return(ArrayMaximum(Time,0,count)+start);
      //---
     }
   return(0);
  }

iHighest
视类型而定,返回指定的若干周期内最高价的偏移。
CopyOpen、CopyLow、CopyHigh、CopyClose、CopyTickVolume、CopyTime、ArrayMaximum
double iLow(string symbol,
            int timeframe,
            int shift)
double iLowMQL4(string symbol,int tf,int index)

{
   if(index < 0) return(-1);
   double Arr[];
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   if(CopyLow(symbol,timeframe, index, 1, Arr)>0)
        return(Arr[0]);
   else return(-1);
}
iLow
返回具有指定时间框架和偏移的指定交易品种的柱的最低价。如果本地历史记录是空的(未加载),则函数返回 0。
CopyRates、MqlRates
int iLowest(string symbol,
            int timeframe,
            int type,
            int count=WHOLE_ARRAY,
            int start=0)
int iLowestMQL4(string symbol,
                int tf,
                int type,
                int count=WHOLE_ARRAY,
                int start=0)
  {
   if(start<0) return(-1);
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   if(count<=0) count=Bars(symbol,timeframe);
   if(type<=MODE_OPEN)
     {
      double Open[];
      ArraySetAsSeries(Open,true);
      CopyOpen(symbol,timeframe,start,count,Open);
      return(ArrayMinimum(Open,0,count)+start);
     }
   if(type==MODE_LOW)
     {
      double Low[];
      ArraySetAsSeries(Low,true);
      CopyLow(symbol,timeframe,start,count,Low);
      return(ArrayMinimum(Low,0,count)+start);
     }
   if(type==MODE_HIGH)
     {
      double High[];
      ArraySetAsSeries(High,true);
      CopyHigh(symbol,timeframe,start,count,High);
      return(ArrayMinimum(High,0,count)+start);
     }
   if(type==MODE_CLOSE)
     {
      double Close[];
      ArraySetAsSeries(Close,true);
      CopyClose(symbol,timeframe,start,count,Close);
      return(ArrayMinimum(Close,0,count)+start);
     }
   if(type==MODE_VOLUME)
     {
      long Volume[];
      ArraySetAsSeries(Volume,true);
      CopyTickVolume(symbol,timeframe,start,count,Volume);
      return(ArrayMinimum(Volume,0,count)+start);
     }
   if(type>=MODE_TIME)
     {
      datetime Time[];
      ArraySetAsSeries(Time,true);
      CopyTime(symbol,timeframe,start,count,Time);
      return(ArrayMinimum(Time,0,count)+start);
     }
//---
   return(0);
  }

iLowest
视类型而定,返回指定的若干周期内最低价的偏移。
CopyOpen、CopyLow、CopyHigh、CopyClose、CopyTickVolume、CopyTime、ArrayMinimum
double iOpen(string symbol,
             int timeframe,
             int shift)
double iOpenMQL4(string symbol,int tf,int index)

{   
   if(index < 0) return(-1);
   double Arr[];
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   if(CopyOpen(symbol,timeframe, index, 1, Arr)>0) 
        return(Arr[0]);
   else return(-1);
}
iOpen
返回具有指定时间框架和偏移的指定交易品种的柱的开盘价。如果本地历史记录是空的(未加载),则函数返回 0。
CopyRates、MqlRates
datetime iTime(string symbol,
               int timeframe,
               int shift)
datetime iTimeMQL4(string symbol,int tf,int index)

{
   if(index < 0) return(-1);
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   datetime Arr[];
   if(CopyTime(symbol, timeframe, index, 1, Arr)>0)
        return(Arr[0]);
   else return(-1);
}
iTime
返回具有指定时间框架和偏移的指定交易品种的柱的时间值。如果本地历史记录是空的(未加载),则函数返回 0。
CopyRates、MqlRates
double iVolume(string symbol,
               int timeframe,
               int shift)
int iVolumeMQL4(string symbol,int tf,int index)

{
   if(index < 0) return(-1);
   long Arr[];
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   if(CopyTickVolume(symbol, timeframe, index, 1, Arr)>0)
        return(Arr[0]);
   else return(-1);
}
iVolume
返回具有指定时间框架和偏移的指定交易品种的柱的价格变动量值。如果本地历史记录是空的(未加载),则函数返回 0。
CopyRates、MqlRates

19. 图表操作

MQL4  MQL5 说明
void HideTestIndicators(bool hide)
HideTestIndicators
函数设置一个用于隐藏 EA 交易程序所调用的指标的标记。
int Period()
ENUM_TIMEFRAMES  Period()
Period
返回确定使用的周期(图表时间框架)的分钟数。
Period
bool RefreshRates()
RefreshRates
刷新预定义的变量和序列数组中的数据。
string Symbol()
string Symbol()
Symbol
返回含有当前金融工具的名称的文本字符串。
Symbol
int WindowBarsPerChart()
int ChartGetInteger(0,CHART_VISIBLE_BARS,0)
WindowBarsPerChart
函数返回在图表上显示的柱的数量。
ChartGetInteger
string WindowExpertName()
string MQLInfoString(MQL5_PROGRAM_NAME)
WindowExpertName
视 MQL4 程序而定,返回调用该函数的所执行 EA 交易程序、脚本、自定义指标或库的名称。
MQLInfoString

int WindowFind(string name)
int WindowFindMQL4(string name)
  {
   int window=-1;
   if((ENUM_PROGRAM_TYPE)MQLInfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR)
     {
      window=ChartWindowFind();
     }
   else
     {
      window=ChartWindowFind(0,name);
      if(window==-1) Print(__FUNCTION__+"(): 错误 = ",GetLastError());
     }
   return(window);
  }
WindowFind
如果找到具有指定名称的指标,则函数返回包含此指定指标的窗口索引,否则返回 -1。
ChartWindowFind、MQLInfoInteger
int WindowFirstVisibleBar()
int ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0)
WindowFirstVisibleBar
函数返回当空图表窗口中第一个可见柱的编号。
ChartGetInteger
int WindowHandle(string symbol,
                 int timeframe)
int WindowHandleMQL4(string symbol,
                     int tf)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   long currChart,prevChart=ChartFirst();
   int i=0,limit=100;
   while(i<limit)
     {
      currChart=ChartNext(prevChart);
      if(currChart<0) break;
      if(ChartSymbol(currChart)==symbol
         && ChartPeriod(currChart)==timeframe)
         return((int)currChart);
      prevChart=currChart;
      i++;
     }
   return(0);
  }
WindowHandle
返回指定图表的系统窗口句柄。
ChartFirst、ChartNext、ChartSymbol, ChartPeriod
bool WindowIsVisible(int index)
bool ChartGetInteger(0,CHART_WINDOW_IS_VISIBLE,index)
WindowIsVisible
如果图表子窗口可见,则返回 TRUE,否则返回 FALSE。
ChartGetInteger
int WindowOnDropped()
int ChartWindowOnDropped()
WindowOnDropped
返回 EA 交易程序、自定义指标或脚本所在的窗口的索引。
ChartWindowOnDropped
double WindowPriceMax(int index=0)
double ChartGetDouble(0,CHART_PRICE_MAX,index)
WindowPriceMax
返回当前图表的指定子窗口的垂直刻度的最大值(0-主图表窗口,指标的子窗口从 1 开始编号)。
ChartGetDouble
double WindowPriceMin(int index=0)
double ChartGetDouble(0,CHART_PRICE_MIN,index)
WindowPriceMin
返回当前图表的指定子窗口的垂直刻度的最小值(0-主图表窗口,指标的子窗口从 1 开始编号)。
ChartGetDouble
double WindowPriceOnDropped()
double ChartPriceOnDropped()
WindowPriceOnDropped
返回 EA 交易程序或脚本所在的图表点的价格部分。
ChartPriceOnDropped
void WindowRedraw()
void ChartRedraw(0)
WindowRedraw
强制重绘当前图表。
ChartRedraw
bool WindowScreenShot(string filename,
                      int size_x,
                      int size_y,
                      int start_bar=-1,
                      int chart_scale=-1,
                      int chart_mode=-1)
bool WindowScreenShotMQL4(string filename,
                          int size_x,
                          int size_y,
                          int start_bar=-1,
                          int chart_scale=-1,
                          int chart_mode=-1)
  {
   if(chart_scale>0 && chart_scale<=5)
      ChartSetInteger(0,CHART_SCALE,chart_scale);
   switch(chart_mode)
     {
      case 0: ChartSetInteger(0,CHART_MODE,CHART_BARS);
      case 1: ChartSetInteger(0,CHART_MODE,CHART_CANDLES);
      case 2: ChartSetInteger(0,CHART_MODE,CHART_LINE);
     }
   if(start_bar<0)
      return(ChartScreenShot(0,filename,size_x,size_y,ALIGN_RIGHT));
   else
      return(ChartScreenShot(0,filename,size_x,size_y,ALIGN_LEFT));
  }
WindowScreenShot
作为 GIF 文件保存当前图表屏幕的截图。
ChartSetInteger, ChartScreenShot
datetime WindowTimeOnDropped()
datetime ChartTimeOnDropped()
WindowTimeOnDropped
返回 EA 交易程序或脚本所在的图表点的时间部分。
ChartTimeOnDropped
int WindowsTotal()
int ChartGetInteger(0,CHART_WINDOWS_TOTAL)
WindowsTotal
返回图表上指标窗口的数量(包括主图表)。
ChartGetInteger
int WindowXOnDropped()
int ChartXOnDropped()
WindowXOnDropped
返回 EA 交易程序或脚本所在的图表窗口客户端区域点的 X 轴的值(以像素为单位)。
ChartXOnDropped
int WindowYOnDropped()
int ChartYOnDropped()
WindowYOnDropped
返回 EA 交易程序或脚本所在的图表窗口客户端区域点的 Y 轴的值(以像素为单位)。
ChartYOnDropped

总结

  1. 我们没有考虑交易函数,因为在 MQL5 中概念有所不同,并且应该使用原来的概念!可以转换它们,但是交易逻辑应改变。换言之,转换它们没有意义。
  2. 从一种语言将程序转换为另一种语言始终伴随着功能和性能的损失。因此,请将本指南用于快速搜索对等函数。
  3. 我计划开发 MQL4 仿真程序,让您能够在新的 MetaTrader 5 客户端中运行您的 MQL4 程序。

鸣谢:keiji、A. Williams。

本文译自 MetaQuotes Software Corp. 撰写的俄文原文
原文地址: https://www.mql5.com/ru/articles/81

 

 


MyFxtop迈投-靠谱的外汇跟单社区,免费跟随高手做交易!

 

免责声明:本文系转载自网络,如有侵犯,请联系我们立即删除,另:本文仅代表作者个人观点,与迈投财经无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。

風險提示

MyFxtops邁投所列信息僅供參考,不構成投資建議,也不代表任何形式的推薦或者誘導行為。MyFxtops邁投非外匯經紀商,不接觸妳的任何資金。 MYFXTOPS不保證客戶盈利,不承擔任何責任。從事外彙和差價合約等金融產品的槓桿交易具有高風險,損失有可能超過本金,請量力而行,入市前需充分了解潛在的風險。過去的交易成績並不代表以後的交易成績。依據各地區法律法規,MyFxtops邁投不向中國大陸、美國、加拿大、朝鮮居民提供服務。

邁投公眾號

聯繫我們

客服QQ:981617007
Email: service@myfxtop.com

MyFxtops 邁投