Ошибки, баги, вопросы - страница 1851

 
kaus_bonus:

Спасибо за ответ.

В общем результаты,как я и показывал в своих постах.

К тому же вас небольшой чит передо мной - SSD. я вооще тестил на обычном.

Не чит, это одинаковые условия для обоих систем.


И все же результаты между МТ4 и МТ5 отличаются почти в 200 раз (из за  - обязательный контроль полной синхронизации с серверными данными ?? и пинга?).

Про 0.6 мс у МТ4 я еще разберусь. Там по всей видимости данные уже предподготовлены и поэтому эта цифра не показывает реальных расходов.

У МТ4 совсем другая идеология и на самом деле фоном терминал копирует огромный объем данных для каждого скрипта/эксперта на системном уровне вне MQL4 кода. Тем самым замеры из MQL4 чаще всего не показывают реальных расходов ресурсов на получение данных. Расходы конечно есть, но они на другом уровне - система берет их на себя.

Понятно, что механизм МТ4 (строить копии рыночных данных для каждого робота) нельзя применять, когда у тебя задача масштабируется на неограниченные потоки данных (глубокая история, десятки тысяч инструментов). Поэтому пришлось кардинально изменить и улучшить MQL5, избавившись от прямых доступов Open/High/Low/Close и перейдя на CopyXXX функции. С учетом объемов данных МТ5, строить копию EURUSD M1 на 6 миллионов баров для эксперта слишком накладно.

MT5/MQL5 везде использует стратегию загрузки данных по требованию без предварительных созданий копий, что означает бОльшую возможность замерить реальные расходы из MQL5 кода.

Поднять базу в память, проверить синхронизацию и подготовить кеши сложного объекта в МТ5 за 113 миллисекунд - это приемлемо.

 
kaus_bonus:

Например,т.к. в МТ нет скринера рынка, то я накропал небольшой скрипт,который добавляет символы в обзор рынка,т.к. при этом цены доступны только через CopyClose, ни через SymbolInfoDouble,ни через MqlTick они не доступны,пока символ не добавлен в обзор, то соответственно запустив подобный скрипт после запуска терминала, он выполняется "бесконечно" долго,если запустить на очень большом колве. Это только как пример. 

Инструменты не обязательно должны быть добавлены в обзор рынка, чтобы по ним получить историю. Любое обращение к данным символа вызывает фоновую синхронизацию данных.

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

Уже поставлена задача изменить эту стратегию и поднимать данные, не глубже 500 баров от самой далекой даты запроса. Это позволит безболезненно писать скринеры рынка.

 
fxsaber:

Как правильно?


Сами спросили, сами ответили:) Ну да, так и есть.
 
Алексей Тарабанов:

Сами спросили, сами ответили:) Ну да, так и есть.
Сокращенного вызова шаблонного оператора так и не увидел.
 
fxsaber:
Сокращенного вызова шаблонного оператора так и не увидел.

Сто лет не работал со структурами. Если Вам нужно инициировать элемент массива структур целиком, то это будет операция со строкой. А целочисленный элемент этой преобразованной строки Вы инициировали правильно, о чем и сообщил компилятор. Если хотите инициировать, сравнивать, либо еще как обрабатывать массивы структур, поинтересуйтесь способом их представления/хранения в MQL. Ничего сложного и сильно ускоряет работу. 
 
Алексей Тарабанов:
Мне нужно знать, какая синтаксическая запись является сокращенным вариантом этого
Struct.operator[]<int>(0);
 
fxsaber:
Мне нужно знать, какая синтаксическая запись является сокращенным вариантом этого
Struct[0]
 
Комбинатор:
Struct[0]

To whom how
 
Комбинатор:
Struct[0]
Чтобы не лазить по страницам, скопирую код

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2017.04.12 14:27

struct STRUCT
{
  template <typename T>
  void operator []( int ) {}
};

void OnStart()
{
  STRUCT Struct;
  
  Struct.operator[]<int>(0); // Нормально
  Struct[0]<int>;            // Ошибка
}

Вот эти два вызова являются разными

Struct.operator[]<int>(0);
Struct.operator[]<MqlTick>(0);

Для каждого должна существовать соответствующая сокращенная запись. Какая?

 
fxsaber:
Мне нужно знать, какая синтаксическая запись является сокращенным вариантом этого

Никакая запись не может обеспечить того, что Вы хотите. Принципиально. Семантически. 
Причина обращения: