关于FORTS报价的问题 - 页 3

 

建议保持计算机时间的准确性,这样可以减少记录错误的机会。

谢谢你的脚本:以下是这个脚本在1分钟17:36的结果

CollectTicks (ED-12.14,M1)      2014.11.10 17:36:06; Bid = 1.2474; Ask = 1.2475; Last = 1.2476; Vol = 3
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:06; Bid = 1.2474; Ask = 1.2476; Last = 1.2476; Vol = 3
 CollectTicks (ED-12.14,M1)      2014.11.10 17:36:12; Bid = 1.2474; Ask = 1.2476; Last = 1.2476; Vol = 5
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:26; Bid = 1.2474; Ask = 1.2475; Last = 1.2476; Vol = 5
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:28; Bid = 1.2474; Ask = 1.2476; Last = 1.2476; Vol = 5
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:29; Bid = 1.2474; Ask = 1.2476; Last = 1.2474; Vol = 8
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:29; Bid = 1.2473; Ask = 1.2475; Last = 1.2474; Vol = 8
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:30; Bid = 1.2473; Ask = 1.2474; Last = 1.2473; Vol = 5
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:30; Bid = 1.2472; Ask = 1.2474; Last = 1.2473; Vol = 5
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:43; Bid = 1.2472; Ask = 1.2474; Last = 1.2474; Vol = 2

OnTick的特点是,它对买入/卖出的变化(信息流)和最后一次(交易流)都有反应。

因此,交易所交易工具的OnTick调用数量明明大于贸易交易 的数量。

为什么这样做呢?

  1. 你不能只用交易来扼制专家顾问,而不给它提供关于市场变化的信息(调用5次是一回事,调用15次是另一回事)。
  2. 在实时市场评论中,不可能给出零的最后交易量和最后交易量,因为有些交易者会爆炸。


还有一件事,在批量更新中,当一个工具上的两个或更多的ticks同时到达时,OnTick被调用一次。这使我们不至于减缓传入的报价流,也不至于为放慢速度的专家顾问系统排上一个巨大的刻度线。

很快,我们将启用时间和销售流程,这将使我们能够准确地分析交易信息。

 
Renat:

建议保持计算机时间的准确性,这样可以减少记录错误的机会。

谢谢你的脚本:以下是这个脚本在1分钟17:36的结果

OnTick的特点是,它对买入/卖出的变化(信息流)和最后一次(交易流)都有反应。

因此,交易所交易工具的OnTick调用数量明明大于贸易交易的数量。

为什么这样做呢?

  1. 你不能只用交易来扼制专家顾问,而不给它提供关于市场变化的信息(调用5次是一回事,调用15次是另一回事)。
  2. 在实时市场评论中,不可能给出零的最后交易量和最后交易量,因为有些交易者会爆炸。


还有一件事,在批量更新中,当两个或更多的工具的ticks同时到达时,那么OnTick被调用一次。这使你不至于减慢传入的报价流,也不至于为减慢的EA做一个巨大的ticks队列。

很快我们将包括一个时间和销售流,这将使我们有能力准确分析交易的磁带。

当然,这一切都很好,但是对于有堆栈的FORTS来说,应该在MqlTick结构 中加入一个报价标志。

交易的 "倍增 "并不可怕--最糟糕的是,真正的交易会丢失。

P.S. 我的BAN与我的IP地址有关,请删除它,否则我每次都要重新安装我的浏览器来回答你。

 

Есть еще один момент с тем, что на пакетных обновлениях, когда одновременно приходят два и более тика по инструменту, то OnTick вызывается однократно. Это позволяет не тормозить поток входящих котировок и не делать огромную очередь тиков для тормозящих экспертов.

这种方法的结果如下。

应该是这样的。

纸张时间(mcs) 价格 数量

317922.000000 rts-12.14 [forts] 18:44:54 199000.000000 104140.000000 1.000000

317923.000000 rts-12.14 [forts] 18:44:54 261000.000000 104130.000000 1.000000
317924.000000 rts-12.14 [forts] 18:44:54 587000.000000 104140.000000 1.000000
317925.000000 rts-12.14 [forts] 18:44:54 589000.000000 104140.000000 1.000000
317926.000000 rts-12.14 [forts] 18:44:54 691000.000000 104140.000000 1.000000
317927.000000 rts-12.14 [forts] 18:44:54 691000.000000 104140.000000 1.000000
317928.000000 rts-12.14 [forts] 18:44:54 842000.000000 104130.000000 2.000000
317929.000000 rts-12.14 [forts] 18:44:54 919000.000000 104150.000000 1.000000
317930.000000 rts-12.14 [forts] 18:44:55 337000.000000 104150.000000 1.000000
317931.000000 rts-12.14 [forts] 18:44:55 337000.000000 104150.000000 1.000000
317932.000000 rts-12.14 [forts] 18:44:55 337000.000000 104160.000000 1.000000
317933.000000 rts-12.14 [forts] 18:44:55 337000.000000 104160.000000 1.000000
317934.000000 rts-12.14 [forts] 18:44:55 337000.000000 104160.000000 3.000000
317935.000000 rts-12.14 [forts] 18:44:55 375000.000000 104140.000000 1.000000
317936.000000 rts-12.14 [forts] 18:44:55 375000.000000 104130.000000 5.000000
317937.000000 rts-12.14 [forts] 18:44:55 796000.000000 104130.000000 1.000000
317938.000000 rts-12.14 [forts] 18:44:55 799000.000000 104130.000000 2.000000
317939.000000 rts-12.14 [forts] 18:44:56 54000.000000 104160.000000 1.000000
317940.000000 rts-12.14 [forts] 18:44:57 235000.000000 104160.000000 1.000000
317941.000000 rts-12.14 [forts] 18:44:57 451000.000000 104140.000000 2.000000
317942.000000 rts-12.14 [forts] 18:44:57 487000.000000 104140.000000 6.000000
317943.000000 rts-12.14 [forts] 18:44:57 521000.000000 104160.000000 1.000000
317944.000000 rts-12.14 [forts] 18:44:57 621000.000000 104160.000000 1.000000
317945.000000 rts-12.14 [forts] 18:44:58 38000.000000 104160.000000 3.000000
317946.000000 rts-12.14 [forts] 18:44:58 695000.000000 104160.000000 13.000000
317947.000000 RTS-12。14 [forts] 18:44:58 883000.000000 104140.000000 2.000000

317948.000000 rts-12.14 [forts] 18:44:58 986000.000000 104160.000000 1.000000
317949.000000 rts-12.14 [forts] 18:44:58 993000.000000 104160.000000 5.000000
317950.000000 rts-12.14 [forts] 18:44:58 993000.000000 104160.000000 5.000000
317951.000000 rts-12.14 [forts] 18:44:58 995000.000000 104160.000000 5.000000
317952.000000 rts-12.14 [forts] 18:44:58 996000.000000 104160.000000 1.000000
317953.000000 rts-12.14 [forts] 18:44:59 56000.000000 104160.000000 1.000000
317954.000000 rts-12.14 [forts] 18:44:59 560000.000000 104140.000000 1.000000
317955.000000 rts-12.14 [forts] 18:44:59 604000.000000 104140.000000 1.000000
317956.000000 rts-12.14 [forts] 18:44:59 647000.000000 104160.000000 1.000000


正如我们在MT5中得到的那样。

NE 0 18:44:54.483 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:54 Bid = 104130 Ask = 104150 Last = 104140 Vol = 1
ES 0 18:44:54.639 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:54 Bid = 104130 Ask = 104150 Last = 104130 Vol = 2
OR 0 18:44:54.720 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:54 Bid = 104130 Ask = 104150 Last = 104150 Vol = 1
NQ 0 18:44:54.983 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:55 Bid = 104140 Ask = 104150 Last = 104150 Vol = 1
FP 0 18:44:55.139 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:55 Bid = 104140 Ask = 104160 Last = 104160 Vol = 3
JO 0 18:44:55.174 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:55 Bid = 104140 Ask = 104160 Last = 104130 Vol = 5
GN 0 18:44:55.206 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:55 Bid = 104130 Ask = 104160 Last = 104130 Vol = 5
RM 0 18:44:55.592 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:55 Bid = 104130 Ask = 104160 Last = 104130 Vol = 2
IL 0 18:44:55.891 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:56 Bid = 104130 Ask = 104160 Last = 104160 Vol = 1
HJ 0 18:44:55.921 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:56 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
RI 0 18:44:57.032 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:57 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
PH 0 18:44:57.242 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:57 Bid = 104140 Ask = 104160 Last = 104140 Vol = 2
FG 0 18:44:57.297 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:57 Bid = 104140 Ask = 104160 Last = 104140 Vol = 6
PF 0 18:44:57.328 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:57 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
JE 0 18:44:57.436 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:57 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
QD 0 18:44:57.838 FORTSTicksAction(RTS-12.14,M1) 时间 = 18:44:58 买入 = 104140 卖出 = 104160 最后 = 104160 Vol = 3
DP 0 18:44:58.514 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:58 Bid = 104140 Ask = 104160 Last = 104160 Vol = 13
RR 0 18:44:58693 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:58 Bid = 104140 Ask = 104160 Last = 104140 Vol = 2
JP 0 18:44:58795 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:58 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
CO 0 18:44:58.852 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:59 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
GN 0 18:44:59.358 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:59 Bid = 104140 Ask = 104160 Last = 104140 Vol = 1
MM 0 18:44:59.406 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:59 Bid = 104140 Ask = 104160 Last = 104140 Vol = 1
IL 0 18:44:59.453 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:59 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
CK 0 18:50:31.437 FORTSTicksAction(RTS-12.14,M1) 时间 = 18:50:24 买入 = 0 卖出 = 0 最后 = 104160 Vol = 1
KH 0 18:50:33.357 FORTSTicksAction (RTS-12.14,M1) Time = 18:50:24 Bid = 104080 Ask = 104180 Last = 104160 Vol = 1


这些都是在会议结束前的最后一次(即在清算结束前没有更低的报价)。

作为一个起点,我们以标有黑色的三条线为例。有两个问题。

1.红色标注的那些人去了哪里?

2.蓝色的亮点来自哪里?


另一个问题(可选)--"同时到达 "是指什么时间间隔?

 
Dima_S:

这种方法的结果如下。

317945.000000 rts-12.14 [forts] 18:44:58 38000.000000 104160.000000 3.000000
317946.000000 rts-12.14 [forts] 18:44:58 695000.000000 104160.000000 13.000000
317947.000000 RTS-12。14 [forts] 18:44:58 883000.000000 104140.000000 2.000000

317948.000000 rts-12.14 [forts] 18:44:58 986000.000000 104160.000000 1.000000
317949.000000 rts-12.14 [forts] 18:44:58 993000.000000 104160.000000 5.000000
317950.000000 rts-12.14 [forts] 18:44:58 993000.000000 104160.000000 5.000000
317951.000000 rts-12.14 [forts] 18:44:58 995000.000000 104160.000000 5.000000
317952.000000 rts-12.14 [forts] 18:44:58 996000.000000 104160.000000 1.000000



这些都是会议结束前的最后一次(即在清算结束前没有更低的报价)。

让我们把用黑色标出的三条线作为起点。有两个问题。

1.红色标注的那些人去了哪里?

它们很可能是在一个网络数据包中出现,并被称为一个OnTick。在一秒钟内有8次点击,其中3次是单次呼叫,最后5次很可能是在一个包里,最后一次报价显示为最后一次。


2.蓝色的高光是怎么来的?

这是后市场。我们还给予捕捉后市场事件的能力。这就是撤回投标通常只起作用的地方。


另一个问题(可选)--"同时到达 "是指什么时间间隔?

这不是一个区间,而是一个物理网络包。一个数据包在2-3-4个tick上到达,它们都被叠加在底座上,但OnTick调用一次。

还有一种情况是,专家顾问可能放慢了速度(忙),一个新的报价被添加到数据库中,但OnTick没有被调用,因为专家顾问正在工作。如果没有这样的机制,我们会很容易溢出专家顾问的传入报价队列,并开始向其发送旧的报价。

 

雷纳特!

非常感谢你的详细解释,但...

在我看来,这种做法对FORTS来说是不可接受的。

它应该是:报价-音量,而不是其他。

有11个报价,所以OnTick中应该有11个报价。

难道不是这样吗?

 

错了。

不要把向终端提供正确和准确的数据流与呼叫/通知专家的问题混淆起来。

所有的数据都准确无误地传递到终端,其基础。只要比较一下图表就知道了。

另一方面,专家顾问的启动是一个独立的、异步的通知。传入的数据包不能等待一些缓慢的专家,而必须立即应用到市场环境中,并且只能选择性地(如果专家已经完成了之前的调用)运行专家。

想一想这种情况:每秒有2个报价流,工作中的专家顾问,正在制动,进行交易,但它要求队列中新的等待报价不强加于终端的市场环境,直到EA完成其工作。

你能看到这将导致什么结果吗?整个终端将开始延迟所有进程,为的是保持市场对正在处理的报价状态的快照这一愚蠢的想法。而如果你考虑其他乐器,你就会拍死自己。

这就是为什么市场更新叠加始终是一个优先事项,即时性和独立于其他进程。所有其他人必须异步跟上市场的步伐。

 
Renat:

错了。

不要把向终端提供正确和准确的数据流与呼叫/通知专家的问题混淆起来。

所有的数据都准确无误地传递到终端,其基础。只要比较一下图表就知道了。

另一方面,专家顾问的启动是一个独立的、异步的通知。传入的数据包不能等待一些缓慢的专家,而必须立即应用到市场环境中,并且只能选择性地(如果专家已经完成了之前的调用)运行专家。

想一想这种情况:每秒有2个报价流,工作中的专家顾问,正在制动,进行交易,但它要求队列中新的等待报价不强加于终端的市场环境,直到EA完成其工作。

你能看到这将导致什么结果吗?整个终端将开始延迟所有进程,为的是保持市场对正在处理的报价状态的快照这一愚蠢的想法。而如果你考虑其他乐器,你就会拍死自己。

这就是为什么市场更新叠加始终是一个优先事项,即时性和独立于其他进程。所有其他人必须异步跟上市场的步伐。

不同意。

比方说,我不使用杯子(买入和卖出都在滴答声中)。

如果不知道报价,我(专家)对FORTS的市场情况会有什么想法?

和音量?

事实上,对于FORTS来说,我们可能不会通过买入和卖出(它们都在股票上)。

代码中的变化是最小的--买入和卖出都没有传递给市场。

 
Mikalas:

我不同意。

请重读我的解释几遍。

假设我不使用费率表(买入和卖出都在刻度线内)。

我(专家)对FORTS市场会有怎样的看法 与报价,并不清楚

以当前异步更新的报价,没有其他。

如果你被叫到了,就是这样--只有你在包里的报价在你面前。如果该批中有2个报价,你将只看到最后一个。因为没有人会把第一个报价传给专家顾问,并等待专家顾问完成操作。旧的报价已经消失了,如果你没有及时抓住它来解决,这意味着火车已经过去。使 用这句老话,你将无法执行任何事情。而当前/最后一个订单也很有可能被执行,因为在发送订单的时候,市场可能已经发生变化。

没有 "不要翻译出价/报价 "会有帮助。过时的蜱虫就是过时的蜱虫--没有人会冻结市场,不让你用旧蜱虫工作。

如果你愿意,你可以。

  1. 把终端放在离经纪人更近的 高速计算机上,并抓住越来越多的机会
  2. 循环的EA,不断扫描市场和市场观察,以获得更多的东西。
  3. 分析图表,分析市场

我们将与Time & Sales一起考虑提供直接访问最新的tick价格流,因此你可以访问连续tick。在市场审查中,我们以会议形式收集。这将给黄牛党带来更多机会。

 

Renat:

我们将与 "时间与销售 "一起,考虑提供直接访问最新的tick价格流,以便可以访问一致的tick。在Market Watch中,我们以会话方式收集。这将给黄牛党带来更多机会。

这是唯一可以接受的解决方案。希望会有给定符号的Phypho队列。这将解决另一个在这个事件模型 中无法解决的问题,即为EA符号以外的符号获得无损报价。
 

我仍然心存疑虑。

我将把这一点付诸行动。

//+------------------------------------------------------------------+
//|                                                    Kotirovki.mq5 |
//|                                                   Copyright 2014 |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, Mikalas"
#property link      "http://www.mql5.com"
#property version   "1.02"
//
MqlTick curr_tick;
double  start_last   = 0;
double  start_bid    = 0;
double  start_ask    = 0; 
ulong   start_volume = 0;  
//  
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
  return( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit( const int reason )
{

}
//+------------------------------------------------------------------+
//| Expert On Tick event function                                    |
//+------------------------------------------------------------------+  
void OnTick()
{
  if ( SymbolInfoTick( _Symbol, curr_tick ) )
  {
    if ( start_last == curr_tick.last )
    {
      if ( start_volume == curr_tick.volume )
      {
        if ( ( start_ask == curr_tick.ask ) &&
             ( start_bid == curr_tick.bid )  )
        {
          Print( curr_tick.time, "; Bid = ", curr_tick.bid,
                                 "; Ask = ", curr_tick.ask,
                                 "; Last = ", curr_tick.last,
                                 "; Vol = ", curr_tick.volume, "; Новая котировка(Всё одинаковое)" );
        }
        else
        {
          start_ask = curr_tick.ask;
          start_bid = curr_tick.bid;
          Print( curr_tick.time, "; Bid = ", curr_tick.bid,
                                 "; Ask = ", curr_tick.ask,
                                 "; Last = ", curr_tick.last,
                                 "; Vol = ", curr_tick.volume, "; Изменение ask или bid? Или же новая котировка?" );
        }
      }
      else
      {
        start_last = curr_tick.last;
        start_volume = curr_tick.volume;
        start_ask = curr_tick.ask;
        start_bid = curr_tick.bid;
        Print( curr_tick.time, "; Bid = ", curr_tick.bid,
                               "; Ask = ", curr_tick.ask,
                               "; Last = ", curr_tick.last,
                               "; Vol = ", curr_tick.volume, "Новая котировка (Изменён объём)!" );
      }
    }
    else
    {
      start_last = curr_tick.last;
      start_volume = curr_tick.volume;
      start_ask = curr_tick.ask;
      start_bid = curr_tick.bid;
      Print( curr_tick.time, "; Bid = ", curr_tick.bid,
                             "; Ask = ", curr_tick.ask,
                             "; Last = ", curr_tick.last,
                             "; Vol = ", curr_tick.volume, "Новая котировка! (Изменена котировка)" );
    }
  }
}

明天我们将看到发生什么...

附加的文件:
Kotirovki.ex5  5 kb
原因: