Вытащил запросом GetClassSecurities все акции SPB (около 1400 шт.). Теперь хочу по ним пройтись и по каждому инструменту посмотреть свечи, т.е. CreateDataSource в цикле по большому списку. Это допустимо с т.з. нагрузки на quik? Надо учитывать какие-нибудь тонкости?
Dr Wed, Все?! У меня не все, но их больше, даже если отбросить евровые. Похоже, глючит этот GetClassSecurities.
По поводу свечей - без понятия: лично я их считаю сам, от 15-секундных до часовых, и это никаких проблем с "нагрузкой на quik" не создаёт, так что, тем более, не должно создавать и работа со стандартными - там ведь минимум минутные, а то и реже...
Никогда раньше не интересовался этим вопросом, поскольку свечи считаю сам, но тема популярная - решил посмотреть и опупел. Всё как-то жутко сложно и непонятно. Во-первых, почему CreateDataSource? Ведь алгоритмически задача проста до безобразия: получить с сервера некий массив данных, причём исторических данных! Что здесь вообще можно "Create"? Во-вторых, какого хрена она в разделе "Функции для работы с графиками"? При чём тут вообще графики? У меня никаких графиков нет, не было и не будет, а со свечами я активно работаю. В-третьих, данные нужно получать фактически по одному интервалу (минутному), поскольку все остальные интервалы (даже полюбившиеся кому-то нестандартные) при необходимости прекрасно считаются из него прямо на клиенте (тики здесь явно инородное тело и должны быть выброшены нафиг). В-четвёртых, объём этих данных для одного тикера даже при круглосуточной работе: 60 минут * 24 часа * 30 дней * 12 месяцев * sizeof одной свечи = курам на смех даже за год, при этом более-менее востребованным является интервал размером в сутки, а время можно даже не указывать: порядковый номер свечи в массиве однозначно его идентифицирует. В-пятых, какого хрена здесь делает SetUpdateCallback?! Какая может быть "обработка изменившихся свечек"?! Повторяю: это ИСТОРИЧЕСКИЕ данные! Всё, поезд ушёл, ничего уже не меняется! Какой-то тихий ужас, господа! Неужели вся эта кухня вообще хоть как-то работает?
Владимир написал: Во-первых, почему CreateDataSource? Ведь алгоритмически задача проста до безобразия: получить с сервера некий массив данных, причём исторических данных! Что здесь вообще можно "Create"?
Тут немного сложнее реализовано, CreateDataSource создает источник данных (обычно обзываемый в примерах ds) в который сначала загружаются исторические данные, после чего постоянно добавляются актуальные (если запросить обновления через SetEmptyCallback, хотя по наблюдениям они прилетают даже без этого запроса)
Цитата
Владимир написал: Во-вторых, какого хрена она в разделе "Функции для работы с графиками"? При чём тут вообще графики? У меня никаких графиков нет, не было и не будет, а со свечами я активно работаю.
А что это еще как ни данные для построения свеч из которых можно строить график?
Цитата
Владимир написал: В-третьих, данные нужно получать фактически по одному интервалу (минутному), поскольку все остальные интервалы (даже полюбившиеся кому-то нестандартные) при необходимости прекрасно считаются из него прямо на клиенте (тики здесь явно инородное тело и должны быть выброшены нафиг).
Конечно можно, вот только зачем например мне получать минуты и высчитывать часы, если я могу сразу получить часы, а минуты меня не интересуют? Я могу и сам все высчитать, только зачем это делать, если мне дают сразу то, что мне надо.
Цитата
Владимир написал: В-четвёртых, объём этих данных для одного тикера даже при круглосуточной работе: 60 минут * 24 часа * 30 дней * 12 месяцев * sizeof одной свечи = курам на смех даже за год, при этом более-менее востребованным является интервал размером в сутки, а время можно даже не указывать: порядковый номер свечи в массиве однозначно его идентифицирует.
А как быть на низколиквидных инструментах, когда, ну скажем сутки, не было сделок? Слетит весь порядок же. Да тоже чисто для удобства, чтобы не делать лишних вычислений.
Цитата
Владимир написал: В-пятых, какого хрена здесь делает SetUpdateCallback?! Какая может быть "обработка изменившихся свечек"?! Повторяю: это ИСТОРИЧЕСКИЕ данные! Всё, поезд ушёл, ничего уже не меняется!
Потому что созданный источник данных это НЕ исторические данные, в него прилетают и актуальные данные. Вот коллбек на них и срабатывает.
Цитата
Владимир написал: Какой-то тихий ужас, господа! Неужели вся эта кухня вообще хоть как-то работает?
BlaZed, Ну и замечательно! Квик загружает исторические данные, скрипт их читает, если хочет по прерыванию - заказывает коллбек на событие "пришла новая свеча". В любом случае, данные с сервера получает Квик,а не юзер - в том виде, в каком удобнее именно ему.
График-то построить можно, но это РАЗНЫЕ процессы - зачем же их смешивать? Мне вот графики нафиг не нужны, а свечи на что-то и пригодились бы.
Да, конечно, можно и сразу получить часы - я имел в виду, что даже для минутных свечей при нынешних каналах связи объёмы никакие. И потом: откуда Квику знать, что нужно Вам? Он вполне может отдавать Вам то, что нужно Вам, а получать от сервера то, что нужно ему. Может, ему выгоднее получить один массив на все таймфреймы и формировать данные для юзера "на лету"? А нам какое дело, как именно он готовит для нас данные? Это проблемы Квика, а не наши. Кстати, и на низколиквидных инструментах свечи могут идти обычным порядком - мои так и считаются: вот включил я комп в 7 часов, так у меня все рублёвые и евровые активы и большинство долларовых не торгуются, а свечки тикают - просто у них цена не меняется. Я именно по ним и определяю, торгуется данный инструмент в данный момент или нет.
Так ведь актуальные данные это ТОЖЕ исторические данные! Прилетать новые свечки могут, изменяться - нет.
Владимир написал: BlaZed, Ну и замечательно! Квик загружает исторические данные, скрипт их читает, если хочет по прерыванию - заказывает коллбек на событие "пришла новая свеча". В любом случае, данные с сервера получает Квик,а не юзер - в том виде, в каком удобнее именно ему.
Так и есть, только одно замечание, колбек не на событие "пришла новая свеча", а на событие "поступили новые данные" в источник.
Цитата
Владимир написал: График-то построить можно, но это РАЗНЫЕ процессы - зачем же их смешивать? Мне вот графики нафиг не нужны, а свечи на что-то и пригодились бы.
Опять согласен с вами по сути данные функции и есть работа со свечами. Хотя назвали их "работа с графиками", но вот не пофиг ли.
Цитата
Владимир написал: Да, конечно, можно и сразу получить часы - я имел в виду, что даже для минутных свечей при нынешних каналах связи объёмы никакие. И потом: откуда Квику знать, что нужно Вам? Он вполне может отдавать Вам то, что нужно Вам, а получать от сервера то, что нужно ему. Может, ему выгоднее получить один массив на все таймфреймы и формировать данные для юзера "на лету"? А нам какое дело, как именно он готовит для нас данные? Это проблемы Квика, а не наши.
Тут я думаю логика в том, что проще один раз посчитать свечи на сервере и отдать пользователю сразу, то что он запросил, чем на каждой рабочей станции, будут производиться такие вычисления. Да и объемах данных разных таймфреймов различаются во много раз (например минутные от дневных в 60*24=1440 минус нерабочее время), и если учесть, что пользователей на сервере брокера могут быть многие тысячи, то все же это экономия трафика, а следовательно и скорость реакции увеличиться. Но это всего лишь мои предположения.
Цитата
Владимир написал: Кстати, и на низколиквидных инструментах свечи могут идти обычным порядком - мои так и считаются: вот включил я комп в 7 часов, так у меня все рублёвые и евровые активы и большинство долларовых не торгуются, а свечки тикают - просто у них цена не меняется. Я именно по ним и определяю, торгуется данный инструмент в данный момент или нет.
Значит для ваших задач такое решение подходит, но может не подходить другим. Свечи в классическом понимании по сделкам формируются, и кому-то это может быть важным для стратегии.
Цитата
Владимир написал: Так ведь актуальные данные это ТОЖЕ исторические данные! Прилетать новые свечки могут, изменяться - нет.
Тут есть маленький ньюанс, актуальные данные станут историческими только после закрытия свечи. А последняя свеча всегда меняется, если еще не закрыта и прилетает сделка.
BlaZed, А какие же ещё могут поступать новые данные в источник, если не свечи?
Ещё как не пофиг! Мне и в страшном сне не могло присниться искать свечи в функциях для графиков! Тем более, что понятия "скрипт" и "индикатор" здесь с какого-то бодуна разные - тоже не понимаю, какая разница: и то, и другое есть программируемый код, интерпретируемый исполнительным механизмом. И свечи нужны именно моему скрипту - индикаторов у меня нет и не будет.
А у меня логика другая: мало ли, что юзеру в голову придёт? Может, он по десятку таймфреймов захочет свечи получить. И что, мне на каждый чих у сервера данные заказывать? Получил один раз на все случаи жизни - и пусть канает! Тем более, что я при этом могу обеспечить его свечами по всем его "нестандартным интервалам". А вычисления тут вообще ничего не стоят - куда сложнее с сервером связываться, память под каждый таймфрейм выделять/освобождать...
Не понимаю, как такое решение может не подходить другим. если сделок нет - объём нулевой, а все эти H/L/O/C равны цене последней реальной сделки. Абсолютна вся информация здесь имеется для любой стратегии.
ЧАВО???!!! Они что, НЕЗАКРЫТЫЕ свечи присылают?! Совсем шизанулись... Я, как уже говорил, считаю свечи сам, так у меня только три свечи на каждый таймфрейм: две рабочие и одна накапливаемая. И только когда она накопится, последняя свеча становится предпоследней, предпоследняя выбрасывается (меня не интересуют "преданья старины глубокой"), а накапливаемая обнуляется. И пока она снова не накопится и не станет последней, её данные не используются вообще никак. Чего и всем остальным желаю. Это ж ДОДУМАТЬСЯ надо! Я в ауте!
Владимир написал: BlaZed, А какие же ещё могут поступать новые данные в источник, если не свечи? ::
Так данные по свечам и поступают, кто ж спорит. Только вы почему-то пишете "пришла новая свеча", а же говорю, что "поступили новые данные" по свечам. На мой взгляд разница существенная.
Цитата
Владимир написал: ЧАВО???!!! Они что, НЕЗАКРЫТЫЕ свечи присылают?! Совсем шизанулись... Я, как уже говорил, считаю свечи сам, так у меня только три свечи на каждый таймфрейм: две рабочие и одна накапливаемая. И только когда она накопится, последняя свеча становится предпоследней, предпоследняя выбрасывается (меня не интересуют "преданья старины глубокой"), а накапливаемая обнуляется. И пока она снова не накопится и не станет последней, её данные не используются вообще никак. Чего и всем остальным желаю. Это ж ДОДУМАТЬСЯ надо! Я в ауте!
Владимир, мы говорим об одном и том же, только терминология разная. Под незакрытой свечой я подразумеваю то, что вы называете накапливаемой, а под закрытой, то что для вас последняя/предпоследняя и более ранние.
PS: а про логику работы всего этого спорить просто не хочу, это все же вопросы к разработчикам, а менять они все равно ничего не будут.
BlaZed, А как я ещё должен писать? Мне и в голову не приходило, что они могут давать незакрытые свечи! А так всё просто: свеча созрела, пришла - прерывание.
Нет, мы и говорим о разном: у меня незакрытая (накапливаемая) свеча существует лишь потому, что я сам её считаю, как сервер. А вот отдаю её "клиенту" лишь тогда, когда она будет закрыта. Фактически в прерывании и отдаю (15-секундном). А накапливается она в полуторасекундном, то есть обработчик свечей и знать не знает о её существовании: раз он вообще получил управления, значит, пришла новая свеча.
А зачем тогда этот форум, если "разработчики менять все равно ничего не будут"? Это же бесплатный набор тестирующих их софт, причём крайне заинтересованных в его качестве!
Владимир написал: BlaZed, А как я ещё должен писать? Мне и в голову не приходило, что они могут давать незакрытые свечи! А так всё просто: свеча созрела, пришла - прерывание.
Ну если у нас все еще разговор про SetUpdateCallback (мы же с этого начали разговор), то данный коллбек срабатывает именно при получении новых данных по свечам, а не при созревании свечи.
Цитата
Владимир написал: Нет, мы и говорим о разном: у меня незакрытая (накапливаемая) свеча существует лишь потому, что я сам её считаю, как сервер. А вот отдаю её "клиенту" лишь тогда, когда она будет закрыта. Фактически в прерывании и отдаю (15-секундном). А накапливается она в полуторасекундном, то есть обработчик свечей и знать не знает о её существовании: раз он вообще получил управления, значит, пришла новая свеча.
Ну так и через источник данных ничего не мешает такую же незакрытую(накапливаемую) свечу хоть отдавать в свой обработчик, хоть подождать пока закроется, запрограммировать можно что угодно. Тут кроме того, что вы свечи самостоятельно рассчитываете разницы как бы и нету.
Цитата
Владимир написал: А зачем тогда этот форум, если "разработчики менять все равно ничего не будут"? Это же бесплатный набор тестирующих их софт, причём крайне заинтересованных в его качестве!
Смотрите, вот вам, как я понял, не нравится логика работы данных функций, а меня, например, она устраивает. Но дело в том что существующая логика, хоть и не без косяков, но она работает. Тут люди исправления проблем по несколько лет ждут, так что даже если вы все распишите как должно работать, и предложение признают целесообразным, то по приоритету задача на разработку явно где-нибудь в конце очереди затеряется.
BlaZed, Вот и плохо, что "не при созревании". Надо бы дать пожелание разработчикам на доработку софта.
Я понимаю, что "запрограммировать можно что угодно" но лучше бы это сделать в самом Квике. А я самостоятельно свечи рассчитываю не от хорошей жизни. В смысле, лёгкие (до часовых) выгоднее считать самому, а вот более тяжёлые (от часа и выше) я бы не прочь получать от сервера. А то мало ли что - связь прервётся, электричество отрубят или просто комп выключен. А для более "стратегического" планирования эти свечи вовсе не помешали бы. Но софт... меня ведь и там интересуют только две последние свечи, и пилювал я на все графики, вместе взятые!
Да я уже когда-то заводил ветку с предложениями. Потом осмотрелся немного и перестал.
Dr Wed, я инструкцию проштудировал, вроде как других способов нет. Единственная альтернатива которую я вижу это брать данные из открытого графика внутри скрипта индикатора, который к этому графику подцеплен.
Владимир, В самостоятельном расчете свеч я вижу только один существенный плюс, это построение свеч любого таймфрейма. Думаю степени двоек должны интересный результат давать. Но я ленивый, хотя может когда и созрею реализовать..
Как по вашему, какие еще плюсы имеются по сравнению со стандартным способом получения свеч через CreateDataSource?
Артем написал: Dr Wed, я инструкцию проштудировал, вроде как других способов нет. Единственная альтернатива которую я вижу это брать данные из открытого графика внутри скрипта индикатора, который к этому графику подцеплен.
Так вот тут же Владимир, он считает свечи самостоятельно. Спросите как именно лучше считать, если интересно.
Я например сходу вижу пару вариантов. 1) Из таблицы обезличенных сделок 2) Из таблицы текущих торгов параметр LAST
BlaZed, Именно "степени двоек"! Там просто НЕМЕРЯНОЕ количество информации для принятия решений! Представьте: имеем по две свечи, зато сразу по 16 таймфреймам (к меня сейчас по 9). Из них: две месячные, две недельные и далее со всеми остановками. То есть мы видим движение курса сразу на всех уровнях, да ещё и имеем возможность оценить, как каждый таймфрейм ведёт себя относительно родительского (стоит, растёт или падает) и как ведёт себя по отношению к нему дочерний таймфрейм! Ну разве может какой-то сраный график, да ещё и по заранее выбранному таймфрейму, дать столько информации? Да ни в жисть!
BlaZed, я имел ввиду все имеющиеся данные а не только текущие. А так можно отслеживать OnParam, можно GetParam в цикле использовать, можно вообще по данным стакана всё это определять.