外汇交易一般都在MetaTrader 4,简称MT4上进行,MT4提供了一种编程语言类似C/C++,叫MQL4,可以直接挂到对应的图表上,接收数据。MT4上的脚本也有很多类型,实时抓取数据的脚本叫EA脚本。

主要思路就是用cmd命令自动打开MT4,然后使用自动化脚本把写好的抓取数据脚本attach到行情图上,就可以开始抓数据了,收到数据之后实时写到mysql中,完成实时数据的抓取。抓到的都是tick data,也就是毫秒级的数据。如果需要时间段的数据,比如5分钟,4小时,1天的数据,恐怕得自己在后台去算。

下面看一下具体过程:

首先,cmd里写打开MT4软件的命令

  1. @echo off

  2. set mt4path=D:\MetaTrader 4 at FOREX.com\

  3. "%mt4path%terminal.exe" "%mt4path%config\wscn\realtime.txt"

然后,我们看一下realtime这个配置文件

Profile=AllChartsTemplate=
Expert=
ExpertParameters=
Script=AutoApplyEAToAllCharts
ScriptParameters

上面的Profile代表打开MT4的时候,自动打开的空间文件,其实就是默认打开哪些行情图表。然后Script的意思是打开MT4以后自动运行这个脚本。

接着看AutoApplyEAToAllCharts脚本主要干什么

  1. string EA_SCRIPT_NAME = "insertMySql";

  2. string properties[1000][2],currency[];

  3. int start()

  4. {

  5. readPropertyFile(properties,getRealtimeConfigFilePath());

  6. getFetchRealTimeCharts(properties,currency);

  7. Sleep(60000);

  8. for(int i=0;i<ArraySize(currency);i++){

  9. string cur = StringTrimRight(StringTrimLeft(currency[i]));

  10. //Print("cur",cur);

  11. if(cur == "")continue;

  12. int hwnd = Window.getHandle(cur);

  13. Window.activate(hwnd);

  14. //Window.maximize(hwnd);

  15. EA.startEA(hwnd,EA_SCRIPT_NAME,true);

  16. }

  17. return(0);

  18. }

上面的代码意思主要功能就是把抓取数据的脚本具体attach到行情图表窗口上去,因为每个行情图表都是一个小窗口。

最后看insertMySql脚本,主要功能都在这里面实现

  1. int init()

  2. {

  3. readPropertyFile(properties,getRealtimeConfigFilePath());

  4. strTableName = getValueByKey(properties,Symbol());

  5. strNewDataTableName = getValueByKey(properties,"newdatatable");

  6. connectDB();

  7. return(0);

  8. }

  9. void connectDB(){

  10. string host,user,pwd,dbName,port;

  11. int socket = 0,client = 0;

  12. bool goodConnect = false;

  13. host = getValueByKey(properties,"host");

  14. user = getValueByKey(properties,"username");

  15. pwd = getValueByKey(properties,"password");

  16. dbName = getValueByKey(properties,"database");

  17. port = getValueByKey(properties,"port");

  18. goodConnect = mysqlInit(dbConnectId, host, user, pwd, dbName, port, socket, client);

  19. if ( !goodConnect ) {

  20. Print("connect DB failed!");

  21. return (1); // bad connect

  22. }

  23. }

  24. int deinit()

  25. {

  26. mysqlDeinit(dbConnectId);

  27. return(0);

  28. }

  29. int start()

  30. {

  31. string strDateTime = TimeToStr(TimeCurrent(),TIME_DATE | TIME_SECONDS);

  32. string strOpen = DoubleToStr(iOpen(Symbol(), 0, 0), MarketInfo(Symbol(), MODE_DIGITS));

  33. string strHigh = DoubleToStr(iHigh(Symbol(), 0, 0), MarketInfo(Symbol(), MODE_DIGITS));

  34. string strLow = DoubleToStr(iLow(Symbol(), 0, 0), MarketInfo(Symbol(), MODE_DIGITS));

  35. string strClose = DoubleToStr(iClose(Symbol(), 0, 0), MarketInfo(Symbol(), MODE_DIGITS));

  36. string strVolume = iVolume(Symbol(), NULL, 0);

  37. string strBid = DoubleToStr(Bid, MarketInfo(Symbol(), MODE_DIGITS));

  38. string strAsk = DoubleToStr(Ask, MarketInfo(Symbol(), MODE_DIGITS));

  39. string timeZone = StringTrimRight(StringTrimLeft(getValueByKey(properties,"timeZone")));

  40. int adjustTime = TimeGMT();

  41. if(timeZone != ""){

  42. adjustTime += StrToInteger(timeZone) * 60 * 60 * 1000;

  43. }

  44. Comment(TimeCurrent()+" ", adjustTime+" ",

  45. strBid+" ",

  46. strAsk+" ",

  47. strHigh+" ",

  48. strLow+" ",

  49. strVolume);

  50. string insertQuery = createInsertQuery(strTableName,Symbol(),adjustTime,Bid,Ask,

  51. iHigh(Symbol(), 0, 0),iLow(Symbol(), 0, 0),iVolume(Symbol(), NULL, 0));

  52. mysqlQuery(dbConnectId, insertQuery);

  53. string updateQuery = createUpdateQuery(strNewDataTableName,Symbol(),adjustTime,Bid,Ask,

  54. iHigh(Symbol(), 0, 0),iLow(Symbol(), 0, 0),iVolume(Symbol(), NULL, 0));

  55. mysqlQuery(dbConnectId, updateQuery);

  56. return(0);

  57. }

上面的代码首先连接mysql DB,然后在start函数里面接收tick data,也就是说行情每跳动一次,就会调用一次start方法,这是MT4脚本提供的回调。然后在start方法里,把tick data插入到历史数据表中,接着更新实时行情数据表。历史表和实时数据表是分开的。

上面的过程只是个大概程序,具体代码比这个多多了,这里只是提供个思路,感兴趣的,有需要的,在联系我。

=========================================

这里说一下,不同的外汇供应商提供的数据种类不一样,比如嘉盛提供的外汇种类可能比福汇多,而每家供应商都会对MT4做定制,如果想抓的比较全,需要打开不同供应商的MT4软件,然后执行上面的过程。

所谓的CFD意思是价差合约,背后没有实际的金融资产做支撑,这种玩意在美国是没法交易的,在欧洲可以交易。它往往追踪股指,比如标普500,纳纳斯达克100指数,但是数值不完全一样,因为CFD是5x24小时交易,而对应的股指只有在每天固定的时间交易

金融数据类——外汇,CFD相关推荐

  1. 金融数据类——全球股市

    下面是很久以前调研的数据,可能有些现在有变化-- l  新浪接口参考: l  A股图 分时线的查询: http://image.sinajs.cn/newchart/min/n/sh000001.gi ...

  2. 金融数据类——美国对冲基金持仓

    根据美国的法规,美国的对冲基金要定期披露持仓,在美国SEC的网站上可以找到原始的披露文件,如果想抓最原始的数据,可以去google一下网址.本文从另一个已经整理好这些持仓的网站去抓数据,网址是:www ...

  3. 金融数据类——国内贵金属

    国内贵金属主要从银天下获取的,下面列出一些资产对应的URL,直接返回的JSON格式数据: 上海黄金au(t+d) 黄金延期(http://api.baidao.com/api/hq/npdata.do ...

  4. python金融数据怎么获取_class类怎样在python中获取金融数据?

    我们搜集金融数据,通常想要的是利用爬虫的方法.其实我们最近所学的class不仅可以进行类调用,在获取数据方面同样是可行的,很多小伙伴都比较关注理财方面的情况,对金融数据的需要也是比较多的.下面就cla ...

  5. python 获取金融数据_class类在python中如何获取金融数据

    class类在python中如何获取金融数据 发布时间:2020-12-11 11:12:06 来源:亿速云 阅读:101 作者:小新 这篇文章主要介绍了class类在python中如何获取金融数据, ...

  6. python如何收集数据的方法有哪些_class类在python中获取金融数据的实例方法

    我们搜集金融数据,通常想要的是利用爬虫的方法.其实我们最近所学的class不仅可以进行类调用,在获取数据方面同样是可行的,很多小伙伴都比较关注理财方面的情况,对金融数据的需要也是比较多的.下面就cla ...

  7. 数据科学、管理科学系课程教学课件——FineReport实验指导书节选====金融经管类专业

      数据科学.管理科学系的数据大屏.数据报表.商务智能.管理信息系统等课程教学,只需简单的数据库基础,解放学生码代码的时间,用更真实的企业案例,更灵活的将思维落地.本节讲述的是金融经管类的数据报表分析 ...

  8. R语言基础(3)——获取金融数据及处理分析

    文章目录 quantmod包 getSymbols()函数 getSymbols()函数参数的特例 获取股票数据 1. 股票日交易数据 2. 各种指数的日数据 3. 股息数据 4. 除权除息数据 5. ...

  9. 惊艳!亚洲规模最大、标准最高的金融数据中心 |上证所金桥技术中心基地项目...

    上证所金桥技术中心基地项目,是目前亚洲金融行业规模最大.标准最高的新一代数据中心,主要由8栋数据中心机房楼. 2栋动力楼.1栋总降压站及3栋生产辅助楼.1栋行政办公楼等18个单体共同构成. 贴合数据的 ...

  10. python数据生成正态分布图_Python 与金融数据生成机器学习的特征数据

    记得 关注.分享.点在看 呀- 这样您就能持续收到优质的推送啦 接下来几期我们将使用机器学习方法帮助我们预测未来股票交易数据的走势.在此之前我们需要对数据进行预处理以供机器学习方法使用.这一期我们将以 ...

最新文章

  1. NVIDIA GPU卷积网络的自动调谐
  2. 使用XHProf分析PHP性能瓶颈(二)
  3. 关于table和ul/ol还有span.
  4. java7 arm_zynq7000系列移植—JDK1.7 移植到嵌入式ARM平台
  5. 证件照排版软件_证件照小程序换背景(制作免费版)
  6. 如何将S/4HANA系统存储的图片文件用Java程序保存到本地
  7. 预训练再次跨界!百度提出ERNIE-GeoL,地理位置-语言联合预训练!
  8. 计算机视觉必备框架!Opencv系列学习实战
  9. windows--bat--删除当前脚本del %0
  10. 第一台通用计算机它的名字叫做什么,第一台计算机叫什么名字
  11. SE Springer小组之《Spring音乐播放器》可行性研究报告五、六
  12. Tomcat下载及配置(IDEA)
  13. CRON 定时任务 在线解析
  14. 怎样控制竞价点击价格
  15. 一行代码实现网站移动化的原理与实现
  16. Python-3 EXCEL 操作-1
  17. 荣耀70什么时候发布 荣耀70发布时间曝光
  18. 神经网络和图神经网络,神经网络的图怎么画
  19. Java EE基础练习题
  20. Centos7中创建RSA非对称密钥对及搭建私有CA并为客户端颁发证书

热门文章

  1. 反射修改jsessionid实现Session共享
  2. unity中的UV是什么
  3. 【Blender】UV贴图相关学习
  4. G312高速公路S标段路线设计--金陵科技学院道路毕业设计
  5. java利用正则表达式弱密码检测
  6. RK3399 Android7.1 AP6212蓝牙可发文件,但收不到文件
  7. vue 微信公众号支付接口_vue项目中使用微信公众号支付的方法有哪些
  8. 通俗易懂的图解机器学习之机器学习概论
  9. 最好用的三款软件,满足你对截图的所有需求!
  10. MFC中使用SOUI的窗口示例