测试 "CopyTicks"。 - 页 21

 
Network 'xxx': authorized on Alpari-MT5 through mt5.nl.3 (ping: 64.15 ms)

在几乎空无一人的Alpari市场观察上,copitix的刹车和BCS上一样多。

在Robo上,一切都快了不止一个数量级。

 

关于USDCHF M1的结果,CalcLength来自指标https://www.mql5.com/ru/code/16537。

  • RoboForexEU - 23 ms (杯子不在广播中,只有出价/报价)
  • MetaQuotes-Demo - 15-30毫秒(广播里有一个带体积的杯子)。


结果是不断波动的+单线程规则没有被观察到--在一个没有挑选和混合CopyTicks的流中,在另一个有挑选的流中。在BCS上没有打开演示,但主要是RoboForex上没有堆栈。

奇怪的测量代码。测量了很多不必要的东西,但没有测量CopyTicks请求时间。

virtual void Visual( void ) const
  {
    const ulong StartTime = ::GetMicrosecondCount();

    int X0;
    int Y0;

    BARS bars(this.Chart);

    TICKSPICTURE TicksPicture(this.Chart, &bars, X0, Y0);

    this.SetProperty(::OBJPROP_XDISTANCE, X0);
    this.SetProperty(::OBJPROP_YDISTANCE, Y0);

    TicksPicture.Fill(ColorBid, ::BID);
    TicksPicture.Fill(ColorAsk, ::ASK);
    TicksPicture.Fill(ColorSpread, ::AVG);

    TicksPicture.SendToResource(this.Resource);

    ::Comment("LastCalcTime = " + (string)::TimeLocal() +
              ", Ticks = " + (string)bars.GetAmountTicks() +
              ", CalcLength = " + (string)((::GetMicrosecondCount() - StartTime) / THOUSAND) + " ms.");

    ::ChartRedraw(this.Chart);

    return;
  }

在任何情况下,我们都要优化调用,以复制ticks。这需要很多。
Тиковый индикатор Ticks
Тиковый индикатор Ticks
  • 投票: 15
  • 2016.10.14
  • //www.mql5.com/ru/users/fxsaber">
  • www.mql5.com
Показывает тиковую ценовую историю (Bid/Ask) внутри всех видимых баров.
 
Renat Fatkhullin:

关于USDCHF M1的结果,CalcLength来自指标https://www.mql5.com/ru/code/16537。

  • RoboForexEU - 23 ms (广播中没有堆栈,只有买入/卖出)
  • MetaQuotes-Demo - 15-30毫秒(广播里有一个带体积的杯子)。

Alpari Real和BCS Real上的问题。打开真实世界的大门是非常容易的。

关于交易、自动交易系统和交易策略测试的论坛

交易所的限价单滑点统计

pivomoe, 2016.08.25 15:15

开始用bx做模拟mt5账户。你将会收到一封电子邮件,里面有一个分发的链接。在选择服务器的阶段,不要选择模拟服务器,而是选择真实交易的服务器。用任意的数据创建一个账户。创建一个证书。所有你有一个零 余额的真实账户,有真实的报价和历史记录。


结果是不断浮动的+单线程的规则没有得到尊重--在一个没有堆栈的线程(在那里没有必要为CopyTicks做选择和合并),在另一个有堆栈的线程。该演示在BCS上没有打开,但主要的是Roboforex上没有流媒体。

奇怪的测量代码。测量了一堆额外的东西,但决不是CopyTicks请求的时间。

这不是由我决定的。这一切都在一起测量。唯一的区别是贸易服务器。所以刹车只与CopyTicks有关。

在任何情况下,copyTicks的调用都是优化的。这需要很多。

Copyix目前的形式是非常不方便的。例如,绝对不清楚如何获得之前的蜱虫,从。

为什么我们不能返回基数的索引并像处理数组一样处理基数?让我们把向数据库添加新数据的问题完全交给用户来解决。如果出了问题,就让他自己解决吧。现在,用Copyix工作是,嗯,非常不方便。我似乎是少数几个非常积极使用它的人之一。而且我可以很负责任地说说这个问题。

 
Renat Fatkhullin:

关于USDCHF M1的结果,CalcLength来自指标https://www.mql5.com/ru/code/16537。

  • RoboForexEU - 23 ms (广播中没有统计,只有买入/卖出)
  • MetaQuotes-Demo - 15-30毫秒(广播里有一个带体积的杯子)。


结果是不断波动的+单线程规则没有被遵守--有一些线程在其中一个上没有挑选和合并CopyTicks,在另一个上有挑选。在BCS上,演示没有打开,但主要的是在Roboforex上没有流媒体

奇怪的测量代码。测量了一堆不必要的东西,但决不是CopyTicks请求的时间。

virtual void Visual( void ) const
  {
    const ulong StartTime = ::GetMicrosecondCount();

    int X0;
    int Y0;

    BARS bars(this.Chart);

    TICKSPICTURE TicksPicture(this.Chart, &bars, X0, Y0);

    this.SetProperty(::OBJPROP_XDISTANCE, X0);
    this.SetProperty(::OBJPROP_YDISTANCE, Y0);

    TicksPicture.Fill(ColorBid, ::BID);
    TicksPicture.Fill(ColorAsk, ::ASK);
    TicksPicture.Fill(ColorSpread, ::AVG);

    TicksPicture.SendToResource(this.Resource);

    ::Comment("LastCalcTime = " + (string)::TimeLocal() +
              ", Ticks = " + (string)bars.GetAmountTicks() +
              ", CalcLength = " + (string)((::GetMicrosecondCount() - StartTime) / THOUSAND) + " ms.");

    ::ChartRedraw(this.Chart);

    return;
  }

在任何情况下,我们都要优化调用,以复制ticks。这需要很多。

请澄清你说的单线程是什么意思?

另一个问题,为了使刻度线尽可能快地到来,有必要在终端中不打开杯子,并且没有从EA/指示器中订阅杯子更新事件?

从参考资料来看。

输出速度: 终端在快速访问缓存中为每个符号存储了4096个最近的标记(堆栈运行的符号为65536个标记),对这些数据的查询是最快的

同样,为了快速访问,应该把赌注隐藏起来,不应该有按符号更新赌注的订阅?还是有一个堆栈(隐藏/打开)已经是减速的保证?
 
Alexey Kozitsyn:

请澄清你所说的单一流量是什么意思?

关于交易、自动交易系统和策略测试的论坛

测试 "CopyTicks"。

fxsaber, 2016.10.13 10:18

在蜱虫方面有一个MT的细微差别,由于收到多个来源的蜱虫,蜱虫历史本身被追溯性地覆盖了。


 
fxsaber:
谢谢你,但你知道玻璃和收货速度的情况吗?
 
Alexey Kozitsyn:
谢谢你,但你知道玻璃和收货速度的情况吗?
没有,很遗憾。雷纳特称,tumblr不断为整个市场观察提供流媒体。但对于大多数情况来说,这不是一个权宜之计(浪费)的解决方案。
 
fxsaber:
没有,很遗憾。雷纳特认为,玻璃对整个市场观察来说是永久性的精简。但这对大多数情况来说不是一个合适的解决方案。
每个符号都有自己的杯子,这将是更合理的做法。
 

这就是你应该测试CopyTicks的方式。

MqlTick ExtArr[2048];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   ulong from   =(TimeTradeServer()-1200)*1000;
   ulong ticks  =GetMicrosecondCount();
   int   records=CopyTicks(_Symbol,ExtArr,COPY_TICKS_INFO,from,2048);

   ticks=GetMicrosecondCount()-ticks;
   Print("Time: ",ticks," msc for ",records," records");
  }

下面是以微秒为单位的输出:在过去的20分钟里,2048个INFO点的每个样本有95微秒的输出

2016.10.18 14:15:38.673 TEST (USDCHF,M1)        Time: 95 msc for 1206 records
这与你所说的几十毫秒有很大的不同。那是因为你没有测量CopyTicks。
 
Alexey Kozitsyn:

请澄清你说的单线程是什么意思?

买入/卖出流量和带有成交量和最后/成交价格的完整勾选流量是两个很大的区别。

差异很大。


另一个问题,为了使刻度线尽可能快地到来,有必要在终端中不打开玻璃,并且没有订阅专家顾问/指示器中更新玻璃的事件?

终端的开放性或EA的订阅并不重要。

如果符号在marketwatch中,那么终端就会无条件地接收所有带有赌注的完整tick流。


但最重要的是,上面的采样率计算是不相关的。他们做得很笨拙(除了CopyTicks时间的测量外,任何东西都是如此),甚至让人感到惊讶。