Новая версия платформы MetaTrader 5 build 3081: Улучшения в MQL5-сервисах и обновленный дизайн - страница 54

 

Нужен другой источник :) ?

Может быть фотошоп?

 
A100 #:

Нет - это следует из логики ценообразования

Каким образом?

Здесь нестыковки времени сделок и времени инфотиков.

 
mktr8591 #:

Каким образом?

Я имел ввиду, что объяснение prostotrader вполне логичное

 
prostotrader #:

К сожалению, я уже не помню, где брал документ о порядке сведения заявок на МОЕХ, но я его читал лет 14 назад.

Я запросил техподдержку биржи где его взять.

Будем ждать дополнительной информации.

Пока же, немного пробежавшись по документу, я извлек следующую информацию:


Торговая информация включает в себя:

• Агрегированные стаканы Формируются на основе системных заявок пользователей путем суммирования объёма для каждого инструмента, ценового уров- ня и направления заявки. Обновляются в режиме он-лайн и являются основным способом получения информации о текущих ценах и объёмах. Пользователь может выбрать желаемую глубину стакана из вариантов 5, 20 или 50 ценовых уровней в каждом из направлений; данный выбор осуществляется при конфигурировании логина и не может быть изменен в ходе торговой сессии. Стаканы транслируются несколькими потоками репликации Plaza-2: FORTS_AGGR5_REPL, FORTS_AGGR20_REPL и FORTS_AGGR50_REPL.

• Общерыночные показатели В составе общерыночных показателей транслируется такая информация как лучшие заявки на покупку и продажу, цены открытия, закрытия, текущие расчетные цены и т.п. Данная информация транслируется в потоке FORTS_COMMON_REPL.

• Журнал заявок пользователя (а также - полный журнал заявок торговой системы) В журнале заявок пользователя транслируется вся история операций по заявкам пользователя. Журналы заявок пользователя доступны в таблице orders_log потока FORTS_TRADE_REPL для фьючерсов и опционов, а также в таблице multileg_orders_log потока FORTS_TRADE_REPL для заявок по составным инструментам. В случае, если пользователь при конфигурации логина указал опцию "Полный журнал заявок", помимо своих заявок, пользо- ватель будет получать полный журнал всех операций с заявками на рынке в анонимизированном виде, доступный в таблице orders_log потока FORTS_ORDLOG_REPL.

• Журнал сделок пользователя Содержит список всех совершенных пользователем за текущую сессию сделок. Журналы сделок пользователя доступны в таблице user_deal потока FORTS_TRADE_REPL для фьючерсов и опционов, а также в таблице user_multileg_deal потока FORTS_TRADE_REPL для сделок по составным инструментам.

• Журнал сделок торговой системы Содержит список всех сделок, совершенных всеми пользователями за текущую сессию. Данные сделок чужих пользователей представлены в анонимизированном виде. Журналы сделок пользователя доступны в таблице deal потока FORTS_DEALS_REPL для фьючерсов и опционов, а также в таблице multileg_deal для сделок по составным инструментам.

Как я понимаю, MT5 в своём стакане миксует  FORTS_AGGR20_REPL (стакан) и  FORTS_TRADE_REPL (история тиков), а вот  FORTS_COMMON_REPL не используется для сохранения истории.

При этом:

Синтетическая ликвидность в агрегированных стаканах обновляется с той же частотой, с какой обновляется агрегированные ста- каны. Частота обновления агрегированных стаканов ниже частоты торговых событий, происходящих в системе.Иными словами, агрегированный стакан, а значит и синтетическая ликвидность в нем не обновляется на каждую заявку или сделку. Участник, же- лающий оценивать полную глубину синтетической ликвидности (более 5 ценовых уровней) и ее изменение при каждом торговом событии (транзакции), должен самостоятельно рассчитывать доступную синтетическую ликвидность на основании информации в публичном orders_log.

 
Aleksey Vyazmikin #:

Будем ждать дополнительной информации.

Пока же, немного пробежавшись по документу, я извлек следующую информацию:


Торговая информация включает в себя:

Как я понимаю, MT5 в своём стакане миксует  FORTS_AGGR20_REPL (стакан) и  FORTS_TRADE_REPL (история тиков), а вот  FORTS_COMMON_REPL не используется для сохранения истории.

При этом:

Пишите, пожалуйста, в раздел Биржевой трейдинг, здесь другая тема.

 

Бид не изменился....

 
prostotrader #:

Нужен другой источник :) ?

ну и? где промежуточный бид по цене 37226?

 
Andrei Trukhanovich #:

ну и? где промежуточный бид по цене 37226?

Вот и мне интересно.. Где?

Это то, что выдала функция CopyTickRange()

Добавлено

Проверьте, пожалуйста, может быть в коде есть ошибка

//+------------------------------------------------------------------+
//|                                                      G_ticks.mq5 |
//|                                     Copyright 2021, prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, prostotrader"
#property link      "https://www.mql5.com"
#property version   "1.00"

input datetime Stime = D'19.10.2021 07:00:00'; //Начало получения тиков
input datetime Etime = D'19.10.2021 23:50:00'; //Конец получения тиков
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
//  ulong c_time = ulong(D'15.10.2021 07:00:00');
  MqlTick g_ticks[];
  string t_date;
  string t_time;
  string c_flags;
  ulong mem_ms, cur_ms;
  int result = CopyTicksRange(Symbol(), g_ticks, COPY_TICKS_ALL, ulong(Stime) * 1000, ulong(Etime) * 1000);
  if(result > 0)
  {
    int f_handle=FileOpen("range_ticks.csv",FILE_WRITE|FILE_CSV); 
    if(f_handle!=INVALID_HANDLE)
    {
      FileWrite(f_handle,"Иструмент:", Symbol());
      FileWrite(f_handle,"Всего записей:", string(result));
      FileWrite(f_handle, "Номер", "Дата", "Время", "Флаги", "Цена(Last)", "Объем", "Реальный объем", "Предложение (ASK)", "Спрос (BID)");
      mem_ms = ulong(g_ticks[0].time_msc) - ulong(g_ticks[0].time)*1000;
      for(int i=0;i<result;i++)
      {
        t_date = TimeToString(g_ticks[i].time, TIME_DATE);
        cur_ms = ulong(g_ticks[i].time_msc) - ulong(g_ticks[i].time)*1000;
        t_time = TimeToString(g_ticks[i].time, TIME_SECONDS) + "." + StringFormat("%03i", cur_ms);
        if(cur_ms != mem_ms) FileWrite(f_handle, "");
        c_flags = "";
        if((g_ticks[i].flags&TICK_FLAG_BID) == TICK_FLAG_BID) c_flags += " TICK_FLAG_BID,"; 
        if((g_ticks[i].flags&TICK_FLAG_ASK) == TICK_FLAG_ASK) c_flags += " TICK_FLAG_ASK,";
        if((g_ticks[i].flags&TICK_FLAG_LAST) == TICK_FLAG_LAST) c_flags += " TICK_FLAG_LAST, ";
        if((g_ticks[i].flags&TICK_FLAG_VOLUME) == TICK_FLAG_VOLUME) c_flags += " TICK_FLAG_VOLUME,";
        if((g_ticks[i].flags&TICK_FLAG_BUY) == TICK_FLAG_BUY) c_flags += " TICK_FLAG_BUY,";
        if((g_ticks[i].flags&TICK_FLAG_SELL) == TICK_FLAG_SELL) c_flags += " TICK_FLAG_SELL,";
        int f_len = StringLen(c_flags);
        if(f_len > 1)
        {
          StringSetCharacter(c_flags, f_len - 1, ushort(" "));
          StringTrimRight(c_flags);          
        }
        if(c_flags == "")
        {
          FileWrite(f_handle, string(i + 1), t_date, t_time, string(g_ticks[i].flags), DoubleToString(g_ticks[i].last, Digits()),
                              string(g_ticks[i].volume), string(g_ticks[i].volume), DoubleToString(g_ticks[i].ask, Digits()),
                              DoubleToString(g_ticks[i].bid, Digits()));
        }
        else FileWrite(f_handle, string(i + 1), t_date, t_time, c_flags + " (" + string(g_ticks[i].flags) + ")",
                                 DoubleToString(g_ticks[i].last, Digits()), string(g_ticks[i].volume),
                                 string(g_ticks[i].volume), DoubleToString(g_ticks[i].ask, Digits()), DoubleToString(g_ticks[i].bid, Digits())); 
      mem_ms = cur_ms;
      }
      FileClose(f_handle);
    }  
  }
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
 
prostotrader #:

Вот и мне интересно.. Где?

так это другой источник или продолжаем шлангом прикидываться?

 
Artyom Trishkin # :

Знание чего-либо не даёт права пытаться оскорблять целый пласт направления деятельности людей.

"Глупый недостойный форексник" может быть хорошим умным человеком, и "отличный достойный всего биржевик" тоже может быть им же.

В чём между ними тогда разница?

Вы пытаетесь делить людей по сословиям, по "голубым кровям", откровенно показывая своё пренебрежение. Простите, это не просто видно - это кричит.

Прошу, перестаньте - не красиво.

Здесь технический форум, и нужно уметь оставлять своё личное при себе - только факты и по делу.

Да, Артём, это технический форум, а не форум мнений, разве люди, которые пишут сообщения, не должны знать немного о теме, чтобы участвовать? Когда вы чего-то не знаете, просто слушайте (критически) людей, которые знают.

К сожалению, из-за языкового барьера я не могу активно участвовать, но очевидно, что некоторые люди здесь осмеливаются публиковать сообщения о том, чего они не знают, что очень неприятно читать.

Спасибо за то, что вы слушали.