论坛全局菜单下方 - TICKMILL 285X70论坛全局菜单下方 - ThinkMarkets285X70论坛全局菜单下方 - 荔枝返现285X70论坛全局菜单下方 -  icmarkets285X70
查看:5205回复:18
boolapi
注册时间2014-03-23
[MT4-EA]利用 MT4 EA 作多商品价格爆发监视功能 [附 EA 代码]
楼主发表于:2014-03-26 00:46只看该作者倒序浏览
1楼 电梯直达
电梯直达
对于二十四小时全天开盘的众多金融商品, 有个可以时时监控多商品价格或趋势变化的 EA 会让操作更加便利, 其实这类的通知型 EA 设计起来都相当的简单, 但实用性却很好. 原理是利用这类的 EA 放在任一图表上, 定时扫描监控多商品的价格和趋势, 通知方式可以是发出 email, 再利用一个 email app 在手机接收后发出振动或声音. 或是传送到手机版的 MT4 发出震动或声音. 在今年年初 MT4 build 600 出来前 (最新版是 build 625), MT4 的指标或 EA 一直需要靠图表上的价格有跳动后才触发, 对于监控多商品, 当个商品的图表的价格跳动触发并不一定与其他商品价格一致, 需要作其他的处理, 现在 build 600 把 MT5 一些事件触发的功能移植过来后 (如定时功能 OnTimer), 让这类 EA 的功能更加容易完成. 所以就把先前作的一版多商品价格爆发监控功能重新以 OnTimer 再改写. 这个 EA 是用来定时监控(每隔x秒)多商品爆发的通知型 EA, 详细说明请见: http://blog.sina.com.cn/s/blog_6717847d0101ehn2.html 也很容易依据这个架构来设计多商品趋势转换等通知型功能, 只是每个人都有自己不同的趋势指标或信号. EA 默认监控间隔为六十秒, 非农或央行议息会议当日可以把监控时间缩短成五秒. 不同交易商有不同的商品名称, 这部分修改请见说明. 同时 EA 也可以用来观察有那些商品是否常在非重要经济数据或事件也会发生过大的价格跳动, 例如黄金, 这也会帮助操作这个商品该留意的地方和特定不规则时间段. 补充内容 (2014-3-27 06:07): 后来发现一个小问题, 修改后的代码在第三楼回复.SpeedAlert.zip
TK29帖子1楼右侧xm竖版广告90-240
个性签名

韬客社区www.talkfx.co

广告
TK30+TK31帖子一樓廣告
TK30+TK31帖子一樓廣告
老正
注册时间2003-09-21
365热心助人奖
发表于:2014-03-26 07:11只看该作者
2楼
很好的思路哈:lol
个性签名

遇到矛盾 先站在对方的立场上想想问题,先试着去理解别人
如何使用WinMTR查询平台连接流畅度

fxmeter
注册时间2013-11-02
发表于:2014-03-26 07:25只看该作者
3楼
不错!谢谢分享! 新版MT4增加了chart event 和timer event响应,方便很多了.
boolapi
注册时间2014-03-23
楼主发表于:2014-03-26 22:08只看该作者
4楼
本帖最后由 boolapi 于 2014-3-27 06:44 编辑 后来发现一个新问题, 当 MT4 重新开启时, EA 会先载入后读取现存的商品价格, 但 MT4 接下来再同步的新价格可能与一开启的价格过大而产生误判, 所以多加一个判断, 在 EA 开始后五分钟暂时不动作.
修改后的代码如下: extern int IntervalSeconds = 60; extern double SP_500= 2.0; extern double Dow_Jones = 20; extern double DAX_30 = 20; extern double Nikkei_225 = 30; extern double Hang_Seng = 50; extern double EURUSD = 0.0020; extern double GBPUSD = 0.0020; extern double AUDUSD = 0.0020; extern double USDJPY = 0.200; extern double Crude_Oil = 0.25; extern double GOLD = 2.5; extern bool MobileAlert = false; extern bool EmailAlert = true; int iTotalSymbol = 11; string strSymbol[11]={"SP_500","Dow_Jones","DAX_30","Nikkei_225","Hang_Seng", "EURUSD","GBPUSD","AUDUSD","USDJPY","Crude_Oil","Gold"}; int iDigit; double dSpeedThreshold, dLastPrice; long lSkip = 0; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- ArrayResize(dSpeedThreshold, iTotalSymbol); dSpeedThreshold[0] = SP_500; dSpeedThreshold[1] = Dow_Jones; dSpeedThreshold[2] = DAX_30; dSpeedThreshold[3] = Nikkei_225; dSpeedThreshold[4] = Hang_Seng; dSpeedThreshold[5] = EURUSD; dSpeedThreshold[6] = GBPUSD; dSpeedThreshold[7] = AUDUSD; dSpeedThreshold[8] = USDJPY; dSpeedThreshold[9] = Crude_Oil; dSpeedThreshold[10] = GOLD; EventSetTimer(IntervalSeconds); ArrayResize(iDigit,iTotalSymbol); ArrayResize(dLastPrice, iTotalSymbol); ArrayInitialize(dLastPrice, 0.0); for (int i=0; i< iTotalSymbol; i++) iDigit = MarketInfo(strSymbol, MODE_DIGITS); if (IntervalSeconds<=0) return(INIT_PARAMETERS_INCORRECT); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- EventKillTimer(); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTimer() { lSkip++; if (lSkip<=300/IntervalSeconds) return; /// skp first five minutes double dPriceDelta = 0.0; double dLastDayClose = 0.0; double dUpDnPercent = 0.0; double dPriceCurrent = 0.0; int i; for (i=0;i= dSpeedThreshold && dLastPrice>0.0) { if (dPriceDelta>0) { OutputMessage(strSymbol, "UP", IntervalSeconds, DoubleToStr(dPriceCurrent,iDigit), DoubleToStr(dPriceDelta, iDigit), DoubleToStr(dLastDayClose, iDigit), DoubleToStr(dUpDnPercent,2)); } else { OutputMessage(strSymbol, "DOWN", IntervalSeconds, DoubleToStr(dPriceCurrent,iDigit), DoubleToStr(dPriceDelta, iDigit), DoubleToStr(dLastDayClose, iDigit), DoubleToStr(dUpDnPercent,2)); } } dLastPrice = dPriceCurrent; } } void OutputMessage(string strSym, string strDirection, int iInterval, string strPrice, string strPriceDelta, string strLastDayClose, string strUpDnPercent ) { if (MobileAlert){ SendNotification("Speed Alert - "+strSym+ " " + strDirection + " " + strPrice + " " + strPriceDelta); } if (EmailAlert) { SendMail("Speed Alert - " + strSym + " " + strDirection + " " + strPrice + " " + strPriceDelta, strSym + ": "+strDirection + " "+ strPriceDelta + " in " + IntegerToString(iInterval)+" second(s)" + "\nCurrent Price: " + strPrice + "\nServer Time: " + TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS) + "\nLast Day Close: " + strLastDayClose + "\nChange: " + strUpDnPercent + "%"); } } 补充内容 (2014-3-28 10:47): 再重新修改一版, 最新版在博客上.
boolapi
注册时间2014-03-23
楼主发表于:2014-04-05 03:50只看该作者
5楼
经历这周五非农的洗礼, 最后一版很稳定的监控到当日多商品的价格爆发. 附件是最新版. SpeedAlert.zip
limuc
注册时间2011-09-30
积极参与奖
发表于:2014-04-05 05:08只看该作者
6楼
会编程真好,emoji-image
microscale
注册时间2014-02-08
rfvedc
注册时间2014-12-26
hejinxi
注册时间2015-01-02
发表于:2015-02-02 13:08只看该作者
9楼
很好的思路哈:lol很好的思路哈:lol很好的思路哈:lol
rhinomax
注册时间2014-11-25
发表于:2015-03-20 02:07只看该作者
10楼
学习了。。。。。。。。。。。。。。。。。。。。。
wangyitang
注册时间2008-03-26
发表于:2015-04-01 01:34只看该作者
11楼
谢谢分享
tracysm
注册时间2014-12-07
发表于:2016-04-22 09:52只看该作者
12楼
感谢前辈分享,我自己也研究了一下,也搞了一个,然后群发邮件我自己和我自己群的群友。 mt4的默认邮件功能不大好用了,我现在用一个fxblue的插件,发邮件就比较顺畅了
honlin
注册时间2016-04-10
发表于:2016-05-05 10:27只看该作者
13楼
很好的思路哈:
个性签名

韬客社区www.talkfx.co

广告
论坛谏言--外汇交易不应是你投资的全部,交易外汇也不应是你生活的全部
options
注册时间2016-06-10
xinma
注册时间2016-03-19
zxfix
注册时间2009-01-07
发表于:2016-11-16 07:56只看该作者
17楼
学习了
mrlimail
注册时间2016-11-29
zhanhanru
注册时间2015-11-08
zhanhanru
注册时间2015-11-08
发表于:2017-05-15 13:32只看该作者
20楼
通报还是不够

本站免责声明:

1、本站所有广告及宣传信息均与韬客无关,如需投资请依法自行决定是否投资、斟酌资金安全及交易亏损风险;

2、韬客是独立的、仅为投资者提供交流的平台,网友发布信息不代表韬客的观点与意思表示,所有因网友发布的信息而造成的任何法律后果、风险与责任,均与韬客无关;

3、金融交易存在极高法律风险,未必适合所有投资者,请不要轻信任何高额投资收益的诱导而贸然投资;投资保证金交易导致的损失可能超过您投入的资金和预期。请您考虑自身的投资经验及风险承担能力,进行合法、理性投资;

4、所有投资者的交易帐户应仅限本人使用,不应交由第三方操作,对于任何接受第三方喊单、操盘、理财等操作的投资和交易,由此导致的任何风险、亏损及责任由投资者个人自行承担;

5、韬客不隶属于任何券商平台,亦不受任何第三方控制,韬客不邀约客户投资任何保证金交易,不接触亦不涉及投资者的任何资金及账户信息,不代理任何交易操盘行为,不向客户推荐任何券商平台,亦不存在其他任何推荐行为。投资者应自行选择券商平台,券商平台的任何行为均与韬客无关。投资者注册及使用韬客即表示其接受和认可上述声明,并自行承担法律风险。

版权所有:韬客外汇论坛 www.talkfx.com 联络我们:[email protected]