funduk написал: nikolz, я думал, у Вас всё на роботах, и индикаторы оказываются не нужны. Зачем Вы их используете, если не секрет, да ещё 20 линий в одном индикаторе?
funduk написал: nikolz, я думал, у Вас всё на роботах, и индикаторы оказываются не нужны. Зачем Вы их используете, если не секрет, да ещё 20 линий в одном индикаторе? Я, например, облако скользящих строю. А на графике (вместо чисто внутри робота) для наглядности, т.к. ещё только приступаю к автоматизации ТС.
Для торговле одним инструментом я делаю робота всегда в индикаторе. Писал об этом на форуме.
У меня в одном брокере имеется несколько брокерских счетов: ИИС и обычный брокерский счет. Для каждого счета необходимо настраивать и запускать отдельный терминал. Я скачал инсталлятор терминала QUIK от брокера и установил для одного счета.
Хочу установить второй терминал QUIK для запуска на том же компьютере и в сеансе того же пользователя, то есть параллельно 2 терминала. Уже не помню как я ставил 2 терминала, но иногда наблюдаются разрывы связи и непонятно по какой причине. Возможно, я что-то неправильно сделал и брокер разрывает соединение на сервере.
Вопросы: 1) Как правильно запускать несколько терминалов QUIK на одном компьютере для доступа к разным счетам одного брокера, чтобы терминалы не конфликтовали между собой? То есть, провести установку 1 раз (например, в директорию c:\QUIK), а потом просто скопировать директорию c:\QUIK в c:\QUIK2 ? Или нужно провести 2 установки из дистрибутива в 2 разные директории?
2) При подключении терминала предлагается выбрать сервер. Нужно ли выбирать разные сервера при подключении из 2 разных терминалов? Например, в первом терминале выбираем Сервер1 , а во втором терминале выбираем Сервер2 .
Спасибо!
Главное, чтобы у Вас были два логина ну и два пароля.
nikolz написал: 1) колбек onРaram().2) таймер и синхронизацию ПК от сервера времени.
если не трудно, приведите пожалуйста код пример, спасибо
Код
function main()
local time;
while is_run do
if time>58 then
message("Секунды превысили значение 58!")
end
sleep(100)
time=string.sub(getInfoParam("SERVERTIME"),-2);
end
end
function OnStop()
is_run = false
end
СергейК написал: Добрый день. Обычно позиции по проданным бумагам не показываются, но на самом деле у меня есть квики, к-е их таки показывают. Т.е. если у меня было 100 облигаций ТГК-14 и я их сегодня продал, то в Т1 например у Открытия ТГК-14 не будет вообще, а у Альфы или ВТБ будет строка с количеством 0. Соответственно завтра будет то же самое в Т0. Как я понял, вариант, когда такая позиция показывается, немного удобнее. Вопрос: это решается на стороне брокера?
Sergey написал: Здравствуйте, вопрос в следующем, если торговать руками, то я могу закрыть позицию в любой удобный для меня момент, т.е. даже тогда когда тиков нет. а вот lua почему то так не может, бывает мне нужно закрыться на close свечи, и тупо с 57 до 01 секунды вообще нет тиков, соответственно закрытие происходит на другой свече, подскажите как закрываться тогда когда мне нужно и не быть зависимым от тиков?
1) колбек onРaram(). 2) таймер и синхронизацию ПК от сервера времени.
Сергей написал: Добрый день. Движение котировок в широких пределах не зависит как от количества продавцов и покупателей, так и от количества и объема сделок. Значительно более сильная корреляция движения котировок связана с соотношением количества проданных (сделка по цене покупки) и купленных (сделка по цене продажи) акций. Я и предлагаю отобразить эту информацию. Наличие покупателей совсем не значит, что они будут участвовать в сделках по текущим ценам и цена акций будет расти. Важна только та их часть, которая участвует в сделках.
Все это - азбука торгов. Общеизвестно, что цены двигают рыночные заявки. Но рыночные заявки не попадают в стакан и их не видят клиенты брокеров.
Игорь М написал: Причем здесь какой-то мой алгоритм? Подняли тему и я написал,что TRADINGSTATUS криво работал раньше, написал что проверю снова. Вот проверил, ничего не поменялось. Написал сюда, чтобы люди, которые будут потом читать, не тестировали заново. Резюмируя: TRADINGSTATUS - бесполезная мура, 10-15 секунд это перебор для любых систем. За эксклюзивную информацию о том, что "система торговли Квик - это не тот инструмент, что стоит использовать" для "мгновенной реакции", низкий поклон, конечно. ::
Вы же говорите, что задержка в 15 секунд для Вас критическая. Я пока не видел с этим проблем, для любых торговых систем. Совершенно разные мнения.
Я такого не писал. Она для меня не критическая, я TRADINGSTATUS не использую. Я имел в виду, что если такая простая опция, как определение статуса сессии, имеет задержку в 10-15 секунд, то этим не следует пользоваться в любых системах. Она просто тупо неправильно работает. Не может быть в современных реалиях такой задержки. Возможно, когда-то она работала правильно, но потом что-то поменялось, а её не исправили. Она стабильно выдает нереальную задержку - это баг.
Поделюсь своим опытом. Правда я не торгую неликвидом. Все плановые начала и концы торгов я определяю так. ------------------ Компьютер у меня синхронизируется по серверу точного времени. Я об этом уже рассказывал на форуме. Поэтому я знаю время работы биржи очень точно, а не по серверу брокера, которое может гулять как угодно. Ошибка синхронизации не более 0.02 сек. Начало предторгового периода определяется по часам, а начало торгов по часам и правилу High~=Low для Сбербанка. -------------- Аналогично можно построить правила для определения любых другим моментов на бирже.
В эпоху интернет казалось бы что сложного ввести в браузере "Лимит открытых позиций" ---------------- и прочитать: --------------------- Лимит открытой позиции — это максимальный объем активов, который трейдер может удерживать в открытой позиции в определенный момент времени. Этот лимит устанавливается для того, чтобы предотвратить риски для финансовой стабильности трейдера и рынка в целом. Для начинающих трейдеров, лимит открытой позиции может показаться сложным понятием, но это необходимо для защиты их финансовых интересов.
nikolz написал: Забыл сказать. Способ High~=Low надо использовать не для торгуемого Вами инструмента, а для ликвидного, например , используйте это правило для сбербанка как индикатор, что торги идут.
Такой способ подойдёт, чтобы определить, что торги в принципе начались, например после клиринга.
Но не подойдёт, чтобы определить, что торги идут по конкретному инструменту.
Безусловно. К тому же, скорее всего, значения этих параметров могут быть разные у разных брокеров. И нет никаких гарантий, что они когда-нибудь не поменяются.
Все просто Карл! Определяете, что торги идут в принципе (был такой магазин ) Потом проверяете объем торгов по данному инструменту. Если ноль, то не торгуется. Можете еще проверять наличие предложений. Если инструмент не торгуется то и предложений нет
Забыл сказать. Способ High~=Low надо использовать не для торгуемого Вами инструмента, а для ликвидного, например , используйте это правило для сбербанка как индикатор, что торги идут.
Вообще-то КВИК создает от 8 потоков. ---------------- Очень сильно тормозит отрисовка графиков, так как практически перерисовывается весь отображаемый график на каждый тик. Попробуйте посмотреть загрузку ядер при свернутых окнах КВИКА -------------------- Размер архивов влияет в основном на время запуска КВИКА, если Вы не отображаете его весь на график
Сергей С. написал: А может кто-то пробовал, что быстрее будет работать для получения информации о зачислении бумаг в портфель: getDepoEx().currentbal, или цикл по getNumberOf("depo_limits") с перебором getItem("depo_limits", i).currentbal ?
Работать будет одинаково, так как обращение к архиву. Быстрее будет работать колбек. Но разница будет не в секундах, а в ms. ------------- Цикл при этом лишний, так как эти таблицы не увеличиваются в размере. --------------- Если у Вас изменение портфеля всегда так долго, то что-то не так в настройках или в канале связи. Ищите, где не так.
18.08.2032 торги на срочном рынке FORTS после проведения дневной клиринговой сессии возобновились в 14:27:00.
Известен ли кому-нибудь способ получать информацию о "необычных" временах начала/возобновления торгов? Насколько я понял, доступа к таблице системных сообщений нет. Здесь предлагают использовать поле TRADINGSTATUS ответа getParamEx, но, судя по обсуждению, не до конца ясно, можно ли на него полагаться.
Есть ли другие варианты, в т.ч. костыльные?
Благодарю за ваши предложения.
Из собственного опыта. Если используете свечи, то просто сравните High и Low свечи. Если торги идут, то значения различны.
Владимир написал: Сергей С. , Дались Вам эти несчастные 5 секунд. У меня тикеры держатся в портфеле месяцами и годами, а тут секунды. ЗАЧЕМ с этим что-то делать?
Была идея немного поарбитражить в квике... но, видимо, для этой цели квик не подходит.
QUIK Подходит для арбитража. На форуме выкладывал пример скрипта для арбитража.
Виталий написал: Добрый день. Подскажите, что сделать чтобы интерфейс не фризился и не тормозил? Я как бы все понимаю, но вот такое окно (приложил скрин) фризится, если программу разворачивать с панели или просто водить по графику курсором с перекрестием. При этом у меня железо как бы не микроволновка: AMD Ryzen 7 5800X 3.80 GHz, ОЗУ 64Гб DDR4 3200, NVME накопитель, пустой на половину. Видео RTX 3060. Ну неужели этого мало?! Ну елки-палки! Что и где подкрутить, чтобы это прекратилось?!
Igor_User написал: nikolz , попробовал X=(Order.flags>>3)&1. То же самое - бит3 = true для рыночной заявки.
На фьючерсах нет рыночных заявок, надо выставлять с ценой. Если хотите рыночную то цену выбирайте хуже лучшей цены.
Мне всегда казалось, что и на спотовом также. Интерфейс выставления заявки в квике одинаковый что на спотовом рынке, что на срочном. И там и там присутствует галочка "Рыночная". Цену хуже можно не выставлять (точнее поле "Цена" становится вообще неактивным при выборе "Рыночная").
Возможно вы имеете в виду, что несмотря на это, заявки всё равно по-разному обрабатываются на спотовом и на срочном?
Я не правильно Вам объяснил. На фьючерсах нет рыночной заявки потому, что вы покупаете не актив, а контракт на его покупку А стоимость контракта не зависит от цены актива. Поэтому Вы задаете число контрактов а их цена фиксированная.
В качестве информации Так как использую своим DDE приложением, то QUIK нормально работает с моим сервером имя которого могу сделать любое.
По.тому полагаю, что проблема не в QUIK а в том, как Open Office реализует обработку. Из документации OpenOffice следует, что вызов DDE надо прописывать специально в ячейке таблицы.
Эта библиотека предоставляет общие функции для работы со строками, такие как поиск, извлечение подстрок и сопоставление шаблонов. Когда индексируются строки в Lua, первый символ находится на позиции 1 (не на 0, как в C). Допускаются негативные индексы, они интерпретируются как индексирование обратно (задом наперед), с конца строки. Таким образом, последний символ находится на позиции -1 и так далее.
Строки в Lua индексируются с 1 (а не 0, как в C). Индексы могут быть отрицательными и интерпретируются как индекс с конца строки. Т.е. последний символ имеет позицию -1, и т.д.
У меня в скриптах роботов делается так: ------------ Если стоп-заявки разрешены , то На изменение портфеля по инструменту проверяется наличие стоп-заявки и соответствие в ней количества. Если равенства нет , то стоп-заявка снимается и устанавливается новая, если количество не ноль. Ппри этом, выставление новой заявки должно быть выполнено после подтверждения снятия старой. ------------ Есть различные варианты сигналов, по которым выполняются эти действия. Например скользящий стоп. ---------- Так как умная стоп-заявка - это относительно большой и сложный скрипт, то сомневаюсь, что на форуме появится действительно подобный скрипт. Практически надо выкладывать скрипт автоматической торговли. ----------------
Илья написал: Хорошо, с передачей данных между скриптами разобрались. Остается вопрос оптимизации частоты этой передачи. Грубо говоря, в основном скрипте расчет происходит после совершения сделки. Частота расчета значительно ниже частоты срабатывания функции OnCalculate.
можно вычисления внутри onCalculate делать один раз в момент открытия новой свечи.
Илья написал: 1. Основной скрипт и скрипты индикаторов работают внутри одного экземпляра Quik (на одном компьютере) 2. Разработка на отличном от Lua (Qlua) языке не предполагается. Все в рамках возможностей QUIK
Тогда единственный вариант это обмен через файлы, то , что Вы не хотите. Все остальное требует использование сторонних dll , т.е. CИ.
Посоветуйте, пожалуйста, как можно оптимизировать данный алгоритм:
1. передачу данных из основного скрипта в скрипт индикатора (без использования файлов) 2. Инициировать передачу данных в индикатор со стороны основного скрипта (уменьшить частоту обращения индикатора к основному скрипту) 3. Есть ли возможность из основного скрипта инициировать событие для функции OnChangeSettings ?
Уточните: 1) скрипты в разных приложениях, в одном или на разных компьютерах. 2) Предполагаете разрабатывать функции на C или других языках или только на Lua.
Ziveleos, Вы можете делать еще так, возможно будет проще понимать что и зачем: ----------------- Например, есть flag ----------------- 1) надо выделить бит 0 x=flag & 1 -- x равен значению бита ----------------- 2) надо выделить бит 1 z=flag>>1; x=z & 1 -- x равен значению бита ----------------- 3) надо выделить бит 2 z=flag>>2; x=z & 1 -- x равен значению бита -------------------- 4) надо выделить бит 3 z=flag>>3; x=z & 1 -- x равен значению бита ------------------------ 5) надо выделить бит 4 z=flag>>4; x=z & 1 -- x равен значению бита
<Поле таблицы (данные любого типа Lua кроме nil, при присвоении которого полю, соответствующая запись таблицы удаляется>. --------------- Поправлю Вас.. nil - это такая же переменная как и другие. Отличается лишь тем, что ее тип =0, а тип строки =3. проверка переменной на nil, это равенство ее типа нулю. --------------- Поэтому поле таблицы может быть любого типа, в том числе и типа nil. ================== Команды в байт-коде луа - это просто целое число, которое всегда указывает на функцию СИ. Т е внутри VMLua нет никакого чистого луа, там лишь чистый СИ.
Delv написал: Решил сохранить историческую информацию о стаканах по отдельно взятому инструменту. Есть 2 обработчика: OnQuote и OnAllTrades. В обоих стоит фильтрация по инструменту. События из них кладутся в некий общий список(std::list<std::any>),
Забыл сказать Вам ранее. 1) Существуют сделки, которых нет в стакане. 2) Для эксперимента можно сделать так. Синхронизируйте часы компьютера от сервера точного времени. При этом проверьте на сколько будет уходить время на Вашем компьютере. Реально получить 2-5 ms . Потом пишите стакан и сделки с метками компьютерного времени. Потом обработайте файл с оценкой разницы компьютерного времени и времени сделок. В итоге Вы получите, что сделки приходят к Вам с запозданием Сделки и срезы стаканов могут приходит в одном пакете. Количество изменений стакана в действительности всегда больше чем число совершенных сделок. Но выбор среза стакана очевидно определяется не моментом совершения сделок, либо не только. ----------------- В любом случае, если так сделаете, то узнаете много нового. =============== Прим: Когда-то давно привозили данные с биржи по сделкам для экспертизы в рамках одного уголовного дела. Там много чего есть интересного.
Спасибо, надо будет поинтересоваться. Пока же я буду просто использовать очередность сделок и кадров стакана. Разница по времени там небольшая будет. Те же 2-5 мс для меня не имеют особого значения, так как на сделку(отправка заявки на биржу и получение ответа по транзакции) уходит куда больше. До 250 мс.
2-5 ms - это не задержка прихода, а ошибка синхронизации времени компьютера относительно времени биржи. Эта величина погрешности. Вы же не используете градусник у которого погрешность измерения 10 градусов. ----------------------------- На форуме я выкладывал результаты измерения запаздывания прихода сделок и свечей. Получались даже секунды, а для свечей десятки секунд. ---------------- Но если Вам все равно, но какой смысл вообще смотреть вчерашний день.
Delv написал: Решил сохранить историческую информацию о стаканах по отдельно взятому инструменту. Есть 2 обработчика: OnQuote и OnAllTrades. В обоих стоит фильтрация по инструменту. События из них кладутся в некий общий список(std::list<std::any>),
Забыл сказать Вам ранее. 1) Существуют сделки, которых нет в стакане. 2) Для эксперимента можно сделать так. Синхронизируйте часы компьютера от сервера точного времени. При этом проверьте на сколько будет уходить время на Вашем компьютере. Реально получить 2-5 ms . Потом пишите стакан и сделки с метками компьютерного времени. Потом обработайте файл с оценкой разницы компьютерного времени и времени сделок. В итоге Вы получите, что сделки приходят к Вам с запозданием Сделки и срезы стаканов могут приходит в одном пакете. Количество изменений стакана в действительности всегда больше чем число совершенных сделок. Но выбор среза стакана очевидно определяется не моментом совершения сделок, либо не только. ----------------- В любом случае, если так сделаете, то узнаете много нового. =============== Прим: Когда-то давно привозили данные с биржи по сделкам для экспертизы в рамках одного уголовного дела. Там много чего есть интересного.
nikolz написал: Динамические данные надо брать через getParamEx., а getParamEx вызывать при срабатывании onParam.При этом, чтобы не читать ненужное, надо в onParam поставить фильтр на торгуемые инструменты.
При срабатывании onParam вызывать именно getParamEx или всетаки getParamEx2 ?
В документации OnParam написано: При вызове данной функции пользователь может вызвать функцию getParamEx() и получить значение нужного параметра. ------------------ getParamEx2 Функция предназначена для получения значений всех параметров биржевой информации из Таблицы текущих торгов с возможностью в дальнейшем отказаться от получения определенных параметров, заказанных с помощью функции ParamRequest. Для отказа от получения какого-либо параметра воспользуйтесь функцией CancelParamRequest. --------------- getParamEx Функция предназначена для получения значений всех параметров биржевой информации из таблицы «Текущие торги». С помощью этой функции можно получить любое из значений Таблицы текущих торгов для заданных кодов класса и инструмента. ==================== полагаю, что если нет надобности использовать ParamReques, то проще getParamEx.
paluke написал: Ну почти... Посмотрите на сбербанк или газпром. Код базового актива для фьючерса может не совпадать с кодом акций.
покажите, где для фьючерса сбербанка и газпрома код не совпадает. Код базового актива у сбербанка SR и SP, а у газпрома GZ. У какого фьючерса этих акций иначе?
nikolz написал: Функция getParamEx берет параметры из архива терминала. Это сравнительно медленно.У инструментов много неизменяемых параметров. Их лучше выбрать один раз и сохранить в таблице. Потом брать из этой таблице не используя getParamEx.
Т.е. "более" актуальные данные нужно брать через getParamEx2 во всех случаях, когда открыта ТТТ ? Или могут быть другие ситуации ?
Динамические данные надо брать через getParamEx., а getParamEx вызывать при срабатывании onParam. При этом, чтобы не читать ненужное, надо в onParam поставить фильтр на торгуемые инструменты.
Я хотела бы научиться писать небольшие вспомогательные програмки на QLUA, опыт програмирования у меня очень небольшой, когда-то давно был курс в университете. Я смогла написать следующую программу, которая выполняет следующее: при запуске формируется таблица с фьючерсами, запоминается в отдельной колонке открытый интересе в момент создания таблицы. Далее, каждые несколько секунд берется текущий открытый интерес и вычисляется изменение открытого интереса. Эти данные выводятся в отдельную колонку.
На текущий момент, больше всего я не понимаю, как работать с типами данных, почему-то чтобы выводились данные в колонку - их нужно преобразовывать в строки, иначе у меня выводятся нули. К сожалению, мне очень не хватает рабочих примеров, чтобы быстрее обучиться.
Хотя код рабочий, я буду признательна, если кто-то сможет подправить код с точки зрения приведения типов. Хочется чтобы в столбцах OI, OIINIT, OICHG, OICHG% были не строки, а числа.
И еще один вопрос, можно ли добавить столбы - которые брали бы открытый интерес на начало дня (на 10 утра по Москве, либо на 19:00 предыдущего дня - любой вариант подходит) - которые брали открытый интерес который был 15 минут назад (получается, это поле должно динамически обновлятьс, достаточно раз в минуту например)
Ликбез. Скрипты пишем не на QLUA, а на Lua. QLua- это библиотека функций для Lua. Эти функции позволяют скрипту обмениваться данными с терминалом QUIK. Поэтому про типы и как писать скрипты на луа надо читать в литературе по программированию на луа. https://jevico.github.io/ https://eligovision.ru/media/upload/lua.pdf https://chenweixiang.github.io/docs/Programming_in_Lua_4th_Edition.pdf ----------------------- Относительно типа выводимых данных в таблицу. Чем Вам мешает сохранение чисел в формате строк? В данной реализации отображения таблицы используется формат строки для хранения отображаемых данных, поэтому надо явно делать из чисел строки. Так сделали разработчики, поэтому надо делать именно так. ---------------------- Изучите библиотеку QLUA и делайте так, как написано в документации. Примите это как догму и не пытайтесь угадать "почему" так сделали разработчики библиотеки. ----------------- QUIK - это программа для подачи поручений брокеру в текущий торговый день. Поэтому в ней отображается текущая информация. Если Вам надо информацию прошлых дней то ее надо сохранять в файлах и потом считывать и отображать. Т е вам надо сделать запись в файл OI, OIINIT, OICHG, OICHG% и считывать значения при запуске QUIK. Хранить данные Вы можете и в двоичном виде как числа, преобразовывать в строку надо лишь для отображения на экране.
1. У меня открыта таблица тек.торгов с нужными инструментами. Как правильно получать данные из нее getParamEx или getParamEx2 ? 2. Сработал колбэк OnParam. Также- как правильно - getParamEx или getParamEx2 ?
Функция getParamEx берет параметры из архива терминала. Это сравнительно медленно. У инструментов много неизменяемых параметров. Их лучше выбрать один раз и сохранить в таблице. Потом брать из этой таблице не используя getParamEx.
nikolz написал: У Вас есть список акций, которые Вас интересуют.
1. У меня нет списка акций. Я его хотел получить именно из списка фьючерсов на акции, которые есть на Мосбирже. Зная список акций я без проблем получаю нужный мне список фьючерсов на акции.
Можно сделать так: 1) получить этот список из списка открытых инструментов. 2)сформировать списку фьючерсов по этому списку. 3) выбрать те фьючерсы, на которые подписан 4) оставить только те акции для которых есть фьючерсы. ------------------- относительно "быстро" Вы делаете это один раз при старте КВИК поэтому время вычислений не имеет значения. в любом случае не превысит нескольких секунд.
nikolz написал: Сейчас уже точно не помню, но вроде бы делал какой-то листинг и по нему формировал фьючерсы . При этом учитываешь какой квартал, так как для разных кварталов разные правила. Все делается автоматом.
У меня есть строка, полученная так: sec_list = getClassSecurities("SPBFUT") и впринципе её раскидать на фьючерсы разные проблем нет никаких, хоть по кварталам используя "Спецификации коротких кодов фьючерсных и опционных контрактов на срочном рынке" c Мосбиржи: https://www.moex.com/s205 Но в любом случае для отсева из всей этой общей кучи, чтобы отделить только фьючерсы на акции, придётся задавать что-то, связанное с акциями. Я для этого использую шаблон на каждую акцию и ищу через string.gmatch(longStr, Str .. "(%u)(%d)"), где longStr = sec_list, Str = шаблон((AF) например для Аэрофлота). Но вот сформировать тоже самое не задавая шаблон(не привязываясь к акции) никак не получится, нет такой возможности.
может что-то забыл, но в указанной Вами ссылке вроде все есть:
Спецификации коротких кодов фьючерсных и опционных контрактов на срочном рынке
Коды срочных контрактов состоят из следующих частей:
Коды фьючерсов
C
M
Y
Коды опционов
C
P
K
M
Y
W
C – краткий код базисного актива, P – цена страйк (максимум 6 символов), К – тип расчетов, M – месяц исполнения (а также тип для опциона), Y – год исполнения, W – признак недельного опциона.
Кодирование базового актива (поле "C")
Группа контрактов
Код базисного актива (поле "C")
Код базисного актива на срочном рынке
Название базисного актива
Я же написал как делал У Вас есть список акций, которые Вас интересуют. Из таблицы Кодирование базового актива находим код базового актива на срочном рынке ------------------- После этого записываем код фьючерса: --------------- кода базового актива, месяц, год. ------------------ В итоге получите список фьючерсов для акций. ============= Если используете колбек onParam, то те коды фьючерсов на которые вы не подписаны никогда не получите. В результате у вас будут коды фьючерсов на акции, на которые вы подписались ------------------ Аналогично опционы. ------------------ Что не так?
Alexander написал: Подскажите кто знает если. С помощью getParamEx есть ли параметры в ТТТ такие, чтобы отсортировать фьючерсы на акции от остальных фьючерсов. В квике по названию вроде ничего не подходит. Или как-то такое сделать по другому. Т.е. я получаю: sec_list = getClassSecurities("SPBFUT") и потом мне из всей этой кучи надо выделить только фьючерсы на акции. По класскоду у всех "SPBFUT", что у индексных, что у товарных, что у акционных. Пока вижу только вариант через string.gmatch и шаблон, но тогда для каждого варианта(смотрим на мосбирже все фьючи на акции) надо указать шаблон. Так пока делаю, но это длинно, для каждой акции свой шаблон. И спиок на бирже могут поменять и придётся менять код. Типа бы какого-нибудь не только класскоде, а ещё бы и подкласса иметь на фьючерсы на акции.
Когда-то давно делал так. На бирже находим правила формирования названия фьючерса. Далее по имени нужных нам акций формируем имена фьючерсов. При этом еще учитываем правило формирования даты фьючерса. Все вроде бы работало правильно.
Ну я типа так и делаю. Только даже проще. Мне так же приходиться как и у Вас написано "по имени нужных нам акций" определять шаблон и по нему мне из всей кучи находит СРАЗУ ВСЕ доступные на данный момент фьючерсы на эти акции, без всякого " правило формирования даты фьючерса". Думал может можно как-то упростить, так как на каждую акцию приходится задавать свой шаблон(Аэрофлот - AF, Газпром - GZ, и т.д).Но список может меняться и приходится постоянно следить и корректировать код, а этого хотелось бы избежать. Это можно было бы легко делать если бы например Мосбиржа помимо кода на фьючерсы "SBPFUT", например ввела бы подкоды. Для фьючерсов на акции свой подкод, для валюты свой, для товаров свой, для процентных свой и для индексных свой. Но такого видимо нет.
Сейчас уже точно не помню, но вроде бы делал какой-то листинг и по нему формировал фьючерсы . При этом учитываешь какой квартал, так как для разных кварталов разные правила. Все делается автоматом.