Нужна ли в тестере опция учёта времени пинга торгового сервера?

 
  • 24% (11)
  • 40% (18)
  • 36% (16)
Всего проголосовало: 45
 
Занимаюсь сейчас доработкой торгового алгоритма, где скорость работы имеет значение. В тестере есть выбор режима тестирования с "Произвольной задержкой". Это моделирует ситуацию с возможными задержками исполнения торговых приказов. Но этого, как мне кажется недостаточно. Ведь кроме отправления непосредственно самих торговых приказов советник связывается в процессе отработки своего алгоритма с сервером для получения актуальной информации. Если советник делает много подобных обращений, то при большом времени пинга может набежать весьма существенная задержка в работе алгоритма ещё на стадии принятия решения об отправке торгового запроса.
На мой взгляд, было бы хорошо, если бы при тестировании советника можно было задать в меню тестера значение пинга конкретного торгового сервера, чтобы при моделировании торговли тестер учитывал этот параметр.
Какая от этого может быть польза? Для разработчика - возможность проверить работу своего алгоритма в условиях ещё чуть более приближённых к реальным. Для покупателя(пользователя) - возможность ещё на стадии тестирования демки определить, насколько потенциальная покупка пригодна для работы с его конкретным брокером, возможно простимулирует принять решение о пользовании VPS...
Сейчас я для себя эту задачу решаю следующим образом - ввёл в настройках советника опцию "PING", а в коде при отработке каждого обращения к торговому серверу вставил Sleep(PING);. Не могу точно сказать (не профи в этом), насколько это реалистичная имитация, но пока пользуюсь...
Выскажитесь по этому вопросу, кто что думает.
 
Vladimir Suschenko:
Занимаюсь сейчас доработкой торгового алгоритма, где скорость работы имеет значение. В тестере есть выбор режима тестирования с "Произвольной задержкой". Это моделирует ситуацию с возможными задержками исполнения торговых приказов. Но этого, как мне кажется недостаточно. Ведь кроме отправления непосредственно самих торговых приказов советник связывается в процессе отработки своего алгоритма с сервером для получения актуальной информации. Если советник делает много подобных обращений, то при большом времени пинга может набежать весьма существенная задержка в работе алгоритма ещё на стадии принятия решения об отправке торгового запроса.
На мой взгляд, было бы хорошо, если бы при тестировании советника можно было задать в меню тестера значение пинга конкретного торгового сервера, чтобы при моделировании торговли тестер учитывал этот параметр.
Какая от этого может быть польза? Для разработчика - возможность проверить работу своего алгоритма в условиях ещё чуть более приближённых к реальным. Для покупателя(пользователя) - возможность ещё на стадии тестирования демки определить, насколько потенциальная покупка пригодна для работы с его конкретным брокером, возможно простимулирует принять решение о пользовании VPS...
Сейчас я для себя эту задачу решаю следующим образом - ввёл в настройках советника опцию "PING", а в коде при отработке каждого обращения к торговому серверу вставил Sleep(PING);. Не могу точно сказать (не профи в этом), насколько это реалистичная имитация, но пока пользуюсь...
Выскажитесь по этому вопросу, кто что думает.
Владимир, назовите измеренные цифры и как вы их меряли плз.
 
Alexey Volchanskiy:
Владимир, назовите измеренные цифры и как вы их меряли плз.
И где находится сервак, где вы торгуете, на форексе или бирже7
 
Alexey Volchanskiy:
Владимир, назовите измеренные цифры и как вы их меряли плз.
При выборе торгового сервера для открытия счёта или подключения существующего показывается значение пинга (от ПК к серверу). Выбирая услугу VPS, можно также предварительно узнать, какой пинг от VPS к торговому серверу. Вот этими значениями и пользуюсь. 
Alexey Volchanskiy:
И где находится сервак, где вы торгуете, на форексе или бирже
Форекс. С VPS к торговому серверу пинг порядка 1.5 милисекунды.
 
Alexander Laur:
Команда Sleep() вводит паузу в работу советника. То есть поток котировок тоже останавливается! Ваш метод ничего не дает. А в реальной торговли за время пинга происходит изменение цены, т.е. котировки меняются. Если хотите моделировать работу связи с сервером, то применяйте не Sleep(), а исполняйте приказ через 3, 4, 5, 6 и т.д. тиков! Так будете получать реальные проскальзывания.

Проскальзывания в тестере как раз моделируются, а  я хочу видеть работоспособность/непригодность ТС в зависимости от пинга. Для этого использую конструкцию типа:

bool IsPosition_EURUSD=PositionSelect("EURUSD");
   Sleep(PING); // Здесь стоит время, которое запрос идёт к серверу и возвращается ответ в терминал
   if(IsPosition_EURUSD==true)
     {
      double lot=PositionGetDouble(POSITION_VOLUME);
      Sleep(PING); // Здесь стоит время, которое запрос идёт к серверу и возвращается ответ в терминал

Если бы Ваше утверждение, что во время паузы при тестировании останавливался поток котировок было верным, тогда логично было бы получить те же результаты, но за чуть более долгое время самого процесса тестирования, так? На самом же деле при увеличении в настройках значения "PING", я наблюдаю в процессе тестирования изменение получаемых результатов. То есть высказывание: "Ваш метод ничего не дает" - неверно, что-то таки даёт, правда остаётся при этом вопрос - то ли даёт, что ставилось в задачу?

 
Vladimir Suschenko:
Сейчас я для себя эту задачу решаю следующим образом - ввёл в настройках советника опцию "PING", а в коде при отработке каждого обращения к торговому серверу вставил Sleep(PING);. Не могу точно сказать (не профи в этом), насколько это реалистичная имитация, но пока пользуюсь...
Выскажитесь по этому вопросу, кто что думает.

Вы неправильно понимаете устройство доставки данных от брокера в терминал.

Функций, отправляющих запрос на сервер, по пальцам пересчитать (кроме торговых). Остальные просто отдают вам то, что уже знает терминал. А он, в свою очередь, получает эти данные независимо от советника.

Поэтому вы моделируете, скорее, работу на очень медленном железе, чем с плохим каналом связи.

 
Andrey Khatimlianskii:

Вы неправильно понимаете устройство доставки данных от брокера в терминал.

Функций, отправляющих запрос на сервер, по пальцам пересчитать (кроме торговых). Остальные просто отдают вам то, что уже знает терминал. А он, в свою очередь, получает эти данные независимо от советника.

Поэтому вы моделируете, скорее, работу на очень медленном железе, чем с плохим каналом связи.

Возможно (в смысле скорей всего так и есть), я говорил, что не профи в этом. Тогда вытекает логичный вопрос - какие функции и где глянуть их перечень?

 
Vladimir Suschenko:

Возможно (в смысле скорей всего так и есть), я говорил, что не профи в этом. Тогда вытекает логичный вопрос - какие функции и где глянуть их перечень?

Я вот сейчас подумал, что, кроме функций, явно обращающихся в мир (SendMail, WebRequest, SendNotification, etc.), и функций работы с тайм-сериями (iClose, iOpen, ..., все индикаторные функции) — и то, косвенно, поскольку они только инициируют подгрузку данных, на сервер могут обращаться разве что некоторые варианты MarketInfo() и SymbolInfoХХХ(). И то я в этом сильно сомневаюсь — терминал, по идее, данные по всем инструментам из обзора рынка и так держит в актуальном состоянии.

Но какое-то состояние дежавю не покидает. Как буд-то были такие функции, но вспомнить не могу.

Надежнее всего спросить у разработчиков. 

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