之前开发的外汇量化交易系统,行情和交易接口都是通过在MT4平台下编写EA来实现,具体方法是:

1、用C++编写一个动态库文件,在里面实现行情和交易数据调用接口,将报价数据和K线数据写入数据库中,并从数据库中获取外汇量化系统发出的交易指令。
2、在MT4中编写EA文件,在MT4上不间断运行,从MT4平台实时获取报价和K线数据,并调用动态库写入数据库中,于此同时,不断从数据库中获取交易指令,再调用MT4的交易指令完成交易。
采用此种方法的好处就是兼容性强,只要打开MT4软件运行EA,就可以完成行情和交易接口的获取,也不用管是哪个外汇平台,即使MT4软件升级了也能继续用。缺点就是必须打开一个MT4软件专门获取行情和报价数据,同时每个交易的账户也必须要运行一个MT4软件,比如有10个外汇账户,就必须运行10个MT4软件。交易账户不多的话,运行速度和各方面指标也尚可接受,周末都不用重启或关闭,基本上实现7X24小时不间断运行。
一晃自己的量化系统就运行了几年了,中间也不断进行各种优化,但随着交易账户的不断增加,对软硬件的考验就越来越高了,一台普通的服务器,同时运行10多个账户就感觉有点吃力了,毕竟MT4本身就是一个大型的行情和交易软件,要占用不少软硬件资源,还要加上数据库服务器,现在感觉3、4台服务器都不够用了,网络带宽也开始吃紧,已经到了非改不可的时候了。
对于MT4行情和交易的API接口,自己一直都有耳闻,据说这种API接口,可以直接连接MT4行情和交易服务器,而且可以不用管是哪家外汇平台,只要该平台支持MT4软件即可使用。现在市面上很多跟单系统和跟单平台,就是通过该API接口来实现跟单服务的,但感觉这种API接口应该不是MT4软件开发商推出的,属于第三方软件,甚至有可能就是通过对MT4软件进行逆向分析提取出来的东西,一旦MT4软件升级了,就有可能导致API接口失效。记得以前网上就有通达信的行情和交易接口,可以获取国内A股行情并实现交易,自己当时还付费买了一套回来并使用了一段时间,据说也是逆向分析通达信系统得来的,但用了一段时间后,随着通达信软件和券商后台系统的升级,就无法使用了。
去年初的时候,自己就获取了一套MT4行情和交易接口及相关调用资料,但一直未去深入研究,因为该接口就仅仅是一个DLL文件,需要在Window 的.Net 平台下用C#开发和调用,自己对C#并不熟悉,这种托管DLL用其它的开发语言也不好调用,最主要是当时的重心和精力都放在量化系统和缠论策略的开发和优化上,对这种可有可无非要不可的东西实在无暇兼顾。但想着以后随着账户的不断增加,这种API调用接口肯定要用到,毕竟同时打开几十个MT4软件来实现交易接口太费资源了!自己也曾想到花点钱请别人开发,但想着要和自己的量化系统深度融合在一起,沟通和开发起来也挺麻烦,再加上自己本身就是程序员出身,还是适当的时候自己开发吧!从那时起,闲暇时间自己翻看一下C#的编程书籍,了解一下C#的语言和用法,先为以后的使用打点基础。
上周,将自己几个要完成的开发工作按重要性和紧急性排列出来各种比较后,终于决定将MT4API接口的开发提上日程了,说干就干,在电脑上安装好VS2019后,这个星期就忙着搞开发了。整个接口的需求和流程其实自己已经非常清晰,唯一不足的地方是对VS2019和C#还不熟悉,但开发语言都是相通的,不懂不会的地方就查查书,或者百度及CSDN上搜索一下就好了。
花了两天时间,完成了大致的软件界面,并实现了行情和交易接口的简单调用,成功返回了想要的各项数据,开发工作挺顺利,各项功能正慢慢实现。自己是用真实的交易账户来测试的,想着这样频繁的测试,不断登录和退出,途中还会有不少出错和非法调用,会不会引起外汇平台的警觉,如果把自己的账户封禁掉,那可就麻烦大了,因此马上申请了个模拟账户来测试,结果悲剧了,接口竟然无法登录了,返回Old Version,看来平台的模拟账户后台服务器已经升级了,不再支持这个接口,而真实账户的后台服务器,可能考虑到兼容性的缘故,还没有进行更新,或者还兼容这个接口版本,因此还能使用。记得去年底有一段时间,听说很多跟单系统或跟单平台都无法使用了,就因为MT4软件商强制升级了一次,有的MT4后台服务器已经不再支持这个接口了。想着这样下去也不是办法,因此又开始想办法去找这个接口的最新版本,皇天不负有心人,仅半天时间就找到了一个新的API接口版本,不过这个接口有一点点限制。在这里不得不鄙视一下C#,像C#,JAVA这种开发语言开发出来的托管代码,真的很容易被反编译,简直就和真正的源码看起来没有什么差别,因此很快就被我把限制解除了。
正好这两个星期新冠疫情吃紧,有的小区还被封了,羽毛球馆也不让打球了,因此整个星期几乎没有出门过,就窝在家里辛辛苦苦搞开发了,老骥伏枥,像我这种老程序员了,想不到开发效率还挺高,到了今天周五,就把整套接口完成了。现在回想过来,难点上除了本身对C#进行各种熟悉外,怎么优化速度和算法也花了不少时间,这里就通过缓冲区来实现数据的存储和传递,还有各种多线程的运行来实现了。首先建立一个行情获取后台线程,通过API接口实时读取行情数据不断放入行情缓冲区中,再建立一个行情写库后台线程,读取行情缓冲区数据并写入数据库中。每个交易账户也通过建立专门的后台线程来实现登录和交易,1个交易账户占用一个单独的后台线程,10个账户就建立10个单独的后台线程,在接收指令也进行了优化,每个交易线程并不直接从数据库中读取自己的交易指令,这样会非常占用数据库资源,而是建立一个专门的交易指令读取线程,从数据库中读取指令后,再转发到各个交易线程上。MT4软件在断线断网后,会自动进行重连,这个非常重要,自己也专门创建了一个守护线程监测各个交易账户,如果有账户断线了就自动重连。创建了两个模拟账户进行测试,效果真的非常好,速度非常快,毫秒级开单和平仓,比原来通过MT4的EA来实现开单和平仓要快得多了。高兴之余,下周再优化和测试一下,下个月应该就可以实际部署和运行了,而且这套接口和原来的EA调用接口是兼容的,两套接口可以随时进行切换,相当于双重保险了。废话不多说,附上软件截图。



另外再附上MT4API接口资料,官网:http://www.mtapi.online

一套接口要3000美金呢,带源码的接口要6000美金哦。
其实新版本接口和旧版本接口在调用方法上已经更改了不少,还好可以从这个网站里获取最新资料帮助。

MT4行情交易API接口开发手记相关推荐

  1. linux运行国信股票,国信期货CTP交易API接口开发服务

    国信期货CTP交易API接口开发服务是一款国信期货CTP_API接口开发,适用于客户自行开发交易软件接入CTP呕吐,支持windows.Linux.IOS,对于未及时登录及断线造成的行情数据丢失,CT ...

  2. 交易用户如何去使用l2行情数据api接口?

    交易用户如何去使用l2行情数据api接口? l2行情数据api接口也就是常说的应用程序接口,api接口的全称是Application Program Interface,通过API接口可以实现计算机软 ...

  3. A股历史行情数据 API 接口

    A股历史行情数据 API 接口 所有A股历史交易行情数据,全量历史交易 / 包含前后复权数据. 1. 产品功能 支持所有 A 股全量历史(天)交易查询: 包含上交所和深交所所有股票数据: 每日 A 股 ...

  4. 科创板历史行情数据 API 接口

    科创板历史行情数据 API 接口 全量科创板历史行情,全量历史数据 / 支持代码筛选. 1. 产品功能 支持所有科创板历史交易数据查询: 包含科创板交易多项指标数据: 毫秒级查询性能: 全接口支持 H ...

  5. 如何使用a股量化交易api接口?

    在进行量化交易的需要的时候,可以考虑使用a股量化交易api接口作为分析工具. 如何使用a股量化交易api接口? 一是进行自主研发,不过这种办法费时费力,而且对技术也有一定要求. 第二种办法就是选择一个 ...

  6. 如何学习调用股票量化交易API接口的方法?

    对于股票量化交易API接口学习调用的方法,主要是从数字看点平台有丰富的API接口,它让应用程序可以轻松地使用另一个应用程序的数据和资源,把通用的.共性的应用功能进行模块化处理,让开发变的简单又快捷,即 ...

  7. 港股指数实时行情数据 API 接口

    港股指数实时行情数据 API 接口 所有港股指数实时交易行情数据,港指实时数据,支持代码筛选. 1. 产品功能 支持所有港股指数实时交易数据查询: 包含港股实时交易多项指标数据: 毫秒级查询性能: 支 ...

  8. php 接口 2.0,YII 2.0 API接口开发

    YII2.0 API接口开发 首先先安装 YII2.0 高级模板(安装请参考其他教程) 准备 添加数据库配置 common/config/main-local.php image 把backend目录 ...

  9. api接口加密_谈谈API接口开发中的安全性如何解决

    如今各种API接口层出不穷,一个API的好与不好可以从很多方面来考量,其中"安全性"就是一个API接口最基本也是最重要的一个特点.本文就来跟大家聊聊关于API接口开发的安全性问题. ...

最新文章

  1. 17种transformers
  2. 语言与golang语言运行速度_Golang语言情怀第3期 Go 语言数据类型
  3. pjsip for Android的编译
  4. Linux统治超级计算领域的九个理由
  5. 第 5 章 MybatisPlus ActiveRecord
  6. [翻译]在SQL Server中使用CLR调用.NET方法
  7. iconv 中文截断问题的解决方法
  8. 删除AdminServer logs下的log文件后开启AdminServer报错
  9. C/C++[指针/引用]
  10. 基于python的学生管理系统的设计开题报告_学生信息管理系统设计开题报告
  11. miui怎么用第三方图标包_Burn安卓手机图标包 手机美化从图标开始
  12. 用c语言双向循环链表,C语言实现双向循环链表
  13. DOS命令关机小程序
  14. 麻省理工学院公开课:单变量微积分
  15. linux播放器安装包下载地址,linux安装MPLAYER播放器
  16. 向大家推荐一款可以免费在线Word转pdf,jpg转pdf,ppt转pdf等各种格式转换的网站
  17. 一个完整的嵌入式程序_放下偏见,原来嵌入式程序员如此“妖娆”!
  18. 网络安全防守方应该遵循得建设原则有哪些
  19. 聚焦45年职业生涯规划职业生涯3大阶段
  20. sql查询两个表的关联关系

热门文章

  1. 三线性插值(三维线性插值)
  2. 单片机c语言除法,单片机C语言知识点全攻略
  3. Spring笔记——装配Bean
  4. 视频教程-大牛带你全面剖析Python高频面试真题-Python
  5. 百度地图android自定义文字,Android SDK | 百度地图API SDK
  6. C# 限制TextBox控件内输入值的范围
  7. IconPackager 3.1 Enhanced - subpackages support
  8. 华为EC189/EC122无信号解决方法
  9. TFTP服务器搭建与总结
  10. 【c++】无符号类型与负数的比较