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

 

Сегодня ночью решил перевести с английского страницу -

"Сайт использует cookie-файлы. Узнайте больше о нашей политике по использованию cookie-файлов."

Забил ссылку в Яндекс переводчик, прочел перевод. При заходе на сайт MQL5 получил следующее:

Как здесь правильно переводить страницы с других языков, что бы не получить подобное? 
 
Vladimir M.:

Сегодня ночью решил перевести с английского страницу -

"Сайт использует cookie-файлы. Узнайте больше о нашей политике по использованию cookie-файлов."

Забил ссылку в Яндекс переводчик, прочел перевод. При заходе на сайт MQL5 получил следующее:

Как здесь правильно переводить страницы с других языков, что бы не получить подобное? 

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

 

Друзья, взываю к вашему опыту и прошу направить  к верному решению.

Есть советник, который с определённой периодичностью (раз в несколько минут) выгружает данные в файл, запускает внешнюю программу и читает данные из файла . Весь цикл выполняется за ~600 милисекунд.

Как сделать при тестировании стратегии так, чтобы программа дожидалась завершения внешней программы (т.е. в это время должен приостанавливаться ценовой поток, ну или в идеале пропускать тики в течении 600 милисекунд)?

Иначе сейчас за время выполнения внешней программы при тестировании стратегии пролетает несколько дней тиков :-(. В визуальном тестере советник работает. Однако для тестирования стратегии на нескольких годах истории потребуется неимоверно много времени.

 
fxsaber:

Что-то совсем перестал понимать. Вот код

Почему-то ругается на передачу указателя по ссылке. При этом функция f спокойно по ссылке принимает указатель.


Результат

Оператор с int-ом вызвался без проблем, а оператор с указателем - нет.

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

Особенно критично это для массива указателей, так как их по другому и не передашь, кроме как по ссылке:

class A
{
 public: 
  A* operator+(const A*const& array[]) { return NULL; }
};

Так что я по-прежнему сижу на 1554 билде.

 
romachandr:

Ну как топорный вариант (не значит, что плохой):

Эксперт:

1. вызывается файл-сценарий командной оболочки

2. ожидается появления файла, сигнализирующего о завершении внешних действий

3. удаление сигнального файла


Сценрий командной оболочки:

1. запуск внешней программы

2. создание сигнального файл

зы: ссылка вставилась автоматом, она вообще не о том.

зыы: кстати, как запускается внешняя программа? Если через какой-нибудь ПроцесКриэйт() или ШелЭкзекют(), то можно полученный хендл отдать в WaitForSingleObject(), но это пляски с  декларированием типов winapi.

 
pavlick_:

Ну как топорный вариант (не значит, что плохой):

Эксперт:

1. вызывается файл-сценарий командной оболочки

2. ожидается появления файла, сигнализирующего о завершении внешних действий

3. удаление сигнального файла


Сценрий командной оболочки:

1. запуск внешней программы

2. создание сигнального файл

зы: ссылка вставилась автоматом, она вообще не о том.

зыы: кстати, как запускается внешняя программа? Если через какой-нибудь ПроцесКриэйт() или ШелЭкзекют(), то можно полученный хендл отдать в WaitForSingleObject(), но это пляски с  декларированием типов winapi.

Внешняя программа запускается с помощью ShellExecuteW().

На выходе выполнения программы генерируется файл. По сути он и может быть сигнальным.

Но я не понимаю, как в это время приостанавливать тестер?

С winapi практически не знаком. Если это реально поможет, готов углубиться.

 
romachandr:

Внешняя программа запускается с помощью ShellExecuteW().

На выходе выполнения программы генерируется файл. По сути он и может быть сигнальным.

Но я не понимаю, как в это время приостанавливать тестер?

С winapi практически не знаком. Если это реально поможет, готов углубиться.

В winapi имеется следующий механизм:

объекты, которые описываются HANDLE'ом возвращаемым при создании (потоки, процессы, мьютексы, ...) имеют сигнальный флаг. Если говорить о процессе, то он установит его после своего завершения. WaitForSingleObject() останавливает выполнение текущего потока (вашего эксперта) до того момента, когда флаг будет установлен, т.е. из WaitForSingleObject() эксперт выйдет после завершения внешней программы.

ShellExecuteW() возвращает не HANDLE, а HINSTANCE, не уверен что он сгодится для Вэйт..() функции, но стоит попробовать. Если не получится, то нужно использовать ShellExecuteEx, например (но там нетривиальные аргументы передаются внутрь).

http://fkn.ktu10.com/?q=node/633

https://msdn.microsoft.com/en-us/library/windows/desktop/ms687032(v=vs.85).aspx

 
pavlick_:

В winapi имеется следующий механизм:

объекты, которые описываются HANDLE'ом возвращаемым при создании (потоки, процессы, мьютексы, ...) имеют сигнальный флаг. Если говорить о процессе, то он установит его после своего завершения. WaitForSingleObject() останавливает выполнение текущего потока (вашего эксперта) до того момента, когда флаг будет установлен, т.е. из WaitForSingleObject() эксперт выйдет после завершения внешней программы.

ShellExecuteW() возвращает не HANDLE, а HINSTANCE, не уверен что он сгодится для Вэйт..() функции, но стоит попробовать. Если не получится, то нужно использовать ShellExecuteEx, например (но там нетривиальные аргументы передаются внутрь).

http://fkn.ktu10.com/?q=node/633

https://msdn.microsoft.com/en-us/library/windows/desktop/ms687032(v=vs.85).aspx

Благодарю за совет!

Пойду разбираться

 
romachandr:

Но я не понимаю, как в это время приостанавливать тестер?

#import "Kernel32.dll"
 void Sleep(int milliseconds);
#import


void OnTick()
{
  while(! Condition()) Kernel32::Sleep(10);
}
 
чтож так сложно-то? следить за файлом результата + родной Sleep решают проблему.
Причина обращения: