日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

MT4开发 之开发自己的数据源系统(dde UniversalDDEConnector )

發(fā)布時間:2023/12/16 windows 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MT4开发 之开发自己的数据源系统(dde UniversalDDEConnector ) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

提示:如有任何疑問可在下方留言或者私信

文章目錄

  • 前言
  • 一、分析
  • 二、代碼實(shí)現(xiàn)
  • 總結(jié)


前言

之前有個客戶要求說自己服務(wù)器是通過DDE(UniversalDDEConnector)獲取別人的MT4行情提供給自己平臺的,現(xiàn)在想自己去實(shí)現(xiàn)一個DDE 達(dá)到不從MT4客戶端獲取行情,而是其他某平臺獲取行情。


提示:如有任何疑問可在下方留言或者私信

一、分析

之前沒有分析過DDE,所以首先抓包看下他與MT4之間是怎么通訊的有沒有加密等

可以看到數(shù)據(jù)沒有加密都是明文傳輸,這樣就簡單了,他的流程是:當(dāng)MT4選擇連接DDE的行情插件后,MT4會連接插件中設(shè)置的ip和端口也就是dde,MT4連接DDE之后,DDE會首先發(fā)送

> Universal DDE Connector 9.00 > Copyright 1999-2008 MetaQuotes Software Corp. > Login:

MT4返回用戶名

> Password:

MT4返回密碼。
DDE驗(yàn)證通過后則成功連接
然后DDE返回全部品種的數(shù)據(jù)給MT4,有個注意的地方是DDE每隔幾秒會發(fā)送一個心跳包給MT4

> Ping

這樣兩邊的通訊就建立完成了,比想象的要簡單

二、代碼實(shí)現(xiàn)

這種要求高的程序還是在linux上實(shí)現(xiàn)比較好,網(wǎng)絡(luò)框架我使用的是swool,比較成熟的框架比自己實(shí)現(xiàn)要穩(wěn)定。具體使用方法可自行百度
代碼

//存儲已經(jīng)插入的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進(jìn)程 )); $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: " );} }); //監(jiān)聽數(shù)據(jù)接收事件 $serv->on('receive', function ($serv, $fd, $from_id, $data) use ($redis){//獲取發(fā)消息的客戶端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"){//如果發(fā)過來的是賬號密碼//則不予回復(fù)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);} }); //監(jiān)聽連接關(guān)閉事件 $serv->on('close', function ($serv, $fd) use ($redis) {echo "close........";$redis->srem("fdlist",$fd); }); //啟動服務(wù)器 $serv->start();

這里我還一個程序就是給上面自己的DDE提供數(shù)據(jù)的程序,這個程序是獲取某平臺的數(shù)據(jù)發(fā)送給DDE,DDE在返回給MT4,這里主要研究DDE的通訊流程,就不展示其他的程序了,有需要可以留言或私信。


總結(jié)

提示:這個程序?qū)崿F(xiàn)起來難度不大,只是記錄一個分析的過程,希望對你正在做的事情有所幫助。
如有任何疑問可在下方留言或者私信

總結(jié)

以上是生活随笔為你收集整理的MT4开发 之开发自己的数据源系统(dde UniversalDDEConnector )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。