Как получить список доступных в терминале символов? - страница 2

 
granit77 >>:

Меняю свое мнение, именно это лучшее из того, что публиковалось.

И не только это... ;)

Ещё и как самый ярчайший пример того, что надо читать доки, причём весьма внимательно!!!


int FileOpenHistory( string filename, int mode, int delimiter=';')
Открывает файл в текущей папке истории (каталог_терминала\history\server_name) или ее подпапках. Возвращает описатель файла или -1 в случае неудачи. Для получения дополнительной информации об ошибке необходимо вызвать функцию GetLastError().
Замечания: клиентский терминал может подключаться к серверам разных брокерских компаний. Исторические данные (файлы HST) каждой брокерской компании хранятся в соответствующей подпапке папки истории каталог_терминала\history.
Функция может быть полезна для формирования собственных исторических данных нестандартного символа и/или периода. Файл, сформированный в папке истории может быть открыт автономно, для его графика не требуется подкачка данных.

А так-же для получения иной информации из файлов находящихся в этих папках... (добавлено мной)

*

Единственно на что обращу внимание, для формирования списка свойств инструментов

надо выполнить команду "Показать все" в маркетвоч...

 
granit77 >>:

Меняю свое мнение, именно это лучшее из того, что публиковалось. Да и понятно, это ж Ilnur.

Спасибо за хорший отзыв!


В CodeBase я выложил библиотеку функций SymbolsLib для получения дополнительной информации о финансовых инструментах терминала.


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

вопросов поясню. Функция представленная мной выше считывает полный список символов терминала из файла symbols.raw, независимо от того

перечислены они в окне "Обзор рынка" или нет. Однако, если требуется получить список активных на текущий момент инструментов, то данный способ не сработает.


Я пока не видел способов реализации такой задачи, кроме как перебор, н-р, Currency v1.0 или считывание из *.set файла SymbolList fromSet. Однако, если в окне

"Обзор рынка" будет добавлен невалютный инструмент, то перебор по названию валют не сработает. А для считывания из *.set файла его необходимо сначала

создать в ручную. В случае добавления или удаления символа необходимо будет заново создавать данный файл.


Предлагаемое мной решение свободно от указанных недостатков.

 

Ilnur, спасибо за ваши библиотеки.

Возможно, сможете решить задачу:

чтобы online-график получил данные из соответствующего ему HST-файла.

Сейчас он получает эти данные всего один раз - при открытии первый раз данного инструмента с нужным таймфрэймом.

 
mql4com >>:

Ilnur, спасибо за ваши библиотеки.

Возможно, сможете решить задачу:

чтобы online-график получил данные из соответствующего ему HST-файла.

Сейчас он получает эти данные всего один раз - при открытии первый раз данного инструмента с таймфрэймом.

Не совсем понятен Ваш вопрос. Графики всегда обновляются при наличии соединения терминала с сервером.

 

Если менять HST-файлы уже открытых графиков, то графики не изменяются.

Например, при корректировании (через FileOpenHistory) некоторых баров HST-файла на (открытом хоть раз за сессию терминала) online-графике бары остаются прежними, как и в базе данных (по F2).

После закрытия терминала все HST-файлы, конечно, обновляются (записываются данные, полученные с сервера за время работы терминала).

 
mql4com >>:

Если менять HST-файлы уже открытых графиков, то графики не изменяются.

Например, при корректировании (через FileOpenHistory) некоторых баров HST-файла на (открытом хоть раз за сессию терминала) online-графике бары остаются прежними, как и в базе данных (по F2).

После закрытия терминала все HST-файлы, конечно, обновляются (записываются данные, полученные с сервера за время работы терминала).

Посмотрите стандартный скрипт Period_Converter.mq4, мне кажется он поможет решить проблему. Поищите на сайте, много раз обсуждалось его применение.

Чтобы обновить принудительно график надо воспользоваться : PostMessageA(hwnd,WM_COMMAND,33324,0);

 
Talex >>:

Посмотрите стандартный скрипт Period_Converter.mq4, мне кажется он поможет решить проблему. Поищите на сайте, много раз обсуждалось его применение.

Чтобы обновить принудительно график надо воспользоваться : PostMessageA(hwnd,WM_COMMAND,33324,0);

Проблема не в этом. Попробую объяснить понятнее:

сейчас подгружаю всю историю тем, что по F2 добавляю РУКАМИ один бар 1999-го года. После чего делаю Menu-Charts-Refresh (или ваш PosMessage). Как разультат, сразу вся история по инструменту закачивается (около 65000 баров - 1 Mb). После этого опять же через F2 удаляю добавленный бар.

Решил автоматизировать добавление и удаление подобного бара.

Например, открыт график EURUSD M1. Через FileOpenHistory записываю вот так тот самый бар:

void start()
{
  string FileName;
  int handle;
  
  FileName = Symbol() + Period() + ".hst"; 

  handle = FileOpenHistory(FileName, FILE_BIN|FILE_READ|FILE_WRITE);
  FileSeek(handle, 148, SEEK_SET);

  FileWriteInteger(handle, 0);
  
  FileClose(handle);

  return;
}

HST-файл обновляется при этом точно. Но график после Refresh - нет. Терминал всего один раз считывает данные из HST-файла - когда первый раз открывается нужный график. Далее HST-файл никак не участвует в формировании данных. И если, например, аварийно завершить работу терминала, то HST-файл останется со старыми данными.

Так вот вопрос, как заставить обновить данные графика из его HST-файла? Или перефразировав - как добавить (удалить) на online-графике бар?

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

 

Если работа с файлом, тогда может это поюзать:

void FileFlush( int handle)
Сброс на диск всех данных, оставшихся в файловом буфере ввода-вывода.
Замечания: функцию FileFlush() необходимо вызывать между операциями чтения из файла и записи в файл.
При закрытии файла данные сбрасываются на диск автоматически, поэтому нет необходимости вызывать функцию FileFlush() перед вызовом функции FileClose().
 

mql4com писал(а) >>

....HST-файл обновляется при этом точно. Но график после Refresh - нет....


Может быть попробовать клавишу HOME.

 

Раньше для закачки истории использовал "нажатие" клавишы HOME. Но, как оказалось, вышеприведенный (ручной) метод закачки оказался быстрее в разы. Если бы можно было автоматом править бары у открытого графика, то время на закачку истори ограничивал бы только канал связи.

А в более общем случае иногда возникает необходимость иметь возможность подправить (добавить) бары в online-график.

Причина обращения: