Столкнулся с забавным явлением: у меня робот торгует, ориентируясь только на LAST, а в контекстном меню я пришпилил две кнопки "купить" и "продать" (для ручной торговли через скрипт), и там я повесил уже не LAST, а BID и OFFER (чтобы сделка исполнялась почти мгновенно, но не по рыночной цене). Всё бы хорошо, но сегодня я вдруг увидел там нули: LAST показывает нормальную цену последней сделки (впрочем, она её показывает даже при работе без Инета), а BID и OFFER обнулились. Начал разбираться - оказалось, что нули она показывает не для всех тикеров, а только для тех, по которым торги в данный момент не ведутся (вечерняя сессия на Мосбирже, когда после 19:00 торгуются только "голубые фишки"). Я не раз нарывался на диагностику "Торги по этому финансовому инструменту сейчас не ведутся" когда я или робот хотели что-то купить/продать "не вовремя". А теперь - вот он, индикатор: при подаче заявки буду проверять на 0 эти параметры и не торговать "чем попало". Не знаю, кто и как это делает (если делает), но этот индикатор мне кажется самым удобным. Рекомендую!
Не проще ли пользоваться предназначенными для определения состояния сессии параметрами? STATUS STRING Статус инструмента
TRADINGSTATUS STRING Состояние сессии Но есть такая проблема, что таблица текущих торгов очень тормозная и могут быть задержки
Я лично для индикации сессии сравниваю время последней свечи инструмента с локальным временем скорректированным под нужный таймфрейм Для малых таймфреймов отлично подходит.
BlaZed, Не проще. Оккам запрещает: ведь BID и OFFER по-любому нужны. К тому же, о тормозах здесь и речи быть не может - это же фактически две соседние цены в стакане. доступные даже без наличия самого стакана. Я в меню обновляю эти цены раз в 150 мс - куда уж чаще? Ну, теперь ещё буду читать перед отправкой заявки - по затратам ресурсов это не стоящие внимания копейки. Свечи же (у меня они минимум 15-секундные, у Вас, я полагаю, не меньше) намного тормознутее.
Свечи могут не поступать. Есть такая ошибка (особенность) у серверной части брокера - последняя цена обновляется, а свечи нет. При этом торговая сессия идет. Смотришь на график, не двигается, а цена последней сделки меняется.
Данные стакана, тоже могут не поступать. При этом еще есть планка, когда нет заявок. Есть предторговый аукцион, когда стакан заполнен, а сессия не идет. Для срочного рынка есть клиринг, когда сессия не идет, а заявки какое-то время еще есть в стакане.
Владимир написал:
Я в меню обновляю эти цены раз в 150 мс - куда уж чаще?
Основной мой посыл сообщения был о том, что таблица текущих торгов крайне тормозная, обновляется не чаще чем раз в 1 секунду. Что при высоколиквидных рынках весьма неприятно.
Что-то предыдущее сообщение криво отправилось, а правки нет...
Цитата
Владимир написал: BlaZed, Не проще. Оккам запрещает: ведь BID и OFFER по-любому нужны. К тому же, о тормозах здесь и речи быть не может - это же фактически две соседние цены в стакане. доступные даже без наличия самого стакана. Я в меню обновляю эти цены раз в 150 мс - куда уж чаще? Ну, теперь ещё буду читать перед отправкой заявки - по затратам ресурсов это не стоящие внимания копейки. Свечи же (у меня они минимум 15-секундные, у Вас, я полагаю, не меньше) намного тормознутее.
Основной мой посыл сообщения был о том, что таблица текущих торгов крайне тормозная, обновляется не чаще чем раз в 1 секунду. Что при высоколиквидных рынках весьма неприятно.
Владимир написал: Игорь М, Непохоже. Там у меня вообще стоит 10 секунд, а данные обновляются НАМНОГО чаще!
Именно вышеуказанная настройка мешала.
Вот простой код проверки частоты обновления параметров ТТТ по инструменту. Проверьте у себя при разных значениях.
Код
class_code="SPBFUT"
sec_code="SiH1"
function main()
clock1=0
is_run=true
while is_run do
sleep(100)
end
end
function OnStop()
is_run=false
return 100
end
function OnParam(c_code,s_code)
if(c_code==class_code)and(s_code==sec_code)then
clock2=os.clock()
message("delta="..clock2-clock1.."sec")
clock1=clock2
end
end
Владимир написал: Игорь М, Непохоже. Там у меня вообще стоит 10 секунд, а данные обновляются НАМНОГО чаще!
Эти секунды берутся, если установлен флаг "Запрашивать данные раз в". Если не установлен, то происходит постоянное получение данных, с учетом минимальной допустимой дискретности.
BlaZed, Да мне, в общем, пофиг - меня устраивает и раз в секунду, и даже реже (сейчас малый обработчик стоит на полутора секундах, большой, как и раньше, на 15. Задержку в 150 мс я поставил не для того, чтобы данные почаще обновлялись, а для того, чтобы на мышку побыстрее реагировало.