目标:动态获取最新K线并通过DLL发送出去,symbols和periods可配置。

//+------------------------------------------------------------------+
//| kline.mq4 |
//| Copyright 2018, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict string symbols[]={"USDJPY","USDCHF","USDCAD","NZDUSD","GBPUSD","EURUSD","AUDUSD",
"AUDCAD","AUDJPY","EURCAD","GBPAUD","GBPJPY","XAUUSD","XAGUSD","Brent","WTI"}; int periods[]={PERIOD_M1,PERIOD_M5,PERIOD_M15,PERIOD_M30,PERIOD_H1,PERIOD_H4,PERIOD_D1,PERIOD_W1,PERIOD_MN1};
//PERIOD_M1,PERIOD_M5,PERIOD_M15,PERIOD_M30,PERIOD_H1,PERIOD_H4,PERIOD_D1,PERIOD_W1,PERIOD_MN1 // int gCount = 0; struct RateInfo
{
int time;
int ctm; // rate time
int open; // open price: 11987=119.87
int high, low, close; // high,low,close shift from open
double vol; // volume
}; //DLL
#import "TradeQuot.dll"
void UnInit();
int Init(int,int);
void OnKineDataChange(string symbol, int period, RateInfo &data[],int kinesize);
void OnKineDataChangeW(string symbol, int period, RateInfo &data[], int kinesize);
void OnKineDataChangeExW(string symbol, int period,RateInfo &data);
#import
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//Print(PERIOD_M1," ",PERIOD_M5," ",PERIOD_M15," ",PERIOD_M30," ",PERIOD_H1," ",PERIOD_H4," ",PERIOD_D1," ",PERIOD_W1," ",PERIOD_MN1);
int ret = Init(1,0);
if(ret!=1){
Print("init dll failed code=",ret);
return INIT_FAILED;
} long begin=TimeLocal();
GetKline(0);
long end=TimeLocal();
Print("OnInit use:"+(end-begin)+"s");
//--- create timer
EventSetTimer(60);
//---
return(INIT_SUCCEEDED);
} void GetKline(int type)
{
//long t=TimeLocal();
int maxBars = 2;
if(type==0){
maxBars = 5000;
}
for(int i=0;i<ArraySize(symbols);i++){
for(int j=0;j<ArraySize(periods);j++){
string symbol=symbols[i];
int period = periods[j]; MqlRates rates[];
ArraySetAsSeries(rates,true);
int copied=CopyRates(symbol,period,0,maxBars,rates);
Print("GetKline:["+symbol+":"+period+"] - "+copied);
if(copied>0){
RateInfo item[];
ArrayResize(item,copied);
for(int m=0;m<copied;m++)
{
item[m].time = rates[m].time;
item[m].ctm = rates[m].time;
item[m].open = rates[m].open;
item[m].high = rates[m].high;
item[m].low = rates[m].low;
item[m].close = rates[m].close;
item[m].vol = rates[m].tick_volume;
gCount=gCount+1;
if(gCount%100000==0){
printf("%s %d %s %lf %lf %lf %lf %d",symbol,period,TimeToString(rates[m].time),
rates[m].open,rates[m].high,rates[m].low,rates[m].close,rates[m].tick_volume);
}
}
OnKineDataChangeW(symbol,period,item,copied);
ArrayFree(item);
}else{
Print("Failed to get history data for the symbol ",symbol," period ",period," code ",GetLastError());
}
}
}
} //+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer(); UnInit();
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//--- }
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
//---
Print("onTimer...");
GetKline(1);
}
//+------------------------------------------------------------------+

MT4 取K线的更多相关文章

  1. 高仿MT4行情终端(K线图+操控+简单架构)

    技术:VS2015 Update3 + QT 5.11.2 + BOOST 1.68 + QT VS Tools + C++11   概述 模仿外汇MT4的界面 详细 代码下载:http://www. ...

  2. 用python的matplotlib和numpy库绘制股票K线均线的整合效果(含从网络接口爬取数据和验证交易策略代码)

    本人最近在尝试着发表“以股票案例入门Python编程语言”系列的文章,在这些文章里,将用Python工具绘制各种股票指标,在讲述各股票指标的含义以及计算方式的同时,验证基于各种指标的交易策略,本文是第 ...

  3. 用Python爬取股票数据,绘制K线和均线并用机器学习预测股价(来自我出的书)

    最近我出了一本书,<基于股票大数据分析的Python入门实战 视频教学版>,京东链接:https://item.jd.com/69241653952.html,在其中用股票范例讲述Pyth ...

  4. K线指标线计算方法

    指标线计算方法 l   dataDR = Kdata(原始数据)/dr(除权)  //除权数据等于原始数据除以DR(除权) 其中,日K数据 需要本地进行除权处理.周K和月K的旧数据部分由服务器进行处理 ...

  5. C#下如何用NPlot绘制期货股票K线图(1)?

    [简介] 作为一名专业程序化交易者,编程是一个程序员的基本功,本文是作者在做的一个期货CTP项目中有关K线绘图的一部分,偿试类MT4中图表 设计而写,在编写绘图时,查阅了相关资料,感觉还是用NPlot ...

  6. 利用JFreeChart绘制股票K线图完整解决方案

    http://blog.sina.com.cn/s/blog_4ad042e50100q7d9.html 利用JFreeChart绘制股票K线图完整解决方案 (2011-04-30 13:27:17) ...

  7. 在MPAndroidChart库K线图的基础上画均线

    CombinedChart 可以直接使用MPAndroidChart库里面提供的CombinedChart实现组合图形 Demo:CombinedChartDemo ------分割线(如果想在一个图 ...

  8. TuShare获取K线数据

    Tushare是一个免费.开源的python财经数据接口包.主要实现对股票等金融数据从数据采集.清洗加工 到 数据存储的过程,能够为金融分析人员提供快速.整洁.和多样的便于分析的数据,为他们在数据获取 ...

  9. 用python的matplotlib和numpy库绘制股票K线均线和成交量的整合效果(含量化验证交易策略代码)

    在用python的matplotlib和numpy库绘制股票K线均线的整合效果(含从网络接口爬取数据和验证交易策略代码)一文里,我讲述了通过爬虫接口得到股票数据并绘制出K线均线图形的方式,在本文里,将 ...

随机推荐

  1. Python3+Requests-HTML+Requests-File解析本地html文件

    一.说明 解析html文件我喜欢用xpath不喜欢用BeautifulSoup,Requests的作者出了Requests-HTML后一般都用Requests-HTML. 但是Requests-HTM ...

  2. 服务器端网络编程之 IO 模型

    引言  从 T 跳槽到 A 之后,我的编程语言也从 C++ 转为 了 Java.在 T 做的偏服务器端开发,而在 A 更偏向于业务开发.上周在 A 公司组内做了一个<服务器端高性能网络编程> ...

  3. Linux下手动编译shogun

    手动编译shogun,如果按照直接按照官网上的步骤进行,会踩非常多的坑,下面分享一下在下的编译过程,希望能为阁下提供些许借鉴. 1. git clone https://github.com/shog ...

  4. netty解码器详解(小白也能看懂!)

    什么是编解码器? 首先,我们回顾一下netty的组件设计:Netty的主要组件有Channel.EventLoop.ChannelFuture.ChannelHandler.ChannelPipe等. ...

  5. egret 简单的四方向的a星寻路,在wing中可以直接跑

    /** * main类中加载场景 * 创建游戏场景 * Create a game scene */ private createGameScene() { MtwGame.Instance.init ...

  6. Asp .Net Core Spa (一) - 入门

    第一次写文章, 很久之前就想写来着了, 文章哪里不清楚的, 也请多多提出意见. 最近发现用 .net core + spa (single page application) 这个组合的人也变多了, ...

  7. for ,foreach ,map 循环的区别

    一.for循环 1.for - 循环代码块一定的次数 遍历数组最常用到的for循环,是最为熟知的一种方法 for (var i=0; i<5; i++) { x=x + "The nu ...

  8. 如何在linux环境安装JDK

    1. 到JDK官网下载相应的安装包 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.ht ...

  9. PTA-栈

    1-1 若一个栈的输入序列为1,2,3,…,N,输出序列的第一个元素是i,则第j个输出元素是j−i−1. (2分) T         F   作者: DS课程组 单位: 浙江大学 1-2 若一个栈的 ...

  10. 贝塞尔(Bezier) 曲线 研究

    贝塞尔曲线最近经常接触到,今天研究了一下. 原理 关于它的原理,网上有很多. 1.一阶 2.二阶 3.多阶 可以看到,多阶可以慢慢降阶为一阶贝塞尔曲线. //一阶 private Vector3 Ba ...