Новая версия платформы MetaTrader 5 build 1525: Представление истории в виде позиций и улучшение тестера - страница 9
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Доброе время суток. Не знаю, сюда ли писать, в общем и тут и в теме: https://www.mql5.com/ru/forum/23249 пусть будет.
Все показано на картинках. И текст что нужна тоже на них.
Скрины из MT4 и MT5
Сделайте пожалуйста такое в терминале
MT4:
MT5:
Иногда выскакивает вот такая штука, при наведении мышей на объект. Версия 1525
Уважаемые разработчики, кто-нибудь в курсе, почему в тестере не запускаются эксперты размером больше чем 16 Мбайт (эмпирическим путем я нащупал цифру ~16600 Кбайт)?
К сожалению, ни где не нашел информации про ограничения размера файла для тестера :(
п.с. в справке я часто встречал цифру 16 :) Эта цифра, похоже, на столько традиционна, что даже на сайте можно встретить... Это случайность? Или в этом есть тайный смысл?
Если, что сам я в магию чисел не верю, и в случайности я тоже не верю ;)
И еще один любопытный момент. Если например:
Тогда в скомпилированном файле данные из "data.bin" хранятся объемом аж в 2 раза больше! Например если размер файла "data.bin" = 1024 КБайт, тогда компилятор этот файл в скомпилированный файл в шьёт как > 2048 КБайт, грубо говря, на каждый 1 байт компилятор добавляет еще 1 байт.
Уважаемые разработчики, к чему такая "экономия"?
И еще один любопытный момент. Если например:
Тогда в скомпилированном файле данные из "data.bin" хранятся объемом аж в 2 раза больше! Например если размер файла "data.bin" = 1024 КБайт, тогда компилятор этот файл в скомпилированный файл в шьёт как > 2048 КБайт, грубо говря, на каждый 1 байт компилятор добавляет еще 1 байт.
Уважаемые разработчики, к чему такая "экономия"?
Особенности для новых ресурсов
Возможно, по тому что:
Особенности для новых ресурсов
Воспользуйтесь биржевой торговлей с постоянными переоткрытиями позиций между тоговыми сессиями, подержите позы пару недель и сразу станет понятно. Вместо десятков разрозненных ордеров и позиций вы увидите одну красивую и точную строку. Как и просили трейдеры.
На форексе это тоже отлично помогает для компаний, кто использует ежедневное переоткрытие позиций вместо начисления свопа.
Именно так и нужно понимать смысл слияния - логическая цепочка состояний одной исходной позиции сворачивается в одну строку. Другая позиция по тому же символу, созданная по другой логике, будет отображаться отдельно.
Терминал (реал)
Код
//| 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-6.17 price = 0.75290000
Добавлено
Закрытия позиций небыло.
И еще один любопытный момент. Если например:
Тогда в скомпилированном файле данные из "data.bin" хранятся объемом аж в 2 раза больше! Например если размер файла "data.bin" = 1024 КБайт, тогда компилятор этот файл в скомпилированный файл в шьёт как > 2048 КБайт, грубо говря, на каждый 1 байт компилятор добавляет еще 1 байт.
Уважаемые разработчики, к чему такая "экономия"?
Проверьте, не изменяется ли размер массива через ArrayResize и расположение файла data.bin (тот ли файл используется)
Доброе время суток. Не знаю, сюда ли писать, в общем и тут и в теме: https://www.mql5.com/ru/forum/23249 пусть будет.
Покажите пожалуйста исходный код и приложите "data.bin" файл для проверки.
Проверьте, не изменяется ли размер массива через ArrayResize и расположение файла data.bin (тот ли файл используется)
Да, без проблем:
Реализовал через скрипт. Скрипт создает бинарный файл размером 1 Мбайт, который выступает в роли ресурса.
В архиве:
1) Исходный код скрипта.
2) Бинарный файл.
3) Скомпилированный файл скрипта. Как вы можете видеть размер составляет, грубо говоря, больше 2 МБайтов.
Добавлено:
Забавно... я эмпирическим путем понял, что компилятор сжимает бинарные файлы, но если энтропия файла высокая, тогда компилятор расширяет, т.е. эффект обратный :)