MT4开发 之开发自己的数据源系统(dde UniversalDDEConnector )
提示:如有任何疑问可在下方留言或者私信
文章目录
- 前言
- 一、分析
- 二、代码实现
- 总结
前言
之前有个客户要求说自己服务器是通过DDE(UniversalDDEConnector)获取别人的MT4行情提供给自己平台的,现在想自己去实现一个DDE 达到不从MT4客户端获取行情,而是其他某平台获取行情。
提示:如有任何疑问可在下方留言或者私信
一、分析
之前没有分析过DDE,所以首先抓包看下他与MT4之间是怎么通讯的有没有加密等
可以看到数据没有加密都是明文传输,这样就简单了,他的流程是:当MT4选择连接DDE的行情插件后,MT4会连接插件中设置的ip和端口也就是dde,MT4连接DDE之后,DDE会首先发送
> Universal DDE Connector 9.00
> Copyright 1999-2008 MetaQuotes Software Corp.
> Login:
MT4返回用户名
> Password:
MT4返回密码。
DDE验证通过后则成功连接
然后DDE返回全部品种的数据给MT4,有个注意的地方是DDE每隔几秒会发送一个心跳包给MT4
> Ping
这样两边的通讯就建立完成了,比想象的要简单
二、代码实现
这种要求高的程序还是在linux上实现比较好,网络框架我使用的是swool,比较成熟的框架比自己实现要稳定。具体使用方法可自行百度
代码
//存储已经插入的fd
$redis = new Redis();
$redis->connect("127.0.0.1",6379);$table = new swoole_table(1024);
$table->column('msg', swoole_table::TYPE_STRING, 255);
$table->create();
$serv = new swoole_server("0.0.0.0", 2222);
$serv->set(array('worker_num' => 4, //开启两个worker进程
));
$serv->on('connect', function ($serv, $fd) use ($redis){echo "connect:" . $fd;if($fd == 1){ $timer_id = swoole_timer_tick(30000,function($timer_id) use ($redis,$serv) {echo "2s , timerId :{$timer_id} \n";$fdlist = $redis->smembers("fdlist");foreach($fdlist as $k=>$v){print_r($v); $serv->send( $v,"> Ping\r\n");} }); }$fdinfo = $serv->getClientInfo($fd);$address = $fdinfo['remote_ip'];if($address != "127.0.0.1"){$serv->send( $fd, "> Universal DDE Connector 9.00\r\n> Copyright 1999-2008 MetaQuotes Software Corp.\r\n> Login: " );}
});
//监听数据接收事件
$serv->on('receive', function ($serv, $fd, $from_id, $data) use ($redis){//获取发消息的客户端ip$fdinfo = $serv->getClientInfo($fd);$address = $fdinfo['remote_ip'];file_put_contents("/www/wwwroot/default/log.txt","==".$data."==\r\n",FILE_APPEND);if($data == "qqq\r\n"){//如果发过来的是账号密码//则不予回复echo "qqq\r\n";$serv->send( $fd, "> Password: " );}if($data == "zzz\r\n"){echo "zzz\r\n";$serv->send( $fd, "> Access granted\r\n" );$redis->sadd("fdlist",$fd);} $fdlist = $redis->smembers("fdlist");if($address == "127.0.0.1"){unset($fdlist[$fd]);} foreach($fdlist as $k=>$v){$serv->send( $v,$data);}
});
//监听连接关闭事件
$serv->on('close', function ($serv, $fd) use ($redis) {echo "close........";$redis->srem("fdlist",$fd);
});
//启动服务器
$serv->start();
这里我还一个程序就是给上面自己的DDE提供数据的程序,这个程序是获取某平台的数据发送给DDE,DDE在返回给MT4,这里主要研究DDE的通讯流程,就不展示其他的程序了,有需要可以留言或私信。
总结
提示:这个程序实现起来难度不大,只是记录一个分析的过程,希望对你正在做的事情有所帮助。
如有任何疑问可在下方留言或者私信
MT4开发 之开发自己的数据源系统(dde UniversalDDEConnector )相关推荐
- 搭建Spring Boot2.X集成Hibernate5项目,并集成传统SSH老项目的安全认证组件,以Spring Boot方式开发项目并集成到老系统
搭建Spring Boot2.X集成Hibernate5项目,并集成传统SSH老项目的安全认证组件,以Spring Boot方式开发项目并集成到老系统 场景 可行性分析 搭建Spring Boot集成 ...
- 用什么服务器开发小程序,开发小程序用什么服务器系统
开发小程序用什么服务器系统 内容精选 换一换 按照翻译方式的不同,高级语言通常可以分为两类:一类是编译翻译,一类是解释翻译,分别对应着编译型语言和解释型语言.编译型语言典型的如C.C++语言,都属于编 ...
- 通用权限管理系统组件 (GPM - General Permissions Manager) 权限管理以前我们都是自己开发,可是到下一个系统又不适用,又改,加上人员流动大,管理很混乱...
为什么80%的码农都做不了架构师?>>> 权限管理以前我们都是自己开发,可是到下一个系统又不适用,又改,加上人员流动大,管理很混乱 Ψ吉日嘎拉 采用通用权限管理系统,这些烦恼就 ...
- 基于结构光测量技术和3D物体识别技术开发的机器人3D视觉引导系统
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|新机器视觉 基于结构光测量技术和3D物体识别技术开发的机器 ...
- 乐鑫esp8266模块MicroPython开发板MQTT物联网人工智能最小系统
简 介: ※对于购买自网络的基于ESP8266的实验模块进行了初步的测试,它其中的一些示例进行了练习.特别是对于基于ESP8266的特殊的一些外设的测试. 关键词: ESP8266,MicroPyth ...
- 用“找回iPhone”的方法追踪新冠接触者,MIT谷歌苹果开发蓝牙新冠传播追踪系统...
贾浩楠 发自 凹非寺 量子位 报道 | 公众号 QbitAI 就在我国抗疫形势逐渐明朗,全国有序恢复正常之时,大洋彼岸的美国日子却一天比一天难过了. 由于美国人十分看重个人自由和隐私,导致严格的限行隔 ...
- 嵌入式Linux裸机开发(六)——S5PV210时钟系统
嵌入式Linux裸机开发(六)--S5PV210时钟系统 一.时钟系统简介 外设工作需要一定频率的时钟,这些时钟都由系统时钟提供.系统时钟一般由外部低频24MHZ晶体振荡器通过锁相环电路PLL倍频产生 ...
- PHP开发的爱情盲盒交友系统网站源码
简介: PHP开发的爱情盲盒交友系统网站源码 网盘下载地址: http://kekewangLuo.net/1ytQwVyoh8o0 图片:
- 导览系统定制开发_联联周边游系统源码定制开发平台方案
点击上方关注我们! 联联周边游系统开发,找[金生157威6875店2419同号]联联周边游软件开发,联联周边游系统APP开发,联联周边游系统小程序开发,联联周边游系统开发模式,联联周边游系统平台开发, ...
- AgileEAS.NET平台开发Step By Step系列-药店系统-索引
介绍 为了方便大家查看和学习AgileEAS.NET敏捷开发平台相关的文章,特别整理一个索引,我会尽快的完善相应的系列,本系列将会已"药店系统"为 例,从需求-最后的部署全过程的使 ...
最新文章
- ArrayList的内存泄露
- JavaWeb中连接数据库的一般方式与通过JNDI连接池的方式
- 致所有IT工程师的信(网络工程师的发展方向)
- 简述Python的Numpy,SciPy和Pandas,Matplotlib的区别
- C#修改文件或文件夹的权限,为指定用户、用户组添加完全控制权限
- 用rem来做响应式开发
- 简单解决Ubuntu修改locale的问题
- php smarty2 框架,PHP CodeIngiter 2.x.x 框架与 Smarty 3.x.x 模板引擎整合
- RabbitMQ小笔记
- EKF_SLAM一般过程
- 虚拟均衡器:Producers Vault Baby Bass for Mac
- 台式计算机硬盘的安装位置,台式电脑分别如何安装SSD(固态硬盘)详细图文教程...
- Foobar2000使用学习
- 幽灵蛛(pholcus)(四)--正则表达式学习资料
- 数据分析:你的城市复工了吗?
- arch模型的思路_ARCH模型课件.ppt
- iOS 自定义无限循环滚动广告动画控件
- (仿微信Android)IM聊天+抢红包+直播+朋友圈源码发布了
- 硕士毕业论文写不出来导致严重焦虑,怎么办?
- onedrive手机登录出现 无法登录,管理员需要为你分配可执行此操作的SharePoint和OneDrive许可证