Новая версия платформы MetaTrader 5 build 1525: Представление истории в виде позиций и улучшение тестера - страница 9

 

Доброе время суток. Не знаю, сюда ли писать, в общем и тут и в теме: https://www.mql5.com/ru/forum/23249 пусть будет.

Все показано на картинках. И текст что нужна тоже на них.

Скрины из MT4 и MT5 

Сделайте пожалуйста такое в терминале

 

 MT4:

 

 

 

MT5:

 

 

Иногда выскакивает вот такая штука, при наведении мышей на объект. Версия 1525

 


 

Уважаемые разработчики, кто-нибудь в курсе, почему в тестере не запускаются эксперты размером больше чем 16 Мбайт (эмпирическим путем я нащупал цифру ~16600 Кбайт)?

К сожалению, ни где не нашел информации про ограничения размера файла для тестера :(

п.с. в справке я часто встречал цифру 16 :) Эта цифра, похоже, на столько традиционна, что даже на сайте можно встретить... Это случайность? Или в этом есть тайный смысл?

Если, что сам я в магию чисел не верю, и в случайности я тоже не верю ;)

 

И еще один любопытный момент. Если например:

#resource "data.bin" as uchar ExtData[]

Тогда в скомпилированном файле данные из "data.bin" хранятся объемом аж в 2 раза больше! Например если размер файла "data.bin" = 1024 КБайт, тогда компилятор этот файл в скомпилированный файл в шьёт как > 2048 КБайт, грубо говря, на каждый 1 байт компилятор добавляет еще 1 байт.

Уважаемые разработчики, к чему такая "экономия"?

 
Marat Sultanov:

И еще один любопытный момент. Если например:

#resource "data.bin" as uchar ExtData[]

Тогда в скомпилированном файле данные из "data.bin" хранятся объемом аж в 2 раза больше! Например если размер файла "data.bin" = 1024 КБайт, тогда компилятор этот файл в скомпилированный файл в шьёт как > 2048 КБайт, грубо говря, на каждый 1 байт компилятор добавляет еще 1 байт.

Уважаемые разработчики, к чему такая "экономия"?

Возможно, по тому что:

Особенности для новых ресурсов
  • Для строковых файлов производится автоматическое определение кодировки по BOM (заголовку). Если BOM отсутствует, кодировка определяется по содержимому. Поддерживаются кодировки ANSI, UTF-8 и UTF-16. Все строки переводятся в Unicode.
 
Sergey Dzyublik:
Возможно, по тому что:

Особенности для новых ресурсов
  • Для строковых файлов производится автоматическое определение кодировки по BOM (заголовку). Если BOM отсутствует, кодировка определяется по содержимому. Поддерживаются кодировки ANSI, UTF-8 и UTF-16. Все строки переводятся в Unicode.
Я бы с вами согласился, если бы не одно но. Но мы же говорим о бинарных файлах :)
 
Renat Fatkhullin:

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

На форексе это тоже отлично помогает для компаний, кто использует ежедневное переоткрытие позиций вместо начисления свопа. 

Именно так и нужно понимать смысл слияния - логическая цепочка состояний одной исходной позиции сворачивается в одну строку. Другая позиция по тому же символу, созданная по другой логике, будет отображаться отдельно.

Терминал (реал)

 

Код

//+------------------------------------------------------------------+
//|                                                    TestPrice.mq5 |
//|                                      Copyright 2017 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017 prostotrader"
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert Get position price function                               |
//+------------------------------------------------------------------+
double GetPositionPrice(const string aSymbol)
  {
   double price_in=0;
   double volume_in=0;

   if(PositionSelect(aSymbol))
     {
      ulong pos_id=ulong(PositionGetInteger(POSITION_IDENTIFIER));

      if(pos_id>0)
        {
         if(HistorySelectByPosition(pos_id))
           {
            int deals=HistoryDealsTotal();
            //---      
            for(int i=0; i<deals; i++)
              {
               ulong deal_ticket=HistoryDealGetTicket(i);
               ulong order_ticket=ulong(HistoryDealGetInteger(deal_ticket,DEAL_ORDER));

               if(order_ticket>0)
                 {
                  ENUM_DEAL_ENTRY deal_entry=ENUM_DEAL_ENTRY(HistoryDealGetInteger(deal_ticket,DEAL_ENTRY));

                  if(deal_entry==DEAL_ENTRY_IN)
                    {
                     double price=HistoryDealGetDouble(deal_ticket,DEAL_PRICE);
                     double volume=HistoryDealGetDouble(deal_ticket,DEAL_VOLUME);

                     price_in+=price*volume;
                     volume_in+=volume;
                    }
                 }
              }
            if(volume_in>0)
              {
               //int digits=int(SymbolInfoInteger(aSymbol, SYMBOL_DIGITS ));
               return( NormalizeDouble( price_in / volume_in, Digits() ) );
              }
           }
         else
           {
            Print(__FUNCTION__,": Невозможно получить историю позиции по символу ",aSymbol);
           }
        }
      else
        {
         Print(__FUNCTION__,": Невозможно определить идентификатор позиции по символу ",aSymbol);
        }
     }
   return( 0 );
  }
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   double a_price=GetPositionPrice("AUDU-3.17");
   Print("AUDU-3.17 price = ",DoubleToString(a_price));
   a_price=GetPositionPrice("AUDU-6.17");
   Print("AUDU-6.17 price = ",DoubleToString(a_price));
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+

Результат

2017.01.30 20:31:59.352 TestPrice (AUDU-3.17,H1)        AUDU-3.17 price = 0.74880000
2017.01.30 20:31:59.352 TestPrice (AUDU-3.17,H1)        AUDU-6.17 price = 0.75290000

Добавлено

Закрытия позиций небыло.
 

 
Marat Sultanov:

И еще один любопытный момент. Если например:

#resource "data.bin" as uchar ExtData[]

Тогда в скомпилированном файле данные из "data.bin" хранятся объемом аж в 2 раза больше! Например если размер файла "data.bin" = 1024 КБайт, тогда компилятор этот файл в скомпилированный файл в шьёт как > 2048 КБайт, грубо говря, на каждый 1 байт компилятор добавляет еще 1 байт.

Уважаемые разработчики, к чему такая "экономия"?

Покажите пожалуйста исходный код и приложите "data.bin" файл для проверки.

Проверьте, не изменяется ли размер массива через ArrayResize и расположение файла data.bin (тот ли файл используется)
 
fmql:

Доброе время суток. Не знаю, сюда ли писать, в общем и тут и в теме: https://www.mql5.com/ru/forum/23249 пусть будет.

 

Будет в следующем билде :)
 
Ilyas:
Покажите пожалуйста исходный код и приложите "data.bin" файл для проверки.

Проверьте, не изменяется ли размер массива через ArrayResize и расположение файла data.bin (тот ли файл используется)

Да, без проблем:

Реализовал через скрипт. Скрипт создает бинарный файл размером 1 Мбайт, который выступает в роли ресурса.

В архиве:

1) Исходный код скрипта.

2) Бинарный файл.

3) Скомпилированный файл скрипта. Как вы можете видеть размер составляет, грубо говоря, больше 2 МБайтов. 


Добавлено:

Забавно... я эмпирическим путем понял, что компилятор сжимает бинарные файлы, но если энтропия файла высокая, тогда компилятор расширяет, т.е. эффект обратный :)

Файлы: