设为首页 收藏本站 切换语言

MQL4课程-账户信息函数和检测函数

| 发表于 2022-11-29 14:02:56 | 显示全部楼层 |复制链接
1.账户信息函数
一般来说,在EA运行前,我们需要对账户进行判断,比如账户的信息是否正确,账户的净值是多少等等,账户信息核对通过后才可以使用我们的策略对账户的资金进行管理,同时也便于我们对账户的风险进行控制。
查找账户的信息一般采用AccountInfoDouble()、AccountInfoInteger()以及AccountInfoString()函数,这三个函数分别用来查询双精度浮点型账户信息、整数型账户信息以及字符串型账户信息。
比如说,现在我想查询账户的余额,由于余额是个小数,所以我们需要用查询双精度浮点型的账户信息函数AccountInfoDouble()来查询;如果要查账户的杠杆倍数,则用AccountInfoInteger()查找,如果查找交易商的名称,那么就要用AccountInfoString()。可以看到这个函数可以查询非常多的账户信息:
void OnStart()  {Print("账户余额="+(string) AccountInfoDouble(ACCOUNT_BALANCE));Print("账户亏损="+(string) AccountInfoDouble(ACCOUNT_CREDIT));Print("账户利润="+(string) AccountInfoDouble(ACCOUNT_PROFIT));Print("账户净值="+(string) AccountInfoDouble(ACCOUNT_EQUITY));Print("账户已用保证金="+(string) AccountInfoDouble(ACCOUNT_MARGIN));Print("账户可用保证金="+(string) AccountInfoDouble(ACCOUNT_MARGIN_FREE));Print("账户可用保证金比例="+(string) AccountInfoDouble(ACCOUNT_MARGIN_LEVEL) +"%");Print("账户追加保证金比例="+(string) AccountInfoDouble(ACCOUNT_MARGIN_SO_CALL) +"%");Print("爆仓保证金比例="+(string) AccountInfoDouble(ACCOUNT_MARGIN_SO_SO) +"%");Print("账户初始保证金="+(string) AccountInfoDouble(ACCOUNT_MARGIN_INITIAL));Print("账户维持保证金="+(string) AccountInfoDouble(ACCOUNT_MARGIN_MAINTENANCE) ); /*用于期货市场*/Print("账户活动资金="+(string) AccountInfoDouble(ACCOUNT_ASSETS)); /*用于期货市场*/Print("账户锁定保证金="+(string) AccountInfoDouble(ACCOUNT_COMMISSION_BLOCKED)); /*用于期货市场*/  }
所谓账户的追加保证金比例,指的是当前保证金比例小于50%时,交易商会通知你追加保证金以免爆仓,而爆仓保证金比例指的是当保证金比例小于30%时,交易商会对账户强行平仓。
这么多函数其实不用记,只要知道AccountInfoDouble()函数是用来查询账户的小数一类的信息就行了,而这个也是非常简单,直接看这个函数的名字你就知道这个函数可以用来干什么了。如果没有记住这里面的子目录,可以打开帮助文件搜索AccountInfoDouble()来查这个函数的子目录及其功能。以后的MQL4函数也大都不用去背,如果死记硬背估计没个一年还用不了,我们只需要知道一些主要的函数,然后充分利用好帮助文件即可。
接下来是整数型的账户信息,如账户的ID号码等,所有的整数型账户信息如下:
void OnStart()  {Print("账户ID="+(string) AccountInfoInteger (ACCOUNT_LOGIN));Print("杠杆倍数="+(string) AccountInfoInteger (ACCOUNT_LEVERAGE));Print("最大持仓单数="+(string) AccountInfoInteger (ACCOUNT_LIMIT_ORDERS)); //如果为0则没有限制,由交易商规定Print("是否允许账户交易="+(string) AccountInfoInteger (ACCOUNT_TRADE_ALLOWED)); //如果为0则不允许交易,为1则允许交易Print("是否允许EA交易="+(string) AccountInfoInteger (ACCOUNT_TRADE_EXPERT)); //如果为0则不允许,为1则允许Print("保证金的计算模式="+(string) AccountInfoInteger (ACCOUNT_MARGIN_SO_MODE)); //如果为0,则用百分比计算保证金,若低于某一比例则需追加保证金;若为1则采用保证金的数值来计算保证金,当保证金低于某一值时需追加保证金,取决于交易商,一般来说采用百分比计算  }

如果是模拟账户是没有持仓单数的限制的,如果是实盘账户的话会有限制,每个交易商都不一样,所以在做策略时,特别是多策略多品种同时运行,单子特别多的时候,一定要注意交易商在持仓单数的限制,否则单子数量到了一定程度后交易是开不了单的。另外,是否允许账户交易,这个一般来说是允许的,如果是观摩账号就不会允许。

最后我们看一下字符串类型的账户信息,代码如下:

void OnStart()  {Print("账户名称="+(string) AccountInfoInteger (ACCOUNT_NAME));Print("交易商服务器的名称="+(string) AccountInfoInteger (ACCOUNT_SERVER));Print("结算货币="+(string) AccountInfoInteger (ACCOUNT_CURRENCY)); Print("交易商公司名称="+(string) AccountInfoInteger (ACCOUNT_COMPANY));   }
再次重申,以上函数千万不要死记硬背,这会浪费大量的实践时间,我觉得依靠帮助文件来查询来多用这些函数,到后面用多了也就自然熟悉了。总而言之,多编写一些东西,多练习就行。
2.检测函数
检测类函数在帮助文件的目录中对应的是Checkup这一类函数。
打开这一类函数,我们可以看多这类函数有很多。下面挑几个常用的说一下,其他的函数不经常用到,所以在此不讲解。
首先最常用的检测函数是GetLastError()函数,这个函数用来返回程序出错的原因。这个函数在以后的模块编写时会经常用到,但是很多时候会涉及到开仓等交易函数,因此暂时不说,只要记得这个函数有什么用即可。
IsStopped()这个函数检测的是程序是否被停止操作,一般来说用来检查程序是否允许运行。
Symbol()函数用来获取挂的图表的品种,Period()用来获取当前图表的时间框架,Digits()用来获取当前品种的价格在小数点后有几位小数,Point()则用来返回当前图表货币对的最小报价单位,代码如下:

void OnStart()  {      string a=Symbol();      int b=Period();      int c=Digits();      double d=Point();      Print("当前货币对为"+a+",当前时间周期为"+(string)b+",小数点后有"+(string)c+"位小数"+",最小报价单位为"+(string)d);  }
注意Period()函数以分钟为单位来区别时间周期,比如4h,那么函数返回的便是240。
还有一些检测函数如TerminalInfoInteger()、TerminalInfoDouble()、TerminalInfoString()等等,可以检测的内容非常多,包括检测账户是模拟账户还是真实账户,检测是否是在回测,检测网络是否通畅等等,大家可以打开MQL4帮助文件查看,不用背下来,只在有需要时用一下即可。

如果有帮助,就支持一下我呗
举报

评论 使用道具

精彩评论2

QDFX
CC
| 发表于 2022-11-29 14:35:30 | 显示全部楼层
感谢分享,非常有用
举报

点赞 评论 使用道具

qwe11
CCC
| 发表于 2022-11-30 11:19:52 | 显示全部楼层
需要时用一下
举报

点赞 评论 使用道具

发新帖
EA交易
您需要登录后才可以评论 登录 | 立即注册

简体中文
繁體中文
English(英语)
日本語(日语)
Deutsch(德语)
Русский язык(俄语)
بالعربية(阿拉伯语)
Türkçe(土耳其语)
Português(葡萄牙语)
ภาษาไทย(泰国语)
한어(朝鲜语/韩语)
Français(法语)