Андрей написал: Добрый день, у меня вопросы по получению данных опционов: 1) Как можно получить параметр подразумеваемой волатильности для выбранного страйка, или же в целом улыбку (ImplyedVolatility) 2) Как можно получить данный параметр за прошлое время ?
Цель - хочу построить график ATM волатильности для базового актива.
Добрый день, у меня вопросы по получению данных опционов: 1) Как можно получить параметр подразумеваемой волатильности для выбранного страйка, или же в целом улыбку (ImplyedVolatility) 2) Как можно получить данный параметр за прошлое время ?
Цель - хочу построить график ATM волатильности для базового актива.
По функционалу см. Руководство пользователя QUIK: раздел 6. "Совместная работа с другими приложениями", п. 6.10. "Импорт транзакций через API" по ссылке .
Благодарю. Подскажите еще, есть ли какая то страница где выкладываются обновления по данной библиотеке ? Или же всегда по запросу ее можно только получить ?
Добрый день. Меня интересуют следующие вопросы (знаю тема не нова кто использует библиотеку просьба не кидаться кетчупом)
1) Где найти страницу с приложенной последней актуальной версией библиотеки trans2quik.dll (и в идеале возможность выбора версий в зависимости от версии терминала) ? 2) Есть ли где либо (в гите / или на сайте) примеры взаимодействия C# и квика через trans2quik.dll ? 3) Поддерживает ли библиотека стандарт .net 2.0 ? (в частности интересует работа с верcисями .net 6 или .net 8 версия C# 10 или 11) 4) Где найти страницу по подобию "GetStarted" ? 5) Есть ли документация / описание функций / возможностей ? Где ее найти ?
Подскажите как квик выворачивает волатильности бида и аска ? То что улыбка транслируется биржей - я знаю, меня интересует именно подсчет волатильности по ценам.
Я в своей программе считаю волатильность через метод Ньютона Рафсона, получается хорошо для опционов дата экспираций которых достаточно сильно оттдалена от текущего момента. , однако для опционов которые экспирируются завтра - расчет разительно расходится с данными квика. Подскажите как Вы считаете волатильность по переданной цене ?
Игорь Б, Нет, мне нужно не в потоковом режиме (описанная тобой функция же поэтапно "в режиме реального времени" предоставляет инфу). Мне же нужна функция, которая бы при каждом вызове давала информацию о направлении последней сделки (работающая не как коллбек, а как функция выдающая значение даже на нелеквиде за последнюю сделку) - для этого из таблицы тягать буду это значение, а что бы делать это, нужна подписка на тики
Но это мы уже отклонились от заданного мною вопроса, я не про тики конкретно спрашивал, а вовсе про CreateDataSource
Тики в другом скрипте нужны (пишу на С++ обертку для функций торгующих, и там в одной из функций планируется возвращать направление предыдущей сделки (нужна подписка на обезличенные сделки) по этому тики нужны, так как при их заказе (судя по информации с данного форума) создается подписка на обезличенные сделки).
Доброго времени суток, вопрос следующий: Создает ли CreateDataSource источник данных если его запустить во внерабочее время ?
Дело в том, что в моих скриптах ,всегда когда я создаю источник данных перед началом сессии или же во внерабочее время (по фьючерсам имею ввиду, к примеру во время клиринга или же ночью) то Size() всегда зависает равным 0. После я перезапускаю обычно скрипт когда начинаются торги.
Если не перезапускать скрипт, то тогда изменится ли Size() на адекватное значение и пойдут ли котировки ? Или же обязательно нужно перезапускить (либо програмно раз в пару мин к примемеру проверять создался ли источник данных и пересоздавать его вновь если значение size() все еще равно нулю ?)
Дабы не быть голословным вот пример:
Код
main = function()
class_code = "SPBFUT";
sec_code = "RIU8";
ds, Error = CreateDataSource(class_code, sec_code, 0)
while (Error == "" or Error == nil) and ds:Size() == 0 do sleep(1) end; -- вот в этом цикле зависает скрипт если во внерабочее время запустить данный пример. Зависает из за того что size() == 0
ds:SetEmptyCallback();
message("Источник создан");
end;
Вполне возможно он все таки сам выйдет из этого цикла, но у меня не когда не хватало терпения это проверить, сразу же перезапускал.
Похоже все таки какая то ошибка происходит во время стыковки с квиком, так как для фьючерсов описанный мною способ работает верно, а вот для акций - возвращает не верное значение запрашиваемого параметра.
Как уже писал в данной теме, я не смог удалить ордер из за того, что не получилось передать в качестве параметра требуемый order_num.
Когда я протестировал два одинаковых скрипта (один на чистом lua, а другой на lua_CApi ) - то обнаружил интересную закономерность (либо я криворукий... поправте в случае нахождения ошибки) первый скрипт - на qlua - возвращает верное значение lua_CApi. Второй (скрипт близнец) - на С++ с использованием lua_CApi - возвращает значение order_num: -2147483648
Ниже представляю оба тестовых скрипта: большая просьба как к админам, так и просто к тем кто пишет ботов на С++ так же как и я поправить или же прокомментировать мои ошибки, или же как можно обойти встречную мною ситуацию:
Qlua:
Код
function main()
for i = getNumberOf("orders")-1,0,-1 do
T = getItem("orders",i);
if T.sec_code == "ROSN" and
bit.test(T.flags,0) then
message(tostring(T.order_num));
end;
end;
end;
Кстати говоря, написал вам тут как делаю, после сам интереса рази пересобрал все быстро в Луа - и понял что поспешил позоже. (луа скрипт сработал в отличии от моего), придется свое творение дебагить получше
double count_time_diff(std::chrono::time_point<std::chrono::system_clock> t)
{
auto end = std::chrono::system_clock::now();
std::chrono::duration<double> elapsed_seconds = end - t;
return elapsed_seconds.count();
}
bool deleteOrder(Symb_data params, int order_num, bool is_stopOrder, lua_State *L)
{
lua_settop(L, 0);
bool ans = false;
Ttransaction T(L, params);
int trans_id = T.trans_id();
T.classcode();
T.seccode();
if (is_stopOrder)
{
T.action(order_Action::KILL_STOP_ORDER);
T.stop_order_key(order_num);
}
else
{
T.action(order_Action::KILL_ORDER);
T.order_key(order_num);
}
std::string res = sendTransaction(T);
if (res.compare("") == 0)
{
ans = true;
auto doLoop = [&]()
{
bool ans = false;
std::vector<OrderData> orders;
if (get_Orders_Info(orders, params))
{
for (size_t i = 0; i < orders.size(); i++)
{
if (orders[i].trans_ID == trans_id)
{
ans = true;
break;
}
}
}
return ans;
};
auto start = std::chrono::system_clock::now();
while (count_time_diff(start) <= 30 && doLoop())
{
Sleep(1);
}
if (doLoop())
ans = false;
}
else
{
res = "Ошибка удаления ордера:\n " + res;
msg_ToQuik(L, res, 3);
}
return ans;
}
Да, хоть я и пишу на С++, но все работает. Данная функция справляется со своими задачами на фьючерсах, а вот лимитку на акциях удалить не получается...
Вопрос №1 В каких случаях дата жкспирации может равняться "-1" ? (имеются ввиду поля таблиц где она как число представлена) Вопрос №2 Почему возвращается дата экспирации равная "1601.01.01 00:00:00" даже в случае когда ордер выставлен не как "До отмены", а как "До определенной даты"?
По инструменту открыта лимитка на покупку. счет правда демка Ваша, но думаю это не должно влиять на правильность работы функции.
Следующий код от чего то показывает что поле order_date_time == nil Подскажите в чем может быть причина ?
Код
function main()
for i = getNumberOf("orders")-1,0,-1 do
T = getItem("orders",i);
if T.sec_code == "SiM8" and
bit.test(T.flags,0) then
message(tostring(T.order_date_time));
end;
end;
end;
0,02 - стоимость шага цены на РТС, на бренд должно быть в спецификации где то указано. Курс доллара - берется на вечернюю сесиию. (как то раз для тестов пробовал переводить по данной формуле РТС в рубли, на бирже где то была выкладка курсов для перевода, ну и квик сигнализирует постоянно о них но где таблично эти значения взять - не знаю).
Борис Гудылин написал: Определитесь, что же Вам надо на самом деле - количество открытых позиций или количество совершенных сделок.
Это старая тема, тогда нужны были тики, сейчас OI. А в целом это и много еще чего в дальнейшем возможно понадобится.
Цитата
Борис Гудылин написал: Для дневок будет 1 (одна) свечка. Разработчики обоснуют - почему.
С отрисовкой графиков все в порядке, если на реале и должна быть одна свечка на дневном графике, то тогда только вопрос к разработчикам (от чего так ???) Демка мне нужно то только для теста правильности срабатывания функций торговли, а не для тестов робота)
Дабы не плодить лишние темы, спрошу здесь, в чем может быть ошибка (на вашей демке на сей раз) в этом вот скрипте, стараюсь получить OI по дневному графику:
Код
DS = {};
function main()
DS.oi, err = CreateDataSource("SPBFUT", "RIM8", 1440,"numtrades");
while (err == "" or err == nil) and DS.oi:Size() == 0 do sleep(1) end;
message(tostring(DS.oi:Size()));
end;
Проблема та же. На реальном счете, нету зависаний в цикле, однако вместо этого возвращается размер равный 1, хоть данных более чем достаточно. (точно больше одной свечи на дневном графике)))
В инструкции сказано, что данное поле мажет содержать следующие типы данных :
«1» - DOUBLE;
«2» - LONG;
«3» - CHAR;
«4» - перечислимый тип;
«5» - время;
«6» - дата
Меня интересует как представляются последние два типа данных ? Структура(если да, то какие конкретно поля в ней) или же числовое значение ? (к примеру дата в Unix формате).
Благодарю за отзыв, попробую повозиться. Ищу просто альтернативу виндовс хостингу (для алгоритмической торговли) Линукс хостинги вроде за те же деньги более интересные варианты предлагают. Вот и задумался над подобной стыковкой.
MT5 кстати на линукс не ставили случаем? он мне тоже понадобится
Доброго времени суток, хотелось бы узнать есть ли надежный способ поставить Quik на линукс системы (Debian, Ubuntu...) Какие зависимости нужны будут и не будет ли глючить. Так же интересно будет ли работать Lua и стыковки Lua + C++ dll при банной установки. Возможно где то есть готовая инструкция по подобной установке ?
Данный вопрос уже поднимался на форуме, однако у меня он возник вновь. Я выгрузил параметры из таблицы текущих торгов, однако хотелось бы узнать какие из них лишние? К примеру ISIN-код бумаги явно не вписывается в концепцию источников данных... Возможно существует готовый и отредактированный список ? У меня получилась следующая выгрузка,:
оформление таблицы съехало. но в общем разобраться можно. (переменная, описание как оно уже есть, тип принемаемый полем, тип Луа, тип С++ (так как я к примену на плюсах пишу и с Луа стыкую))
2) К таблицам добавить типы данных каждой из строк таблицы
Уточните, что здесь имеется ввиду под типами данных?
Цитата
3) Сделать описание типов данных к таблице для функции sentTransaction (я знаю что там все в виде строк передается, но нужно сделать описание исходных типов данных)
Значения полей соответствуют параметрам, описанным в Руководстве пользователя QUIK, в разделе «Формат .tri-файла с параметрами транзакций».
опишу на небольшом примере. И так по всем таблицам, переменным...
1) Сделать как можно больше примеров (по возможности на каждую из функций)
2) К таблицам добавить типы данных каждой из строк таблицы
3) Сделать описание типов данных к таблице для функции sentTransaction (я знаю что там все в виде строк передается, но нужно сделать описание исходных типов данных)
4) перенести Api Qlua на С++. (это даст пользователям куда больше возможностей для написания роботов и этим Вы сможете несколько упрочить свои позиции на рынке. ведь тот же Mql5 и то более удобен для написания роботов. НО НЕ ДЕЛАЙТЕ еще один Mql5! Этих специализированных языков (которые не дают возможности сделать что то кроме своей узкой задачи и так полно...) ).
Я знаю что все поля заполняются как строки, но мне нужно знать каков изначальный тип данных (я позже перевожу его в строковый формат)
Подскажите какому типу соответствует значение следующих полей (и до какого знака нужно их округлять, если тип double или float): START_DISCOUNT LOWER_DISCOUNT UPPER_DISCOUNT PARTNER SETTLE_CODE REPOTERM REPORATE REFUNDRATE SETTLE_DATE - интересует формат даты в строке "YYYYMMDD" ? BASE_ORDER_KEY VOLUMEMN VOLUMEPL KFL KGO
Я не люблю луа, так что с ним приходится только для примеров сталкиваться. делаю сейчас для себя некий API простенький для подключения к квику из С++. А Луа использую только что бы примеры функций написать (а далее их уже переписываю на плюсах). Так что с отладчиком не помогу к сожалению.