CreateDataSource в цикле по большому списку

Страницы: 1
RSS
CreateDataSource в цикле по большому списку, Анализ свечей по большому количеству инструментов
 
Вытащил запросом GetClassSecurities все акции SPB (около 1400 шт.).
Теперь хочу по ним пройтись и по каждому инструменту посмотреть свечи, т.е. CreateDataSource в цикле по большому списку.
Это допустимо с т.з. нагрузки на quik?
Надо учитывать какие-нибудь тонкости?
 
Dr Wed, Все?! У меня не все, но их больше, даже если отбросить евровые. Похоже, глючит этот GetClassSecurities.

По поводу свечей - без понятия: лично я их считаю сам, от 15-секундных до часовых, и это никаких проблем с "нагрузкой на quik" не создаёт, так что, тем более, не должно создавать и работа со стандартными - там ведь минимум минутные, а то и реже...
 
Цитата
Dr Wed написал:
Это допустимо с т.з. нагрузки на quik?Надо учитывать какие-нибудь тонкости?
Если собираетесь заказывать свечки, вполне допустимо. А вот на тики подписываться в цикле не стоит (не дождетесь завершения цикла в разумные сроки).
 
https://forum.quik.ru/messages/forum10/message53483/topic6131/#message53483
 
Никогда раньше не интересовался этим вопросом, поскольку свечи считаю сам, но тема популярная - решил посмотреть и опупел. Всё как-то жутко сложно и непонятно. Во-первых, почему CreateDataSource? Ведь алгоритмически задача проста до безобразия: получить с сервера некий массив данных, причём исторических данных! Что здесь вообще можно "Create"? Во-вторых, какого хрена она в разделе "Функции для работы с графиками"? При чём тут вообще графики? У меня никаких графиков нет, не было и не будет, а со свечами я активно работаю. В-третьих, данные нужно получать фактически по одному интервалу (минутному), поскольку все остальные интервалы (даже полюбившиеся кому-то нестандартные) при необходимости прекрасно считаются из него прямо на клиенте (тики здесь явно инородное тело и должны быть выброшены нафиг). В-четвёртых, объём этих данных для одного тикера даже при круглосуточной работе: 60 минут * 24 часа * 30 дней * 12 месяцев * sizeof одной свечи = курам на смех даже за год, при этом более-менее востребованным является интервал размером в сутки, а время можно даже не указывать: порядковый номер свечи в массиве однозначно его идентифицирует. В-пятых, какого хрена здесь делает SetUpdateCallback?! Какая может быть "обработка изменившихся свечек"?! Повторяю: это ИСТОРИЧЕСКИЕ данные! Всё, поезд ушёл, ничего уже не меняется! Какой-то тихий ужас, господа! Неужели вся эта кухня вообще хоть как-то работает? :shock:  
 
Цитата
Владимир написал:
Во-первых, почему CreateDataSource? Ведь алгоритмически задача проста до безобразия: получить с сервера некий массив данных, причём исторических данных! Что здесь вообще можно "Create"?
Тут немного сложнее реализовано, CreateDataSource создает источник данных (обычно обзываемый в примерах ds) в который сначала загружаются исторические данные, после чего постоянно добавляются актуальные (если запросить обновления через SetEmptyCallback, хотя по наблюдениям они прилетают даже без этого запроса)
Цитата
Владимир написал:
Во-вторых, какого хрена она в разделе "Функции для работы с графиками"? При чём тут вообще графики? У меня никаких графиков нет, не было и не будет, а со свечами я активно работаю.
А что это еще как ни данные для построения свеч из которых можно строить график?
Цитата
Владимир написал:
В-третьих, данные нужно получать фактически по одному интервалу (минутному), поскольку все остальные интервалы (даже полюбившиеся кому-то нестандартные) при необходимости прекрасно считаются из него прямо на клиенте (тики здесь явно инородное тело и должны быть выброшены нафиг).
Конечно можно, вот только зачем например мне получать минуты и высчитывать часы, если я могу сразу получить часы, а минуты меня не интересуют? Я могу и сам все высчитать, только зачем это делать, если мне дают сразу то, что мне надо.
Цитата
Владимир написал:
В-четвёртых, объём этих данных для одного тикера даже при круглосуточной работе: 60 минут * 24 часа * 30 дней * 12 месяцев * sizeof одной свечи = курам на смех даже за год, при этом более-менее востребованным является интервал размером в сутки, а время можно даже не указывать: порядковый номер свечи в массиве однозначно его идентифицирует.
А как быть на низколиквидных инструментах, когда, ну скажем сутки, не было сделок? Слетит весь порядок же. Да тоже чисто для удобства, чтобы не делать лишних вычислений.
Цитата
Владимир написал:
В-пятых, какого хрена здесь делает SetUpdateCallback?! Какая может быть "обработка изменившихся свечек"?! Повторяю: это ИСТОРИЧЕСКИЕ данные! Всё, поезд ушёл, ничего уже не меняется!
Потому что созданный источник данных это НЕ исторические данные, в него прилетают и актуальные данные. Вот коллбек на них и срабатывает.
Цитата
Владимир написал:
Какой-то тихий ужас, господа! Неужели вся эта кухня вообще хоть как-то работает?  
Не без косяков, конечно, но работает.
 
BlaZed, Ну и замечательно! Квик загружает исторические данные, скрипт их читает, если хочет по прерыванию - заказывает коллбек на событие "пришла новая свеча". В любом случае, данные с сервера получает Квик,а не юзер - в том виде, в каком удобнее именно ему.

График-то построить можно, но это РАЗНЫЕ процессы - зачем же их смешивать? Мне вот графики нафиг не нужны, а свечи на что-то и пригодились бы.

Да, конечно, можно и сразу получить часы - я имел в виду, что даже для минутных свечей при нынешних каналах связи объёмы никакие. И потом: откуда Квику знать, что нужно Вам? Он вполне может отдавать Вам то, что нужно Вам, а получать от сервера то, что нужно ему. Может, ему выгоднее получить один массив на все таймфреймы и формировать данные для юзера "на лету"? А нам какое дело, как именно он готовит для нас данные? Это проблемы Квика, а не наши. Кстати, и на низколиквидных инструментах свечи могут идти обычным порядком - мои так и считаются: вот включил я комп в 7 часов, так у меня все рублёвые и евровые активы и большинство долларовых не торгуются, а свечки тикают - просто у них цена не меняется. Я именно по ним и определяю, торгуется данный инструмент в данный момент или нет.

Так ведь актуальные данные это ТОЖЕ исторические данные! Прилетать новые свечки могут, изменяться - нет.
 
А где еще можно взять свечи, кроме как через CreateDataSource?
Научите, с удовольствием попробую.
 
Цитата
Владимир написал:
BlaZed, Ну и замечательно! Квик загружает исторические данные, скрипт их читает, если хочет по прерыванию - заказывает коллбек на событие "пришла новая свеча". В любом случае, данные с сервера получает Квик,а не юзер - в том виде, в каком удобнее именно ему.
Так и есть, только одно замечание, колбек не на событие "пришла новая свеча", а на событие "поступили новые данные" в источник.
Цитата
Владимир написал:
График-то построить можно, но это РАЗНЫЕ процессы - зачем же их смешивать? Мне вот графики нафиг не нужны, а свечи на что-то и пригодились бы.
Опять согласен с вами по сути данные функции и есть работа со свечами. Хотя назвали их "работа с графиками", но вот не пофиг ли.
Цитата
Владимир написал:
Да, конечно, можно и сразу получить часы - я имел в виду, что даже для минутных свечей при нынешних каналах связи объёмы никакие. И потом: откуда Квику знать, что нужно Вам? Он вполне может отдавать Вам то, что нужно Вам, а получать от сервера то, что нужно ему. Может, ему выгоднее получить один массив на все таймфреймы и формировать данные для юзера "на лету"? А нам какое дело, как именно он готовит для нас данные? Это проблемы Квика, а не наши.
Тут я думаю логика в том, что проще один раз посчитать свечи на сервере и отдать пользователю сразу, то что он запросил, чем на каждой рабочей станции, будут производиться такие вычисления.
Да и объемах данных разных таймфреймов различаются во много раз (например минутные от дневных в 60*24=1440 минус нерабочее время), и если учесть, что пользователей на сервере брокера могут быть многие тысячи, то все же это экономия трафика, а следовательно и скорость реакции увеличиться.
Но это всего лишь мои предположения.
Цитата
Владимир написал:
Кстати, и на низколиквидных инструментах свечи могут идти обычным порядком - мои так и считаются: вот включил я комп в 7 часов, так у меня все рублёвые и евровые активы и большинство долларовых не торгуются, а свечки тикают - просто у них цена не меняется. Я именно по ним и определяю, торгуется данный инструмент в данный момент или нет.
Значит для ваших задач такое решение подходит, но может не подходить другим.
Свечи в классическом понимании по сделкам формируются, и кому-то это может быть важным для стратегии.
Цитата
Владимир написал:
Так ведь актуальные данные это ТОЖЕ исторические данные! Прилетать новые свечки могут, изменяться - нет.
Тут есть маленький ньюанс, актуальные данные станут историческими только после закрытия свечи. А последняя свеча всегда меняется, если еще не закрыта и прилетает сделка.
 
BlaZed, А какие же ещё могут поступать новые данные в источник, если не свечи? :smile:

Ещё как не пофиг! Мне и в страшном сне не могло присниться искать свечи в функциях для графиков! Тем более, что понятия "скрипт" и "индикатор" здесь с какого-то бодуна разные - тоже не понимаю, какая разница: и то, и другое есть программируемый код, интерпретируемый исполнительным механизмом. И свечи нужны именно моему скрипту - индикаторов у меня нет и не будет.

А у меня логика другая: мало ли, что юзеру в голову придёт? Может, он по десятку таймфреймов захочет свечи получить. И что, мне на каждый чих у сервера данные заказывать? Получил один раз на все случаи жизни - и пусть канает! Тем более, что я при этом могу обеспечить его свечами по всем его "нестандартным интервалам". А вычисления тут вообще ничего не стоят - куда сложнее с сервером связываться, память под каждый таймфрейм выделять/освобождать...

Не понимаю, как такое решение может не подходить другим. если сделок нет - объём нулевой, а все эти H/L/O/C равны цене последней реальной сделки. Абсолютна вся информация здесь имеется для любой стратегии.

ЧАВО???!!! Они что, НЕЗАКРЫТЫЕ свечи присылают?! Совсем шизанулись... Я, как уже говорил, считаю свечи сам, так у меня только три свечи на каждый таймфрейм: две рабочие и одна накапливаемая. И только когда она накопится, последняя свеча становится предпоследней, предпоследняя выбрасывается (меня не интересуют "преданья старины глубокой"), а накапливаемая обнуляется. И пока она снова не накопится и не станет последней, её данные не используются вообще никак. Чего и всем остальным желаю. Это ж ДОДУМАТЬСЯ надо! Я в ауте! :shock:  
 
Цитата
Владимир написал:
BlaZed, А какие же ещё могут поступать новые данные в источник, если не свечи? ::
Так данные по свечам и поступают, кто ж спорит. Только вы почему-то пишете "пришла новая свеча", а же говорю, что "поступили новые данные" по свечам.
На мой взгляд разница существенная.
Цитата
Владимир написал:
ЧАВО???!!! Они что, НЕЗАКРЫТЫЕ свечи присылают?! Совсем шизанулись... Я, как уже говорил, считаю свечи сам, так у меня только три свечи на каждый таймфрейм: две рабочие и одна накапливаемая. И только когда она накопится, последняя свеча становится предпоследней, предпоследняя выбрасывается (меня не интересуют "преданья старины глубокой"), а накапливаемая обнуляется. И пока она снова не накопится и не станет последней, её данные не используются вообще никак. Чего и всем остальным желаю. Это ж ДОДУМАТЬСЯ надо! Я в ауте!  
Владимир, мы говорим об одном и том же, только терминология разная.
Под незакрытой свечой я подразумеваю то, что вы называете накапливаемой, а под закрытой, то что для вас последняя/предпоследняя и более ранние.

PS: а про логику работы всего этого спорить просто не хочу, это все же вопросы к разработчикам, а менять они все равно ничего не будут.
 
BlaZed, А как я ещё должен писать? Мне и в голову не приходило, что они могут давать незакрытые свечи! А так всё просто: свеча созрела, пришла - прерывание.

Нет, мы и говорим о разном: у меня незакрытая (накапливаемая) свеча существует лишь потому, что я сам её считаю, как сервер. А вот отдаю её "клиенту" лишь тогда, когда она будет закрыта. Фактически в прерывании и отдаю (15-секундном). А накапливается она в полуторасекундном, то есть обработчик свечей и знать не знает о её существовании: раз он вообще получил управления, значит, пришла новая свеча.

А зачем тогда этот форум, если "разработчики менять все равно ничего не будут"?  :smile: Это же бесплатный набор тестирующих их софт, причём крайне заинтересованных в его качестве!
 
Цитата
Владимир написал:
BlaZed, А как я ещё должен писать? Мне и в голову не приходило, что они могут давать незакрытые свечи! А так всё просто: свеча созрела, пришла - прерывание.
Ну если у нас все еще разговор про SetUpdateCallback (мы же с этого начали разговор), то данный коллбек срабатывает именно при получении новых данных по свечам, а не при созревании свечи.
Цитата
Владимир написал:
Нет, мы и говорим о разном: у меня незакрытая (накапливаемая) свеча существует лишь потому, что я сам её считаю, как сервер. А вот отдаю её "клиенту" лишь тогда, когда она будет закрыта. Фактически в прерывании и отдаю (15-секундном). А накапливается она в полуторасекундном, то есть обработчик свечей и знать не знает о её существовании: раз он вообще получил управления, значит, пришла новая свеча.
Ну так и через источник данных ничего не мешает такую же незакрытую(накапливаемую) свечу хоть отдавать в свой обработчик, хоть подождать пока закроется, запрограммировать можно что угодно.
Тут кроме того, что вы свечи самостоятельно рассчитываете разницы как бы и нету.
Цитата
Владимир написал:
А зачем тогда этот форум, если "разработчики менять все равно ничего не будут"?   Это же бесплатный набор тестирующих их софт, причём крайне заинтересованных в его качестве!
Смотрите, вот вам, как я понял, не нравится логика работы данных функций, а меня, например, она устраивает.
Но дело в том что существующая логика, хоть и не без косяков, но она работает.
Тут люди исправления проблем по несколько лет ждут, так что даже если вы все распишите как должно работать, и предложение признают целесообразным, то по приоритету задача на разработку явно где-нибудь в конце очереди затеряется.
 
BlaZed, Вот и плохо, что "не при созревании". Надо бы дать пожелание разработчикам на доработку софта.

Я понимаю, что "запрограммировать можно что угодно" но лучше бы это сделать в самом Квике. А я самостоятельно свечи рассчитываю не от хорошей жизни. В смысле, лёгкие (до часовых) выгоднее считать самому, а вот более тяжёлые (от часа и выше) я бы не прочь получать от сервера. А то мало ли что - связь прервётся, электричество отрубят или просто комп выключен. А для более "стратегического" планирования эти  свечи вовсе не помешали бы. Но софт... меня ведь и там интересуют только две последние свечи, и пилювал я на все графики, вместе взятые!

Да я уже когда-то заводил ветку с предложениями. Потом осмотрелся немного и перестал. :smile:  
 
Dr Wed, я инструкцию проштудировал, вроде как других способов нет. Единственная альтернатива которую я вижу это брать данные из открытого графика внутри скрипта индикатора, который к этому графику подцеплен.
 
Владимир, В самостоятельном расчете свеч я вижу только один существенный плюс, это построение свеч любого таймфрейма.
Думаю степени двоек должны интересный результат давать. Но я ленивый, хотя может когда и созрею реализовать..

Как по вашему, какие еще плюсы имеются по сравнению со стандартным способом получения свеч через CreateDataSource?
 
Цитата
Владимир написал:
BlaZed, Вот и плохо, что "не при созревании". Надо бы дать пожелание разработчикам на доработку софта.
Кстати хорошая идея, мне тоже по стратегии приходится ловить момент появления новой свечи, а так бы коллбек словил и готово.
 
Цитата
Артем написал:
Dr Wed, я инструкцию проштудировал, вроде как других способов нет. Единственная альтернатива которую я вижу это брать данные из открытого графика внутри скрипта индикатора, который к этому графику подцеплен.
Так вот тут же Владимир, он считает свечи самостоятельно. Спросите как именно лучше считать, если интересно.

Я например сходу вижу пару вариантов.
1) Из таблицы обезличенных сделок
2) Из таблицы текущих торгов параметр LAST
 
BlaZed, Именно "степени двоек"! Там просто НЕМЕРЯНОЕ количество информации для принятия решений! Представьте: имеем по две свечи, зато сразу по 16 таймфреймам (к меня сейчас по 9). Из них: две месячные, две недельные и далее со всеми остановками. То есть мы видим движение курса сразу на всех уровнях, да ещё и имеем возможность оценить, как каждый таймфрейм ведёт себя относительно родительского (стоит, растёт или падает) и как ведёт себя по отношению к нему дочерний таймфрейм! Ну разве может какой-то сраный график, да ещё и по заранее выбранному таймфрейму, дать столько информации? Да ни в жисть!

Да, я как раз считаю из ТТТ по LAST.
 
BlaZed, я имел ввиду все имеющиеся данные а не только текущие. А так можно отслеживать OnParam, можно GetParam в цикле использовать, можно вообще по данным стакана всё это определять.
Страницы: 1
Читают тему
Наверх