Использую простой lua-скрипт для расчета конечной доходности облигаций (под погашение) Столкнулся с тем, что не могу рассчитывать флоатеры - в каких полях содержится информация?
Сейчас я вытаскиваю COUPONVALUE - но там же величина купона в рублях (почему-то)! Для флоатера не катит совсем.
Вопрос к поддержке QUIK - где взять размер купона в процентах? (ACCRUEDINT не предлагать, там почему-то накопленный купонный доход.)
(свежую документацию скачал и прочитал)
В качестве примера можно посмотреть на такую облигацию:
Владимир написал: nikolz , А при чём тут Ломоносов? Ломоносов, Моцарт, Пушкин - они не умные, они гении. Умным людям деньги действительно не нужны, а у дураков-то они откуда? Заработать они не в состоянии - только воровать.
Да, за растрату сраных 8 тысяч сраных рублей могли и посадить. Воровать нужно миллиардами, и не деревянных. И с каких это пор глубинное население России стало экспертом в финансовых вопросах?
Не соглашусь. Что такого гениального сделал Ломоносов? Возможно он был трудоголиком< возможно просто пробивным, но не гениальным.
Ну как: открыть атмосферу на Венере в XVIII веке - это довольно круто. (подавляющее большинство и сейчас это не сможет сделать).
Создал физическую химию, открыл молекулярное строение вещества...
Владимир написал: nikolz , А при чём тут Ломоносов? Ломоносов, Моцарт, Пушкин - они не умные, они гении. Умным людям деньги действительно не нужны, а у дураков-то они откуда? Заработать они не в состоянии - только воровать.
Да, за растрату сраных 8 тысяч сраных рублей могли и посадить. Воровать нужно миллиардами, и не деревянных. И с каких это пор глубинное население России стало экспертом в финансовых вопросах?
Не соглашусь. Что такого гениального сделал Ломоносов? Возможно он был трудоголиком< возможно просто пробивным, но не гениальным.
Ну как: открыть атмосферу на Венере в XVIII веке - это довольно круто. (подавляющее большинство и сейчас это не сможет сделать).
Создал физическую химию, открыл молекулярное строение вещества...
Айзберг заявка - это например купить 1000 000 а выставлять по 10. В стакане увидите что лучшая цена почти не меняется и как только скушают порцию так появляется новая на том же месте На графике - это горизонтальная цена может стоять долго долго потом обязательно улетит куда-нибудь
Спасибо.
Да, я уже посмотрел. Тема прикольная, подумаю, как я ее смогу применять.
Владимир написал: Vitalii Savinov, Я имел в виду, какая разница, бот или не бот. А заявку вполне можете сгенерить и Вы сами - это даже выгоднее, комиссия не берётся.
Да пусть боты бегают куда хотят - это ИХ проблемы. А я выставляю заявки по цене, которая устраивает МЕНЯ.
Так ФОРМИРУЙТЕ свою позицию за правильную цену - и дело с концом. Никто Вам не предлагает с ботами в подкидного дурака играть. Тем более, что боты - точно такие же участники торгов, как и Вы. А для того, чтобы заявка исполнилась нужно найти того дурака, которого устроит встречное предложение, и бот это или не бот - дело стопятидесятое.
Ну боты обычно ставят количество в 1. Или около того. Это не торговля вообще.
Если бы боты ставили 1000 - то тогда конечно пофиг.
Владимир написал: Vitalii Savinov, Какая разница, кто сгенерил заявку? Мне вот АБСОЛЮТНО до фонаря. А если "мне нужно 100 (или даже 1000)", так я и ставлю заявку на нужное количество лотов, и мне плевать, за одну она сделку выполнится или за сто. А уж на ботов и их "соревнования" тем более плевать - в стакан я вообще никогда не заглядываю. На айсберги у меня денег нет, но при желании спрятать айсберг так, чтобы ни одна собака не догадалась, проблемы не представляет.
Ну как - если я хочу купить, то ясно же, что я хочу купить не сам у себя. То есть заявку должен генерить не я.
> А если "мне нужно 100 (или даже 1000)", так я и ставлю заявку на нужное количество лотов И тут же набегут боты и будут перебивать цену. То есть - погонят рынок в невыодную мне сторону.
>мне плевать, за одну она сделку выполнится или за сто А мне как-то не плевать. Мне позицию сформировать надо за правильную цену, а мне предлагают с ботами в подкидного дурака играть. К тому же, при большом количестве ботов (на хайповой бумаге это обычно так) - эта заявка может и не выполнится вовсе.
>А уж на ботов и их "соревнования" тем более плевать - в стакан я вообще никогда не заглядываю. А я постоянно через стакан торгую. Подавляющее количество ботов занято абсолютно бессмысленной деятельностью. Догадываюсь, что есть боты, которые заняты осмысленной деятельностью. Но, скорее всего, я их даже не вижу.
>На айсберги у меня денег нет, но при желании спрятать айсберг так, чтобы ни одна собака не догадалась, проблемы не представляет. А вот этого я вообще не умею.
Владимир написал: Vitalii Savinov, Какая разница, кто сгенерил заявку? Мне вот АБСОЛЮТНО до фонаря. А если "мне нужно 100 (или даже 1000)", так я и ставлю заявку на нужное количество лотов, и мне плевать, за одну она сделку выполнится или за сто. А уж на ботов и их "соревнования" тем более плевать - в стакан я вообще никогда не заглядываю. На айсберги у меня денег нет, но при желании спрятать айсберг так, чтобы ни одна собака не догадалась, проблемы не представляет.
Владимир написал: Vitalii Savinov , Вы выкупаете те лоты, которые стоят первыми в очереди по указанной цене предложения. Иногда это действительно может быть одна заявка, а может сотня совершенно разных заявок. Программно Вы тоже можете подать лимитную заявку по указанной цене. Если она нарывается на более раннее предложение, она исполнится. Если заявка по рыночной цене, она исполнится наверняка.
Вот вообще не всегда.
Чаще всего первыми по цене стоят предложения, сгенерированные ботами. Лот из одной штуки, который дешевле (или дороже) нормального предложения на копейку.
А мне нужно 100 (или даже 1000). Руками я покупаю свою тысячу первой (чтобы не ушла). Потом может быть и бота возьму, если не убежит (часто убегает) Причем боты часто соревнуются друг с другом, особенно на популярной бумаге. Выглядит это как тараканьи бега.
То есть руками я выкупаю не первые лоты по цене предложения, а те, которые мне нужны (причем они могут быть и действительно первыми). И решаю я это сам. Наковыривать тысячу по одной штуке мне не интересно.
Но в любом случае спасибо за ответ. Стало понятнее
Это используют и крупные игроки. Если надо поднять рынок чужими руками, то ставит большой пакет на покупку явно, чтобы все видели. Если же крупный игрок покупает реально, то он ставит айсберг чтобы никто не видел.
А как быть, если я хочу акцептовать уже существующую чужую заявку? (например, заявка на продажу 100 штук Сбера и я хочу их из этой заявки купить, а не ставить свою заявку на покупку 100 штук)
Ищу-ищу, но пока не нашёл.
Какую функцию нужно использовать, подскажите плиз направление, куда копать?
Добавлю к пояснению Владимира -------------------- Биржевая торговля - это торговля по принципу -"кто первым пришел, того и тапочки" Первый определяется по цене заявки. Т е лучшая цена всегда первой. В итоге все на покупку и все на продажу стоят в очередях. Первыми с лучшими ценами. Т е покупатели - чем выше цена желания , тем первее. Продавцы- чем ниже цена желания, тем первее. ---------------- Но и при биржевой торговле есть возможность купить, что желаете . Это отдельная площадка для договорных сделок на крупные лоты, но это уже не биржевая торговля, а просто при бирже для особо крупных. --------------- Поэтому для простых бедных есть лишь один способ купить. Выставить заявку либо встречно уже имеющимся - т е по рынку либо с ценой хуже первой и встать в очередь ожидания, когда ваша цена станет лучшей.
При ручной торговле ни в какой очереди я не стою. Кликнул мышкой на заявку, ввёл свой ID, кликнул на ОК и забрал бумаги.
Я правильно понял, что программно такое действие невозможно?
Владимир написал: Vitalii Savinov, Вы выкупаете те лоты, которые стоят первыми в очереди по указанной цене предложения. Иногда это действительно может быть одна заявка, а может сотня совершенно разных заявок. Программно Вы тоже можете подать лимитную заявку по указанной цене. Если она нарывается на более раннее предложение, она исполнится. Если заявка по рыночной цене, она исполнится наверняка.
Вот вообще не всегда.
Чаще всего первыми по цене стоят предложения, сгенерированные ботами. Лот из одной штуки, который дешевле (или дороже) нормального предложения на копейку.
А мне нужно 100 (или даже 1000). Руками я покупаю свою тысячу первой (чтобы не ушла). Потом может быть и бота возьму, если не убежит (часто убегает) Причем боты часто соревнуются друг с другом, особенно на популярной бумаге. Выглядит это как тараканьи бега.
То есть руками я выкупаю не первые лоты по цене предложения, а те, которые мне нужны (причем они могут быть и действительно первыми). И решаю я это сам. Наковыривать тысячу по одной штуке мне не интересно.
Но в любом случае спасибо за ответ. Стало понятнее
В целом понятно, как она работает. Из описания видно, что она может выполнять следующие транзакции: «NEW_ORDER» – новая заявка, «NEW_NEG_DEAL» – новая заявка на внебиржевую сделку, «NEW_REPO_NEG_DEAL» – новая заявка на сделку РЕПО, «NEW_EXT_REPO_NEG_DEAL» – новая заявка на сделку модифицированного РЕПО (РЕПО-М), «NEW_STOP_ORDER» – новая стоп-заявка, «KILL_ORDER» – снять заявку, «KILL_NEG_DEAL» – снять заявку на внебиржевую сделку или заявку на сделку РЕПО, «KILL_STOP_ORDER» – снять стоп-заявку, «KILL_ALL_ORDERS» – снять все заявки из торговой системы, «KILL_ALL_STOP_ORDERS» – снять все стоп-заявки, «KILL_ALL_NEG_DEALS» – снять все заявки на внебиржевые сделки и заявки на сделки РЕПО, «KILL_ALL_FUTURES_ORDERS» – снять все заявки на рынке FORTS, «MOVE_ORDERS» – переставить заявки на рынке FORTS, «NEW_QUOTE» – новая безадресная заявка, «KILL_QUOTE» – снять безадресную заявку, «NEW_REPORT» – новая заявка-отчет о подтверждении транзакций в режимах РПС и РЕПО, «SET_FUT_LIMIT» – новое ограничение по фьючерсному счету
А как быть, если я хочу акцептовать уже существующую чужую заявку? (например, заявка на продажу 100 штук Сбера и я хочу их из этой заявки купить, а не ставить свою заявку на покупку 100 штук)
Ищу-ищу, но пока не нашёл.
Какую функцию нужно использовать, подскажите плиз направление, куда копать?
Вы ничего не путаете? Это же биржевая торговля.
Так и что? В чём проблема? Я человек простой: вижу заявку - покупаю.
Если я могу сделать это руками в стакане - почему я не могу сделать это программно?
1. Руками выставить заявку я могу и программно выставить заявку я могу. 2. Руками акцептовать чужую заявку я могу а программно акцептовать чужую заявку я НЕ могу.
Либо я не нашёл нужной функции, либо пробелы в функционале.
В целом понятно, как она работает. Из описания видно, что она может выполнять следующие транзакции: «NEW_ORDER» – новая заявка, «NEW_NEG_DEAL» – новая заявка на внебиржевую сделку, «NEW_REPO_NEG_DEAL» – новая заявка на сделку РЕПО, «NEW_EXT_REPO_NEG_DEAL» – новая заявка на сделку модифицированного РЕПО (РЕПО-М), «NEW_STOP_ORDER» – новая стоп-заявка, «KILL_ORDER» – снять заявку, «KILL_NEG_DEAL» – снять заявку на внебиржевую сделку или заявку на сделку РЕПО, «KILL_STOP_ORDER» – снять стоп-заявку, «KILL_ALL_ORDERS» – снять все заявки из торговой системы, «KILL_ALL_STOP_ORDERS» – снять все стоп-заявки, «KILL_ALL_NEG_DEALS» – снять все заявки на внебиржевые сделки и заявки на сделки РЕПО, «KILL_ALL_FUTURES_ORDERS» – снять все заявки на рынке FORTS, «MOVE_ORDERS» – переставить заявки на рынке FORTS, «NEW_QUOTE» – новая безадресная заявка, «KILL_QUOTE» – снять безадресную заявку, «NEW_REPORT» – новая заявка-отчет о подтверждении транзакций в режимах РПС и РЕПО, «SET_FUT_LIMIT» – новое ограничение по фьючерсному счету
А как быть, если я хочу акцептовать уже существующую чужую заявку? (например, заявка на продажу 100 штук Сбера и я хочу их из этой заявки купить, а не ставить свою заявку на покупку 100 штук)
Ищу-ищу, но пока не нашёл.
Какую функцию нужно использовать, подскажите плиз направление, куда копать?
С помощью функции getItem(STRING TableName, NUMBER Index) можно обратиться к произвольной таблицы Рабочего места QUIK и получить информацию о данных из строки с номером «Index» из таблицы с именем «TableName».
Для решения описанной Вами задачи необходимо обратиться к таблице "securities" и получить коды для инструментов из интересующего класса (например, TQCB). Код может выглядеть так (с записью кодов инструментов в .txt-файл):
Код
sec = ""
for i = 0 , getNumberOf ( "securities" ) - 1 do
if getItem ( "securities" , i).class_code = = "TQCB" then
sec = sec .. getItem ( "securities" , i).code .. "\n"
end
end
f = io.open ( "tqcb.txt" , "w" )
f:write(sec)
f:close()
Более подробная информация о функциях для обращения к данных таблиц Рабочего места QUIK и структурах данных представлена Руководстве пользователя QLua.
Функция getParamEx() принимает на вход 3 параметра: class_code ( код класса ), sec_code ( код инструмента ), param_name (наименование параметра из Таблицы текущих торгов).
Посмотреть код класса и код инструмента можно в Рабочем месте QUIK, открыв окно информации об инструменте ( ПКМ по интересующему инструменту в Таблице текущих торгов / И нформация об инструменте , или сочетание Alt+I ).
Спасибо - всё получилось.
Это хорошо, что код инструмента совпадает с ISIN. Это правильно.
К сожалению, для ОФЗ это не так :(((
ISIN и код инструмента не совпадают! (ну как так-то?)
А как можно получить коды инструмента для ОФЗ списком? Или судьба моя вручную их из квика выковыривать по одному?
Функция getParamEx() принимает на вход 3 параметра: class_code ( код класса ), sec_code ( код инструмента ), param_name (наименование параметра из Таблицы текущих торгов).
Посмотреть код класса и код инструмента можно в Рабочем месте QUIK, открыв окно информации об инструменте ( ПКМ по интересующему инструменту в Таблице текущих торгов / И нформация об инструменте , или сочетание Alt+I ).
Спасибо - всё получилось.
Это хорошо, что код инструмента совпадает с ISIN. Это правильно.
Пытаюсь использовать getParamEx для облигаций, но похоже не понял, что нужно ставить в параметр SECCODE.
Попытка поставить туда ISIN облиги ничего не даёт.
В качестве CLASSCODE я перепробовал: TQOB TQOS TQNO PSOB PSNO
Где брать SECCODE и CLASSCODE для облигаций, подскажите плиз?
И вообще - правильно ли я делаю? Код:
Код
stopped = false
function OnStop(s)
stopped = true
end
function main()
t = getParamEx("TQOB", "RU000A100HE1", "LONGNAME")
if not t then
message("error!", 3)
return
end
message("type="..t.param_type.."\nvalue="..t.param_value.."\nimage="..t.param_image.."\nresult="..t.result)
sleep(5000)
end