https://www.2cto.com/kf/201711/696119.html
https://blog.csdn.net/MT4Develop/article/details/51925398
基于MT4平台实现二元交易的思路
市面上有很多基于MT4做的二元交易。
这里只简单说下我做的思路。
主要要处理两个方面的事,一个是在客户端对二元信息的 展示,另一个是在服务端处理二元信息的交互以及对下单逻辑的处理。
这里只简单说下我做的思路。
主要要处理两个方面的事,一个是在客户端对二元信息的 展示,另一个是在服务端处理二元信息的交互以及对下单逻辑的处理。
1.客户端
客户端可以自己做一个程序,做个登录界面,
然后去 服务端验证用户名以及密码,验证成功后,加载MT4本身的客户端程序,使其自动登录,并附加(SetWindowsHookEx)一个自己写的dll文件到该进程上。
附加dll是 为了拦截一些MT4界面上的消息,当点击二元商品时,弹出一个自己的窗口界面(如下图)并关闭MT4本身的下单界面,在这个界面中进行二元的操作与信息展示
对于二元的下单以及信息获取,这里可以自己维护通讯,直接与服务端通讯,不需要与 MT4客户端发生任何关系。
客户端可以自己做一个程序,做个登录界面,
然后去 服务端验证用户名以及密码,验证成功后,加载MT4本身的客户端程序,使其自动登录,并附加(SetWindowsHookEx)一个自己写的dll文件到该进程上。
附加dll是 为了拦截一些MT4界面上的消息,当点击二元商品时,弹出一个自己的窗口界面(如下图)并关闭MT4本身的下单界面,在这个界面中进行二元的操作与信息展示
对于二元的下单以及信息获取,这里可以自己维护通讯,直接与服务端通讯,不需要与 MT4客户端发生任何关系。
2.服务端
服务端主要要处理 这么几个事,首先是客户端的一些数据请求的回应,例如验证用户帐号,获取二元的持仓,二元的下单等。
这里可以利用MT4插件的扩展事件
来做,MT4会将收到的数据转发到插件的这个事件中,事件处理后,会将数据返回给客户端。
服务端主要要处理 这么几个事,首先是客户端的一些数据请求的回应,例如验证用户帐号,获取二元的持仓,二元的下单等。
这里可以利用MT4插件的扩展事件
int APIENTRY MtSrvTelnet(const ULONG ip, char *buf, const int maxlen)
来做,MT4会将收到的数据转发到插件的这个事件中,事件处理后,会将数据返回给客户端。
由于二元业务是根据时间对单据进行结算,所以需要在插件中启动一个 线程,时刻检查单据的情况,在插件的启动事件
- 1
启动一个线程即可,在线程里对持仓单据持续检查,发现时间到了的就进行平仓操作,并计算相关的盈亏更新到单据中。
另外要注意启动的线程要在插件停止事件中关闭
另外要注意启动的线程要在插件停止事件中关闭
- 1
,否则可能会造成MT4服务端启时崩溃。
___
如何使用MT4平台实现二元交易
市面上有很多基于MT4做的二元交易。
这里只简单说下我做的思路。
主要要处理两个方面的事,一个是在客户端对二元信息的 展示,另一个是在服务端处理二元信息的交互以及对下单逻辑的处理。
这里只简单说下我做的思路。
主要要处理两个方面的事,一个是在客户端对二元信息的 展示,另一个是在服务端处理二元信息的交互以及对下单逻辑的处理。
1.客户端
客户端可以自己做一个程序,做个登录界面,
然后去 服务端验证用户名以及密码,验证成功后,加载MT4本身的客户端程序,使其自动登录,并附加(SetWindowsHookEx)一个自己写的dll文件到该进程上。
附加dll是 为了拦截一些MT4界面上的消息,当点击二元商品时,弹出一个自己的窗口界面(如下图)并关闭MT4本身的下单界面,在这个界面中进行二元的操作与信息展示
对于二元的下单以及信息获取,这里可以自己维护通讯,直接与服务端通讯,不需要与 MT4客户端发生任何关系。
客户端可以自己做一个程序,做个登录界面,
然后去 服务端验证用户名以及密码,验证成功后,加载MT4本身的客户端程序,使其自动登录,并附加(SetWindowsHookEx)一个自己写的dll文件到该进程上。
附加dll是 为了拦截一些MT4界面上的消息,当点击二元商品时,弹出一个自己的窗口界面(如下图)并关闭MT4本身的下单界面,在这个界面中进行二元的操作与信息展示
对于二元的下单以及信息获取,这里可以自己维护通讯,直接与服务端通讯,不需要与 MT4客户端发生任何关系。
2.服务端
服务端主要要处理 这么几个事,首先是客户端的一些数据请求的回应,例如验证用户帐号,获取二元的持仓,二元的下单等。
这里可以利用MT4插件的扩展事件
服务端主要要处理 这么几个事,首先是客户端的一些数据请求的回应,例如验证用户帐号,获取二元的持仓,二元的下单等。
这里可以利用MT4插件的扩展事件
int APIENTRY MtSrvTelnet(const ULONG ip, char *buf, const int maxlen)
来做,MT4会将收到的数据转发到插件的这个事件中,事件处理后,会将数据返回给客户端。
由于二元业务是根据时间对单据进行结算,所以需要在插件中启动一个 线程,时刻检查单据的情况,在插件的启动事件
1
| <code> int APIENTRY MtSrvStartup(CServerInterface *server) </code> |
启动一个线程即可,在线程里对持仓单据持续检查,发现时间到了的就进行平仓操作,并计算相关的盈亏更新到单据中。
另外要注意启动的线程要在插件停止事件中关闭
1
| <code> void APIENTRY MtSrvCleanup( void )</code> |
,否则可能会造成MT4服务端启时崩溃。
___
MT4服务端插件案例
需求描述
客户本来有一个交易系统,要求mt4与该系统交互,做到与该系统数据同步。
以下是客户的需求原文。
以下是客户的需求原文。
MT4只作为一个桌面版的交易工具,和WebTrader共用一个账号体系,MT4的所有功能最终都通过Web API连接券商系统的后台实现。MT4终端需要实现以下功能:
●登录
用户可以在MT4终端登录券商系统,登录后可以进行查询、下单、平仓等操作,MT4终端需要正确保存用户的登录状态,超时后需要重新登录。
●查询账号保证金
用户可以在MT4终端查询自己交易账号的保证金情况
●查询持仓
用户可以在MT4终端查询到自己交易账号的持仓情况
●查询挂单
用户可以在MT4终端查询到自己交易账号委托的LIMIT和STOP类型订单
●查询交易记录
用户可以在MT4终端查询到自己交易账号的历史交易记录
●下单
用户可以在MT4终端下单,订单抛给通过券商系统执行,成交后通过查询持仓和保证金更新用户的账号信息
●撤单
用户可以在MT4终端撤销自己委托的LIMIT和STOP类型的订单
●平仓
用户可以在MT4终端对交易账号中持仓的订单进行平仓,平仓成功后通过查询持仓和保证金更新用户的账号信息
●设置止损
用户可以在MT4终端对持仓中的订单设置或修改止损价位
●设置止盈
用户可以在MT4终端对持仓中的订单设置或修改止盈价位
实现细节
本文中将原有系统WebTrade简称为web接口.
1)登录
MT4的登录事件
- 1
由于此事件需要在mt4验证过用户名密码后才能触发,所以用户帐号和密码必须已经存在于MT4中。
MT4帮助对此事件的说明,如下
MT4帮助对此事件的说明,如下
int APIENTRY MtSrvUserLogin(const UserInfo *info)
Purpose-
filter connections by clients.
The hook is called after the client has successfully authorized by the server. This hook can be used to filter the client’s access to the server on basis of the own internal data.
Parameters:
info - client info
Return values:
TRUE - default value - allow login for this client
FALSE - block the client’s login, return “account disabled” (RET_ACCOUNT_DISABLED), and close the connection
进入此事件后,插件根据UserInfo中的用户名与密码,去调用web接口进行用户名与密码验证,根据验证的结果返回此事件的结果值,从而决定MT4客户端是否能登录成功。如果web接口验证通过,则同时将用户的相关信息(余额,单据历史,单据)都全部同步到MT4中来, 需要用到以下几个MT4服务端接口。
- 1
- 2
- 3
2)动态刷新数据
在服务的启动事件中开一个线程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
在线程中定时向web接口请求当前在线的MT4用户的相关数据(余额,持仓单据等),然后与MT4内的数据进行比较,将有差异的地方进行修正。
3)下单相关处理
交易事件
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
如果是下单请求,则先调用web接口下单,根据web的下单结果(成功/失败), 决定此事件的返回值,影响MT4下单的结果。
沒有留言:
張貼留言