Изменение лота последующего ордера при условии ... - страница 2

 
Vlad143:

- странно. Это как раз я допустил в этом месте ошибку в русском языке, никого не поправлял. Выделил слово "ищете", чтобы подчеркнуть, что есть разница между тем, чтобы просто выбрать последний по номеру ордер, и между работой по поиску, которая может оказаться большой;

- время как свойство ордера в истории возвращают всего три функции. Вот куски из справки: "datetime  OrderOpenTime();", "datetime  OrderCloseTime();" "datetime  OrderExpiration();" "Тип datetime предназначен для хранения даты и времени в виде количества секунд, прошедших с 01 января 1970 года.". Миллисекунды не встречаются.

- правильно ли я Вас понял, что до начала обработки события в OnTick() история, с которой работает советник, всегда уже актуализирована? Или приходит тик, генерируется событие  NewTick, запускается OnTick(), а вслед за этим начинает обновляться история?

Что мешает распечатать время закрытия всех ваших ордеров из истории и посмотреть время именно в милисекундах? (мне пока некогда этим заняться чтобы проверить). Точно знаю, что с недавнего времени такое время в терминале есть. И в структуре MqlTick поле с милисекундным временем тоже есть.

Насчёт того как приходит история, и когда именно она уже актаулизирована я тоже не проверял, и не углублялся. Но в терминале окружение обновляется с приходом тика или по RefreshRates()

 
artmedia70:

Что мешает распечатать время закрытия всех ваших ордеров из истории и посмотреть время именно в милисекундах? (мне пока некогда этим заняться чтобы проверить). Точно знаю, что с недавнего времени такое время в терминале есть. И в структуре MqlTick поле с милисекундным временем тоже есть.

Насчёт того как приходит история, и когда именно она уже актаулизирована я тоже не проверял, и не углублялся. Но в терминале окружение обновляется с приходом тика или по RefreshRates()

Согласно справке, взять "из истории и посмотреть время именно в милисекундах" мешает тип возвращаемого функцией OrderCloseTime() значения, в datetime содержатся лишь секунды. Также и с MqlTick, вот кусок из справки:

struct MqlTick

  {

   datetime     time;          // Время последнего обновления цен

Если мы рассматриваем два события, у каждого из которых есть свой момент наступления, приход тика и обновление списка ордеров (строго говоря, надо говорить о завершении процессов прихода тика и обновления списка), то непонятно, о чем говорит утверждение "окружение обновляется с приходом тика". О том, что они происходят одновременно? Как толковать это утверждение, как одновременность с точностью до скольки-то секунд? Но строки MQL-программ исполняются друг за другом с задержкой (промежутком) значительно меньше микросекунды. Вот меня и интересует, можно ли быть уверенным, что в OnTick мы работаем с обновленными списками ордеров. Или есть вероятность попасть впросак. Может, кто-нибудь проверял, раз уж в справке таких сведений нет? И как быть в скриптах, где не видно событие прихода нового тика...

Читаю справку MQL4 на RefreshRates(): "Осуществляет обновление данных в предопределенных переменных и массивах-таймсериях.". Списки ордеров - ни первое, ни второе. Обновляются ли они по этой команде? Зато внесена ясность в экземпляры данных в памяти, в MT4 теперь, как и в MT5, каждый скрипт или советник имеет личную копию истории счета: "Эксперты и скрипты работают с собственной копией исторических данных". Дорога от изменений истории на сервере до доступности этих изменений для MQL4-программы удлинилась. Сначала обновления копируются в память терминала, затем еще в экземпляры памяти для всех запущенных скриптов и советников.

Дальше: "При каждом следующем запуске эксперта (напомним, что скрипт выполняется однократно и не зависит от приходящих тиков) первоначально созданная копия обновляется. За то время, пока эксперт или скрипт работает, может прийти один или несколько новых тиков, поэтому данные могут устареть.

Речь опять идет лишь о данных по истории счета. По справке получается, если скрипт работает всю торговую неделю, то в истории счета всю эту неделю хранятся данные, имевшие место на открытие недельной сессии. Проверил. Курсы валютных пар и список открытых ордеров обновляются, не дожидаясь повторного запуска скрипта. Открыл и закрыл ордер, работающим непрерывно скриптом через 5 секунд выдал историю счета - закрытая сделка отражена. Чему верить? Или, если скрипт работает в бесконечном цикле с задержкой (ожиданием) Sleep(11), каждое ожидание эквивалентно перезапуску? Так написали бы в справке яснее. Похоже, "скрипт работает" в справке означает, что он занимает процессорное время,  а не отдал его другим, заняв очередь за этим временем. Тогда команда Sleep становится универсальным способом принудительного обновления данных и в скриптах, и в советниках. Так ли это?

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