[MT4-EA]一个简单的 EA 模板, 让现成的指标具有警报提示功能 [含EA和指标代码]
本帖最后由 boolapi 于 2014-5-11 11:30 编辑
这是两个星期前写的类似解说型的文, 也许在这论坛的朋友会需要这类通知型的 EA 或指标修改, 让面对这些全天开盘的商品在看盘上更加便利, 让 EA 帮你叮住自定的需求, 所以转贴于下. 趋势线突破通知型指标以前在论坛贴过帖.
附件 Indicator_Alert.mq4 是单一商品的指标通知 EA 范例模版, 可以依据自己的需要修改成复杂点成多指标判断的如 RSI+MACD, 或是依据客制指标如 Kaufman Adaptive Moving Average 或是阶梯线之类的, 如果需要更细的解说, 在下面留个言.
下图是个玩笑的图, 标普过去二十年用自写的 SuperLadder 指标套在周线图上, 这个就要许多年年才变一次方向, 牛熊市非常清晰, 基本上就不需要任何通知了, 也不需浪费时间在臆想什么时候走牛或走熊:)
附件的 TrendAlert.mq4 是"多"商品同时监控指标通知 EA 的范例 (但只作了 email 输出和 MT4 手机间通知两种选项), 是叮住另一个附件 SuperLadder.mq4 这个客制指标 (需要放在指标文件夹内) 在多商品的多空转换, 解说就不在这里写了, 如果能看懂单一商品的通知方法, 多商品也是类似的方法, 看代码即可了解, 要叮住其他自定的标准或需求, 按照那个思路来修改即可, 通知型的 EA 或指标写法都是类似简单的原理, 改个几次就上手了. 需要注意的 EA 调用指标的参数需要与显示在图表上的指标参数调成一致, 不然会发生 EA 发出通知, 但图表上指标还未碰到条件.
不过 MT4 在单一图表上挂 EA 来监控多商品, 因为其他商品的图表没有开启, 有时在反应上会迟钝些.
======解说文===============================
MT4 对于价格到达有警报提醒功能, 而警报提示功能包括 (1) 警报窗口, (2) 声音, (3) Email 提示, (4) 与手机 MT4 间提示四个选项.
相信不少朋友会想要当某个现成的指标达到某个指标值可以发出警报提示的简单功能, 之前也的确帮两位网上的朋友义务修改过, 这个功能可以写在现成的指标内, 也可以独立作个 EA 调用现成的指标来达成, 架构都是类似的, 因为指标和 EA 都是靠价格跳动来驱动的.
我把这个 EA 模版的解说写详细点, 让对 MT4 编程不太熟悉的朋友也能容易上手.
1. 指标档案名, 预设为 Indicator_Alert, 如果是对 RSI 指标作警告提示用, 指标档案名可以改为 RSI_Alert, 如果是对 MACD, 可以改为 MACD_Alert.
2. 如果之前没有用过 EA, 在 MT4 "工具"->"选项"->"智能交易系统" 里的 "允许自动交易" 打勾, 再把 EA 拉到图表上是, 在图表右上角需要看到一个笑脸表示 EA 才真正生效.
3. 输入参数的解释:
input bool AlertPopup = true; /// 警告窗口, 默认为 有 警告窗口
input bool Sound = true; /// 提示声音, 默认为 有 声音
input bool Email = false; /// Email 通知, 默认为 没有 通知
input bool Mobile = false; /// 与手机 MT4 间的提示通知, 默认为 没有 通知
input double UpThreshold = 30.0; /// 指标大于此值, 作 UP 提示
input double DownThreshold = 70.0; /// 指标小于此值, 作 DOWN 提示
input string IndicatorName = "RSI"; /// 提示中显示的指标名称
4. 抓取指标值, 这个模板是提取指标在最新的一根 K 棒, 和前一根 K 棒的指标值 (也就是 Index = 0 & Index = 1) 来比较.
// Indicator value for Index 0
dIndicatorCurrent = iRSI(Symbol(),Period(),14,PRICE_CLOSE,0);
// Indicator value for Index 1
dIndicatorPrevious = iRSI(Symbol(),Period(),14,PRICE_CLOSE,1);
指标提取的函数 iRSI(...), iMACD(...) 的解说可以参考 MQL4 文档资料网站:
http://docs.mql4.com/cn/indicators
基本上调用函数的最前面两个参数就是 Symbol(), Period(), 也就是图表当前的商品名, 周期, 也可以用 NULL, 0 来代替, 接下来是该指标的默认输入值, 在 RSI 这个例子就是 14, 如果是 MACD 是 12, 26, 9. 客制指标的调用是用 iCustom(.....) 函数.
最后一个参数就是那根 K 棒的 index 值, 最新的 K 棒的指标值放 0, 前一根放 1.
5. 判断的逻辑
如果是要比 UpThreshold 值高, 发出 UP 的提示, 前一根 K 棒的指标值要小于 UpThreshold, 这根 K 棒指标值大于 UpThreshold (也就是"交叉"过这个 RSI=30 Threshold 值), 也就是提示 UP 成立的条件.
要判断 DOWN 提示逻辑与上面相反, RSI 低于 70 时发出 DOWN 提示.
因为 Index = 0 这个当前 K 棒的价格是不断的变动的, 也会不断的触发这个 EA, 可能到这根 K 棒收完, 并没有达到提示的要求, 有的交易者并不介意, 因为这只是个通知型的 EA, 并没有自动交易, 收到提示再用人工判断, 但也有交易者喜欢确定的信号, 可以改为 Index = 1 和 2, 也就是前一根 K 棒(确定收完)和前前一根 K 棒的判断.
如果是 Index = 0 & Index = 1 两个指标值的判断, 还需要另外有个特别的处理, 因为 Index = 0 的最新价格是不断的跳动来触发 EA, 一旦条件成立会不断触发而发出许多提示, 解决的方法是当条件一旦被触发时, 设一个时间值 (MT4 的时间值就是从 1970/01/01 到现在的总秒数), 等于这根 Index = 0 的 K 棒的 Open 时间 Time[0], 在这根 K 棒没有收完前, 只要这个时间还等于这根 K 棒的 Open 时间值 就不要再让提示发出, 到了新的 K 棒出现后, Time[0] 值就改变, 判断逻辑又可以开始.
6. 发出的提示信息, 都将是这样的 Alert: EURUSD_M5 RSI UP 的信息, StringConcatenate(...) 是 MT4 把多字串组合起来的函数.
strAlertMessage = StringConcatenate("Alert: ",Symbol(),"_",PeriodToString(Period())," ",IndicatorName," UP");
因为 email 可以显示多点内容, 在 email 文本里会多显示当前价格和指标值.
Period() 是 MT4 传回当前图表周期分钟的函数, 如果是 M5 周期就是传回 5 的数值, 如果要显示 "M5" 的文字, 需要简单的函数来转化显示周期文字, 这个简单自写的 PeriodToString(...) 函数功能也含在 EA 里.
7. 提示声音档 "alert.wav" 在 MT4 文件夹内的 Sounds 文件夹, 可以自行置换喜欢的提示声音 wav 档.
补充内容 (2014-5-13 00:04):
多商品趋势监控 TrendAlert.mq4 EA 的详细说明和最后修改版 附于第七楼spx500weekly.jpgAlert.zip
发表于:2014-05-12 11:41只看该作者
2楼
韬客社区www.talkfx.co
发表于:2014-05-12 11:52只看该作者
3楼
强
遇到矛盾 先站在对方的立场上想想问题,先试着去理解别人
● 如何使用WinMTR查询平台连接流畅度
4楼
发表于:2014-05-12 14:45只看该作者
5楼
韬客社区www.talkfx.co
发表于:2014-05-12 15:52只看该作者
6楼
好东东
韬客社区www.talkfx.co
7楼
多商品趋势监控 EA - TrendAlert.mq4 的详细解说和最后修改于附件, EA 只需要放在一个商品图表上即可监控多商品的趋势变化
参数输入:
// 这两个是设定 EA 监控工作时间, 默认是 0-24 全天
extern int HourStart = 0;
extern int HourEnd = 24;
/// 这个是客制指标 SuperLadder 需要的参数, 可以根据自己需要的趋势指标来设计
extern double ATR_Factor = 2.5;
extern int MA_Period = 20;
/// 通知的方式, 这个 EA 只设计了 email 和与 MT4 手机间的通知两种方式, 可以参考上面单一商品通知 EA 多设计有声音和提示窗口
extern bool EmailAlert = true; // 默认有 email 通知
extern bool MobileAlert = false; // 默认没有与 MT4 手机间通知
MT4 email 设定可以参考个人博客上的 "使用 MT4 上的 email 发送功能", 与 MT4 手机间的通知设定可以参考 "利用 MT4 EA 作多商品价格爆发监控功能" 一文中有提到如何设定 PC 上的 MT4 与 手机 MT4 间的通知, 但有些国产安卓手机没有加上 Google push service 则无法开启这个 MT4 push 功能.
这个范例是监控十一个商品, 可以依据自己的需要改数量和商品名:
int iTotalSymbol = 11;
string strSymbol[11]={"SPX500","US30","GER30","JPN225","HKG33",
"EURUSD","GBPUSD","AUDUSD","USDJPY","USOil","XAUUSD"};
趋势转化的判断在, 基本上就是把自己常用的趋势指标放在 iCustom(...) 函数 内, 再比对 index = 1 & index = 2 (也就是上一根 K 棒和上上一根 K 棒指标的变化), 多商品不要比对 index = 0 和 index = 1, 因为 index=0 价格一直在变化, 会发出太多的通知. 每个趋势指标的多空判断逻辑都不同, 需要自行修改.
bTrendAlertTriggered 是用来判断那个商品在这个 K 棒时间有没有发过通知 boolean 值, 如果这个商品发过通知就不要重复发出.
indexCurrent = iCustom(strSymbol,Period(),"SuperLadder",ATR_Factor,MA_Period,3,1);
indexPrev = iCustom(strSymbol,Period(),"SuperLadder",ATR_Factor,MA_Period,3,2);
if ( indexCurrent != indexPrev && !bTrendAlertTriggered )
TrendAlert.zip
韬客社区www.talkfx.co
发表于:2014-05-13 07:33只看该作者
8楼
大神 附件里的文件放在MT4中那个文件夹里? 没用过EA有这类方面的教程吗
韬客社区www.talkfx.co
发表于:2014-05-13 09:19只看该作者
9楼
遇到矛盾 先站在对方的立场上想想问题,先试着去理解别人
● 如何使用WinMTR查询平台连接流畅度
10楼
韬客社区www.talkfx.co
发表于:2014-06-06 14:50只看该作者
11楼
boolapi兄,能私聊吗?我想编一个EA,谢谢!
韬客社区www.talkfx.co
12楼
韬客社区www.talkfx.co
发表于:2014-06-06 15:53只看该作者
13楼
我已给你发邮件啦,看看能否收到,明晚联络,晚安~
韬客社区www.talkfx.co
发表于:2014-06-10 01:29只看该作者
15楼
谢谢 正需要呢
韬客社区www.talkfx.co
发表于:2014-07-01 07:18只看该作者
17楼
下载是0啊,没有文件啊
韬客社区www.talkfx.co
18楼
韬客社区www.talkfx.co
发表于:2014-07-05 23:49只看该作者
19楼
支持一下
为LZ捧个场
韬客社区www.talkfx.co