专家: 询价 出价 即时价

 

询价 出价 即时价:

"AskBidTicks" 是一套用于微观结构分析的高精度, 实时报价数据方案。它输出每一个即时价格至一个 csv 文件。它以本地电脑时间工作。

设置

作者: Erdem Sen

 
Automated-Trading:

Ask Bid Ticks

作者: Erdem SenErdem Sen

有趣,您如何将其用于回溯测试?有什么想法吗?
 
您好,请问 M5 M15 H1 H4 栏中的等价物是什么?
 
vanvolxem:
您好,请问 Bar M5 M15 H1 H4 中的等价物是什么?
对不起,我不明白,您能说得具体一些吗?
 

你好

时间 符号 OPEM CLOSE PH PB

2013.01.04 04:55 eurgbp 0.81065 0.81078 0.81086 0.81065 172

2013.01.04 05:00 eurgbp 0.81079 0.81046 0.81080 0.81044 90

2013.01.04 05:05 eurgbp 0.81047 0.81044 0.81056 0.81044 89

2013.01.04 05:10 eurgbp 0.81043 0.81059 0.81059 0.81033 111

2013.01.04 05:15 eurgbp 0.81057 0.81052 0.81059 0.81048 78

2013.01.04 05:20 eurgbp 0.81051 0.81065 0.81071 0.81050 124

2013.01.04 05:25 eurgbp 0.81067 0.81066 0.81070 0.81060 243

2013.01.04 05:30 eurgbp 0.81067 0.81076 0.81080 0.81063 108


 
vanvolxem:

您好、

时间 符号 OPEM CLOSE PH PB

2013.01.04 04:55 eurgbp 0.81065 0.81078 0.81086 0.81065 172

2013.01.04 05:00 eurgbp 0.81079 0.81046 0.81080 0.81044 90



获取周期性数据的最佳方法(据我所知)是使用 MT4 历史记录,您可以下载并导出历史数据(到 excel):

//+------------------------------------------------------------------+
//|PeriodicRealTimeDataStream.mq5
//| 2013 年 MetaQuotes 软件公司版权所有。|
//|http://www.mql5.com ||
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

datetime t1;
double   arro[1],arrh[1],arrl[1],arrc[1];
string   T,O,H,L,C;
long     arrv[1],V;

//+------------------------------------------------------------------+
void OnTick()
  {  

   t1 = (datetime)SeriesInfoInteger(_Symbol,_Period,SERIES_LASTBAR_DATE);
   static datetime  t0 = t1;
//--- 获取指定图表的数值 
   if (t0!=t1)
      {  
         //--- 将值复制到数组
         CopyOpen(_Symbol,_Period,0,1,arro);
         CopyHigh(_Symbol,_Period,0,1,arrh);
         CopyLow(_Symbol,_Period,0,1,arrl);
         CopyClose(_Symbol,_Period,0,1,arrc);
         CopyTickVolume(_Symbol,_Period,0,1,arrv);
         //--
         T=TimeToString(t1,TIME_DATE|TIME_MINUTES);
         O=DoubleToString(arro[0],_Digits);
         H=DoubleToString(arrh[0],_Digits);
         L=DoubleToString(arrl[0],_Digits);
         C=DoubleToString(arrc[0],_Digits);
         V=arrv[0];
         //--- 输出数值
         printf("%s  %s  %s  %s  %s  %s  %d",T,_Symbol,O,H,L,C,V);
         //--- 再次设置时间
         t0=t1;     
      }
//---
  }
//+------------------------------------------------------------------+

如果您希望导出 csv,可以使用主代码中的文件函数和变量

 
如果没有,就不是"......将卖出价和买入价的所有逐笔数据存储到一个 txt 文件中"。
 
RaptorUK:
如果没有,就不是"......将卖出价和买入价的所有逐笔数据存储到一个 txt 文件中"。

你说得对,由于 NewTick 事件的处理方式,可能会出现遗漏报价的 情况,但代码足够快,这种可能性非常小 (几乎为零)。如果遗漏刻度的情况比我想象的多(可能会影响分析的意义),那么是 Ontick() 出了问题,而不是我的代码。

关于"......将卖出价和买入价的所有逐点数据存储到一个 txt 文件中。"这句话,我很早以前就意识到了,并做了修改:)现在已经没有 "所有 "了,但在论坛上还是一样--很抱歉,我没有能力修改它,我喜欢重新编辑注释,但这句话是不可能的:(

 
erdogenes:

你说得没错,由于 NewTick 事件的处理方式,可能会出现遗漏报价的情况,但代码足够快,这种可能性非常小 (几乎为零)。如果遗漏报价的情况比我想象的多(这可能会影响分析的意义),那么是 Ontick() 出了问题,而不是我的代码。

关于"......将卖出价和买入价的所有逐点数据存储到一个 txt 文件中。"这句话,我很久以前就意识到了,并做了修改:)现在已经没有 "所有 "这个词了,但在论坛上还是一样--很抱歉,我没有能力修改它,我喜欢重新编辑注释,但对于这句话来说是不可能的:(

这不是一个错误,它就是这样工作的...................如果在新的 tick 出现时 OnTick() 正在运行,新的 tick 将被忽略 .

新刻度线

如果有新的报价,就会生成NewTick 事件,由附加智能交易系统的OnTick() 处理。如果收到新报价时正在处理前一个报价的 OnTick 函数,则 Expert Advisor 将忽略新报价,因为相应事件不会被触发。

程序运行时收到的所有新报价都会被忽略,直到 OnTick() 函数执行完毕。之后,只有在收到新报价后,函数才会运行。

......您是否测试过通常会错过多少个跳动点?

 
RaptorUK:

It's not a bug, it's just how it works . . . if OnTick() is running when a neew tick arrives the new tick is ignored . . .

我很困惑,你认为这是处理新刻度的方式,我也这么认为:)

erdogenes

你说得对,由于 NewTick 事件的处理方式,有可能会丢失引号。

可能是你理解错了: 如果缺失 引号会对分析 产生重大影响,那么 ontick 就有问题,而不是正常情况(因为它是 "new tick "事件处理程序,如果它不能处理足够多的引号,它就有问题),但我不认为它不能处理,我不认为它有问题。

RaptorUK

..你测试过通常会错过多少个 ticks 吗?

我不知道遗漏的点数,我获取的是程序获取的,我如何计算呢?我不能代表 MetaQuotes 发言。我无法直接访问交易服务器来比较报价。我不能为一个程序计算它,当程序是我的时,它就不会改变,我只能从统计学的角度说话。

我为您编辑了一个高频数据处理示例。我用 2011 年 1 月 27 日的银行间汇率计算出了同一毫秒内到达的跳动率--计算程序是 Gretl,您可以使用代码,数据通过邮件发送(抱歉,我不能公开分享这些数据)。结果是 ~0.003(这是同一毫秒内到达的跳动率,而且是活跃的一天)。

我们假设 MT5 处理的数据(荒谬的是)全部丢失(~0.003)。我的答案是否定的。我们在分析中已经使用了更高比率的重采样。

当然,这只是假设,并非来自经纪人,但我希望你能理解我的观点。再说一遍,我没有能力获得缺失刻度线的真实数量。

还有一点:如果是 NewTick 事件处理程序的 "无队列 "策略导致了跳空点数(确实如此),那么我认为跳空点数也可能取决于您的硬件速度。因此,不能将其作为标准值来计算。

(我重新修改了评论:我修正了发送给您的代码,因为它存在错误,实际结果为 ~0.003,代码附后)。

附加的文件:
codes.zip  1 kb
 
erdogenes:

我很困惑,你认为这是处理 newtick 的方式,我也这么认为:)

可能是你理解错了: 如果缺少刻度 对分析 有重大影响, 那么 ontick 就有问题,而不是正常情况(因为它是 "新刻度 "事件处理程序,如果它不能处理足够多的刻度,它就有问题),但我不认为 不能处理,我也不认为它有问题。

我不知道遗漏的刻度,我获取的是程序获取的,我如何计算它呢? 我不知道 Ontick 一天遗漏了多少刻度(我没有开发 mql5)。

是的,您可以......您可以计算当前条形图中的刻度线,并检查当前条形图中的刻度线成交量 值,如果您的计算结果与刻度线成交量不一致,那么您就错过了一个或多个刻度线......。