测试 "CopyTicks"。 - 页 12

 
Dmitriy Skub:

一年后,我们总结了中间的结果。

- CopyTicks功能正常工作(如描述)。

- 使用该函数获得的期货市场的当前tick数据与交易所的数据相吻合。

- 从2016年7月28 日(很明显,最新的服务器版本开始)开始,最具流动性的工具的期货市场tick数据历史是正确的。

以上所有内容适用于MT5 终端1395 版本和Open-Broker 中的衍生品市场真实账户。原则上,该议题已经结束。

你也检查过交易的方向吗?
 

我有一个关于CopyBuffer的问题

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

mql5是否允许你写一个指标,在不同的窗口绘制图表,或在其他窗口访问指标缓冲区?

fxsaber, 2016.09.09 10:20

我有这样一个问题。当使用CopyBuffer时,为改变的数值(输入参数数不为零)增加缓冲区或总是对缓冲区进行完整的复制是否合理(从性能角度来看)?

但关于CopyTicks的问题几乎相同。

在使用CopyTicks时,将新值添加到已经收集到的ticks上,或者总是从需要ticks的地方提出完整的请求,而不是存储以前收集到的值,这是否合理(从性能的角度来看)?

 
当向动态数组 添加点数时,ArrayResize中的reserve_size是多少最好?
 
fxsaber:
当向动态数组 添加点数时,ArrayResize中的reserve_size是多少最好?
一个动态数组被限制在INT_MAX以内,所以最好马上设置这个大小。
 
prostotrader:
一个动态数组被限制在INT_MAX之内,所以最好立即将数组设置为这个大小。
这只鸟的记忆力真让人遗憾。
 
prostotrader:
一个动态数组被限制在INT_MAX之内,所以最好立即将数组设置为这个大小。
米卡拉斯,是你吗?:-)
 
Dennis Kirichenko:
米卡拉斯,是你吗?:-)
Примечание

Функция может быть применена только к динамическим массивам. При этом необходимо иметь ввиду, что нельзя изменять размер для динамических массивов, 
назначенных в качестве индикаторных буферов функцией SetIndexBuffer(). Для индикаторных буферов все операции по изменению размера производит 
исполняющая подсистема терминала.

Общее число элементов в массиве не может превышать 2147483647.
 
prostotrader:
从你的笔迹中我可以看出你是;-)
 

当最佳帮派在同一毫秒内发生变化时,该脚本会输出滴答声

#property script_show_inputs

sinput int Count = 10000; // Количество тиков на проверку

#define  TOSTRING(A) " " + #A + " = " + (string)Tick.A

string TickToString( const MqlTick &Tick )
{
  static int i = 0;
  
  i++;
  
  return("Tick" + (string)i + ":" + TOSTRING(time) + "." + (string)(Tick.time_msc %1000) +
         TOSTRING(bid) + TOSTRING(ask) + TOSTRING(last)+ TOSTRING(volume));
}

void OnStart()
{
  MqlTick Ticks[];
  
  const int Amount = CopyTicks(_Symbol, Ticks, COPY_TICKS_INFO, 0, Count);
  
  for (int i = 1; i < Amount; i++)
    if (Ticks[i].time_msc == Ticks[i - 1].time_msc) // ищем соседние тики с одним временем (с точностью до мс)
//      if ((Ticks[i].bid > Ticks[i - 1].bid) ||(Ticks[i].ask < Ticks[i - 1].ask)) // ищем выставление лимитной заявки внутрь спреда
        Print(TickToString(Ticks[i - 1]) + "\n" + TickToString(Ticks[i]) + "\n");
}

部分结果。

2016.09.13 11:58:46.861 Test (RTS-9.16,M1)      Tick14: time = 2016.09.13 10:12:55.819 bid = 98220.0 ask = 98240.0 last = 98240.0 volume = 2
2016.09.13 11:58:46.861 Test (RTS-9.16,M1)      Tick13: time = 2016.09.13 10:12:55.819 bid = 98230.0 ask = 98240.0 last = 98240.0 volume = 2

在这里,在同一毫秒内,有人设法撤回了他们的BuyLimit=98230。确切地说,是撤回了它,而不是用记号笔抽打了它。

检查表明,在一毫秒内的所有此类行动都是对杯中最佳限额的提取(而不是执行)。

结果的另一部分。

2016.09.13 11:58:46.861 Test (RTS-9.16,M1)      Tick4: time = 2016.09.13 10:00:00.235 bid = 98490.0 ask = 99040.0 last = 98500.0 volume = 8
2016.09.13 11:58:46.861 Test (RTS-9.16,M1)      Tick3: time = 2016.09.13 10:00:00.235 bid = 98490.0 ask = 98600.0 last = 98500.0 volume = 8
2016.09.13 11:58:46.861 Test (RTS-9.16,M1)      
2016.09.13 11:58:46.861 Test (RTS-9.16,M1)      Tick2: time = 2016.09.13 10:00:00.235 bid = 98490.0 ask = 98600.0 last = 98500.0 volume = 8
2016.09.13 11:58:46.861 Test (RTS-9.16,M1)      Tick1: time = 2016.09.13 10:00:00.235 bid = 98500.0 ask = 98600.0 last = 98500.0 volume = 8

在这里,不知何故,在会议开始时有人设法在一毫秒内删除了SellLimit和BuyLimit。就是说,在一毫秒内有两个动作!这是对的。

这怎么可能呢?毕竟,即使是HFT也不能在不到1毫秒的时间内删除一个限价订单。

或者,如果通过OrderSendAsync 发送两个限价订单(BuyLimit1_price < BuyLimit2_price)在价差内,那么交易所将在同一时间产生两个连续的买入价提高的ticks(精度为1ms)?

 
fxsaber:


这怎么可能呢?毕竟,即使是HFT也不能在不到1毫秒的时间内删除一个限价单。


你从哪里得到这样的知识?

除了Plaza II,还有一个FAST/FIX协议

1ms内有数百个操作。