Блог им. qadexys

Пользуется ли кто то API Финам?

    • 29 октября 2024, 13:48
    • |
    • Quntag
  • Еще

Всем привет. 

Потихоньку готовлю инфраструктуру для ухода от терминала Metatrader5 — есть некоторые неудобства при алготрейдинге с десятком торгуемых символов FORTS MOEX. В связи с этим хочу воспользовать API Финама для получения и сохранения котировок фьючерсов срочного рынка (для начала). 
Ориентируясь на библиотеку и разбираясь с интернет запросами столкнулся, что следующий запрос:

{
    "interval": {
        "count": 500,
        "from": {
            "seconds": "1729382400"
        }
    },
    //"security_board": "SPBFUT",
    //"security_code": "RIZ4",
    "security_board": "TQBR",
    "security_code": "SBER",
    "time_frame": "INTRADAYCANDLE_TIMEFRAME_M1"
}

Является рабочим, данные поступают, OHLC каждой свечи с временной меткой — приходят. 
Но при попытке получить то же для фьючерса RIZ4 — ошибка. И там и там данные хочу получить с 20.10.2024, но для акции SBER успешно, для фьючерса RIZ4 — не успешно. 

Может кто то работал с этим, подскажите, что я делаю не так?

★2
60 комментариев
Не знаю как за API, но на Transaq надо заменить classcode  с SPBFUT, на FUT.Должно заработать.
avatar
Anest, Всё верно. И создатель библиотек подправил проект на гитхабе.
avatar
есть некоторые неудобства при алготрейдинге с десятком торгуемых символов FORTS
Что за неудобства, если не секрет?

Дмитрий Овчинников, 
Добрый день.
Смена символов каждый месяц-квартал. 4 терминала, ~10 символов в каждом, 40 раз «перетянуть» актуальный контракт на «окошко» с символом. Шов между терминалом, ведением статистики торговли, отправкой результатов в телеграм. Хочется чтобы всё было в одной среде и MQL, увы, это не позволяет.

Дмитрий, а у Вас удалось наладить тестирование стратегий на МТ5 от Финама? Интересуют ТФ минутные или тиковые. Раньше пользовался открытием но теперь, к сожалению, тестирую иначе. 

P.S. Вспомнил что ещё. Не нравится держать открытым терминал, в котором открыты все символы. Хочется чтобы было что то полегче, визуальная часть мне перестаёт быть нужна. И тогда сразу требования к платформам (Windows) уходит, требования к ОЗУ снижаются. На арендованном сервере это имеет значение. 

avatar
Quntag, 
Хочется чтобы было что то полегче, визуальная часть мне перестаёт быть нужна. И тогда сразу требования к платформам (Windows) уходит, 
Сорри, этот ваш комметарий раньше не прочел.
Тогда вам действительно Квик никак не подходит. Кроме Transaq коннектора или его эквивалента ничего и не придумаешь. Зато, хошь Питон, хошь JS, хош под Винду, хошь под Линукс. Новый Питон3.13 оч шустрый стал, но под него еще не все либы подогнали.
avatar
Quntag, 
да, экспирация конечно это черные дни рабского однообразного труда, я всегда чертыхаюсь. Зато дает ощущение «работы». 
Насчет шва не понял, в MQL есть все возможности по экспорту данных.
Тестирование наладил с небольшими нюансами. Точнее с большими нюансами, но, наверное, я к ним уже привык.
Про версию терминала для алго я давно ною, но кого это интересует в MQ? Им бы побольше рюшечек туда налепить, это стандартный путь любого ПО. Сервер у меня с большим запасом, так что это скорее просто нытье.

Дмитрий Овчинников,
Единственная возможность MQL по экспорту — формирование csv со сделками. Этим только и пользуюсь. Но как только хочется что то большее то он мне не помогает. 
У меня по одному символу торгуются и лонги и шорты. Покажи мне сделки за месяц на одном графике по двум направлениям? Не может. 
Покажи мне эквити с фактором восстановления, за год торговли? Нет. 
Отправь мне таблицу, где написано, сколько я заработал по дням, неделям, месяцам? Тоже нет. 

Они сделали очень красивый отчётик, который можно сформировать в терминале, но не дают вообще никаких возможностей напрямую работать котировками и отображать чего я хочу, и в целом не дают отображать графики, не относящиеся к OHLC. 

Не очень хочется называть это нытьём, в конце концов у вас оно своё, у меня своё. Но под свои задачи языка MQL мне маловато, а с необходимостью поиска костылей для теста захотелось работать с котировками самому. К тому же эффективность и скорость тестирования в МТ тоже вызывала вопросы — по крайней мере в моей стратегии за один прогон я могу сделать больше, чем МТ.
avatar
Quntag, 
Они сделали очень красивый отчётик, который можно сформировать в терминале
На ЕБС он показывает дикую дичь, бесполезная вещь.
Единственная возможность MQL по экспорту — формирование csv со сделками. Этим только и пользуюсь. Но как только хочется что то большее то он мне не помогает. 
Написал скрипт, в котором из истории сделок делается то, что мне необходимо, далее в csv. Но я не визуал, меня от графиков тошнит, мне интереснее таблицы с цифрами разглядывать.

А в целом да, если вы программист, тогда надо делать свой велосипед. Можно применить бэкграунд ;)
Дмитрий Овчинников, 
Ну вот тем более, отчёт красивый, но бесполезен. 
У меня тоже всё началось с написания скрипта:)
avatar
Были посты, где сильно ругали коннектор Финама. Че-то там было критически важное. Т.к. не использую, в подробности не вникал.
Вообще-то, даже собирался использовать, но все недостатки в совокупности меня остановили.
Пожалуй, основной, это наличие только у одного брокера — прикован к нему как цепями. Я это проходил с АПИ Альфы — кончилось АПИ, и все многолетние наработки коту под хвост. Многое так и не было восстановлено.
avatar
3Qu, для этого можно использовать платформы. Ушел один тип подключения — перешел на другой. Собрал у себя знаменитый опен сорс osaengine.ru/
avatar
Gambler , так-то оно так, но непонятно, что дает Енжина, по сравнению с просто подключением, скажем, через вебсокет. Где цимес?
Я, конечно, не оч в курсе, но по Енжине сразу ограничивается функциональность подключения. Универсальность всегда дает ограничения.
avatar
3Qu, ахаха, сайт посмотрите, вы меня с кем-то путаете. А не с той Осы, у меня другой сайт. Свободный от маркетинга и объективный.

А дает то, что вы написали. Не мучаться с переходом на другое АПИ, что возможно даже в рамках одного брокера.
avatar
Gambler , т.е., к Алексу Ван с его OS Engine вы никакого? А я было подумал — дубль.)
Посмотрел ваш сайт и гитхаб, Питон для крипты, смотрю, поддерживается и обновляется. Смотрю и асинхронность, вроде, есть. Поддерживаемые версии Питон только не указаны. И не понял, там и REST API и вебсокеты? Че-то подробностей не нашел.
Я, вообще, софт от Unicorn использую.
avatar
3Qu, нет-нет-нет. Вы всё неправильно поняли ))

osaengine.ru/ это мой сайт. Там каталог готовых платформ. Я никаких программ или платформ не предлагаю. Я занимаюсь описанием и отзывами к программам от других авторов.
avatar
Gambler , то-то я смотрю, че-то не сходится. Теперь понятно.
avatar
3Qu, А что, по Вашему, самое универсальное на РФ рынке? API Квика? API другого брокера? 
Конечно хочется сделать, чтобы надолго и как можно более универсальнее.
avatar
Quntag, к сожалению Квик-Луа. АПИ у Квик нет, но у Луа есть C-API.
Есть сторонние программы для торговли через Квик, все они работают через Луа. OS Engine, например (не единственная) — там все под С#, если не ошибаюсь. Мне она не нравится, но многие говорят, что самое оно.
Кто-то прямо на Луа ТС пишет, но язык больше для сценариев, для работы как самостоятельная программа как-то не оч.
avatar
3Qu, не советуйте Осу. Не работает она. Пришли, получили пачку ошибок, ушли — вот основной сценарий. Код — аховый.
avatar
Просто трейдер, я и не советую. Так и сказал — мне она не нравится.
А чего там еще есть под Квик? S#? — этот смотрел лет 10 назад, ниче не знаю.) Что еще? Разве только самому ДЛЛ писать.
avatar
Quntag, сделайте через какую-то платформу. Я собрал у себя на сайте варианты, работающие с рынком РФ osaengine.ru/ Конкретный API всегда будет менее универсальным решением. Всегда.
avatar
Gambler , для Quntag точнее пожалуйста, там у вас собрано до фига всего.) Сходу не разберешься.)
avatar
Gambler , 
Ну вы же прочитали пост, и увидели, что я пользуюсь библиотекой «FinamPy», ссылка на которую есть у вас на сайте. И да, эта библиотека для конкретного брокера. Совсем универсального пока не нашёл. 
avatar
Quntag, верно. Но есть и универсальные. Первый три, QuantConnect, StockSharp, Backtrader. Причем первые два имеют свой SDK, который можно использовать напрямую из своих программ. Backtrader уже монолит.
avatar
Привязываться к API определенного брокера это все равно что стать его рабом. Или быть кинутым, как кинул меня мой американский форекс брокер Oanda с его API в 2020 году, когда всех россиян попросили на выход. Нужно искать стандартную альтернативу имеющуюся почти у всех брокеров. Самый простой вариант это Quik+Lua.
avatar
Cubigator, 
Самый простой вариант это Quik+Lua.
Ага, самый простой.) К нему еще ДЛЛ и пр. и пр. Замотаешся.
ДЛЛ есть и готовая, можно найти в инете, но она, в общем, для чего-то более менее простенького. Мне не подошла. Там еще начнутся проблемы с потоками, на чем Квик виснет целиком.
avatar
3Qu, DLL в моих роботах не используются. Все функции работы с Quik встроены в Lua. Только в скрипте который логинится к серверу используется DLL для поиска кнопки коннект в Quik и формы ввода пароля.
С потоками да, в LUA это проблемно, но это уже не простой скрипт будет, и ничего не мешает запускать для каждого алгоритма и для каждого инструмента свой отдельный скрипт. У меня постоянно висят 15 штук, не на самой мощной виртуалке и ничего не виснет.
avatar
Cubigator, т.е., вы непосредственно в ЛУА ТС делаете? А события в main() перекладываете и уже там их обрабатываете?
avatar
3Qu, Ничего никуда не перекладываю. Все события развиваются в цикле while is_run в main()
avatar
Cubigator, эт я уже понял.
Не понял, откуда в main() берутся данные подписок на котировки, установки и срабатывания заявок и пр. Они же не сами там появляются.)
Я-то их через ДЛЛ получал и там по потокам разводил.
Просто интересно, сейчас я на другой бирже, без Квик, через вебсокеты.
avatar
3Qu, даные считываются из открытого в Quik графика
local tabCurCandles = getCandlesByIndex(ID_Graph, 0, x-MaxPer-2, MaxPer+1) — выборка свечей
Стакан читается
              local ask_price,bid_price = 0,0
              ql2 = getQuoteLevel2(class_code, sec_code) — стакан
              if ql2.offer~=nil and ql2.bid~=nil then
                ask_price=tonumber(ql2.offer[1].price)
                bid_price=tonumber(ql2.bid[tonumber(ql2.bid_count)].price)

Позицию открывает 
local result = sendTransaction(transaction) — запрос на сервер для открытия позиции

Все это встроенные в Lua функции.

Проверка срабатывания заявок идет через стандартное событие OnTransReply
function OnTransReply(trans_reply)
  if  trans_reply ~= nil and type(trans_reply) == «table» then
есть еще OnTrade(), но я им не пользуюсь.
avatar
Cubigator, я немного не о том. Ну, да, ладно.
avatar
Коммуникация между потоками через Linda objects из Lua Lanes нормально работает, в том числе для передачи данных из потока терминала в поток скрипта. Использую уже несколько лет, каких-то серьезных проблем не возникало.
avatar
John Smith, посмотрел
lualanes.github.io/lanes/
И чем это отличается от просто написания ДЛЛ и далее на чем хош? Непонятно, на фига надстройки.
avatar
Оно позволяет без собственных велосипедов легко пробрасывать события в поток скрипта и не нагружать гуёвый поток терминала (и так педальный от рождения). То, что должны были сделать разрабы Квика с самого начала, но до сих пор не сделали.
avatar
John Smith, эт, наверное, да. Но, даже уже по описанию, возникает куча особенностей и проблем. Так не проще ли написать одну лишь ДЛЛ с несколькими единообразными функциями (т.е.,  вариации одного и того же кода), и далее работать со знакомыми потоками С++ или С#, чем разбираться еще и с этим.
avatar
Не, если Lua — лишь тонкая прослойка, то смысла в Lanes может и нет. У меня весь робот на Lua, поэтому Lanes хорошо вписался.

Я тоже сперва огреб немало гемора с многопоточкой, в том числе терминал наглухо зависал, но перенос всей обработки событий полностью в поток скрипта с помощью механизма обмена сообщениями из Lanes их полностью устранил.

В общем, если что, Lanes с квиком дружит, включая создание своих потоков.
avatar
Cubigator, писал ранее про создание алгоритма через GPT smart-lab.ru/blog/1037920.php С тех пор ИИ только поумнел )

А так, мой сайт со сборником всех популярных опен сорсов osaengine.ru/ Если уж и программировать, то через какую-то платформу.
avatar
Я бы попробовал RiZ4 (маленькая «i»).
avatar
Влад Л., Всё таки RIZ4. В первом комменте написано в чём было дело.
avatar
__rtx, 
брать(ГУЙ всегда работает в отдельном потоке
Не знаю в каком там потоке работает ГУИ, но обработка событий в потоке событий (а там только один поток на всех, кроме main), дает полное зависание Квик.
квик делали адекватные коллеги которые понимают..
Сильно сомневаюсь. Одна только темная тема дает задержку времени сервера до неск минут. Говорят, что разработчики уже неск лет не знают причину.
avatar
__rtx, Ваши фантазии увлекательны, но если не знаете не утверждайте. Про адекватность коллег из Квика, зайдите на форум Квика, вам там расскажут про их «адекватность».
avatar
Cubigator, график не обязательно открывать, если создать источник данных из Луа. Он эквивалентно делает подписку на сервер.
avatar
Gambler, Я знаю, но так проще, а значит стабильнее. За полтора года получения данных из графиков не было ни одного сбоя.
avatar
__rtx, Зачем мне проводить этот тест если я его уже провожу полтора года ежедневно? Мои боты работают 24/7 без выходных и праздников, с остановкой только на обновление скриптов или на перегруз сервака. Проблема отсутствия данных после клиринга, о которой вы говорите была обнаружена и решена мною в первые дни после запуска первого бота, и это, кстати, никак не связано перезагруженностью ботов. После, больше не было ни одного сбоя. Даже автоматические перезагрузки сервера во время обновления системы или аварийные ситуации провайдера VDS которые иногда случаются, никак не могут остановить работу скрипта. Он все равно запустится, и даже если были пропущены некоторые действия скрипт самостоятельно все восстановит. Я иногда месяцами не трогаю ничего. Единственное слежу чтобы от скрипта раз в два часа в рабочее время поступали сообщения. Если их не будет, значит что-то не так, но пока все так.
avatar
__rtx, Кто расскажет? Такие же кубигаторы как Вы?)))
Да, тысячи мух не могут ошибаться в определении одной известной субстанции. По поводу адекватности. Для примера задайте им на их форуме вопрос как открыть в графике Quik любой инструмент с истекшим сроком экспирации, например для тестирования стратегии. Сразу скажу, что технически такая возможность в Quik не предусмотрена. Хер вам, а не тесты, но она существует и они даже подскажут как это сделать. И вот как раз этот извращенный до нельзя способ и подтвердит их неадекватность. А сделать это нормальным способом, о котором их годами просят пользователи они неспособны. Ваше пожелание зарегестрировано — идите на юг.

Еще по поводу адекватности разработчиков при реализации автоматического перезапуска скриптов после перезагрузки терминала можно рассказать. Чтобы этого добиться, нужно сделать несколько идиотских действий. Нужно открыть терминал, запустить все нужные скрипты и… нужно закрыть терминал, а потом опять открыть. Только в этом случае Quik запомнит какие скрипты у него должны быть активными. Иначе после аварийного перезапуска системы в Quik ни один нужный скрипт не запустится.  И таких ситуаций еще вагон с тележкой. Адекватность это не про разработчиков Quik и не надо тут заливать. Латают дыры и подпирают костылями только при самые вопиющих проблемах.
avatar
__rtx, Вы читайте внимательнее. ПОСЛЕ, а не ВО ВРЕМЯ клиринга. Какой идиот будет, что-то считывать во время когда идет клиринг? Робот в это время на паузе. Там есть проблема именно на первой свечке ПОСЛЕ клиринга, данные какое-то время считать нельзя, и еще после клиринга иногда меняется количество свечек в графике, а это мега-критично, так как из-за пропущенных свечей может поменяться вся логика. И это тоже нужно учитывать.
Я так понимаю вы вообще великий теоретик, но с практикой беда. Попробуйте выполнить getCandlesByIndex без открытого графика или getQuoteLevel2(class_code, sec_code) без открытого в Quik стакана, тогда поймете что откуда берется. И перестанете писать о ваших домыслах, которые мало коррелируют с реальностью. Особенно было смешно читать ваши рассуждения про черную тему в Quik.  Поверьте людям она намертво кладет Quik это проверенный факт.
avatar
Cubigator, а вы пробовали подход с подпиской Subscribe_Level_II_Quotes? ИИ рекомендует так:

function main()
local class_code = «TQBR»
local sec_code = «SBER»

— Подписываемся на стакан для инструмента
Subscribe_Level_II_Quotes(class_code, sec_code)

message(«Подписка на стакан активирована для »… sec_code)

— Скрипт работает, ожидая обновления данных по стакану
while true do
sleep(1000) — Ожидаем
end

— Отписка (в реальной работе нужно сделать отписку перед завершением скрипта)
— Unsubscribe_Level_II_Quotes(class_code, sec_code)
end

function OnQuote(class_code, sec_code)
— Функция вызывается при каждом изменении в стакане
local order_book = getQuoteLevel2(class_code, sec_code)
if order_book then
— Обработка данных по стакану, например, вывод данных о лучшей заявке на покупку и продажу
message(«Bid Price: »… order_book.bid[1].price… ", Offer Price: "… order_book.offer[1].price)
end
end

avatar
__rtx, 

Попробуйте вместо:
getCandlesByIndex(ID_Graph, 0, x-MaxPer-2, MaxPer+1)

использовать:
getCandlesByIndex(SEC, 0, 100)

Я понял, вы сумасшедший. Вчера, когда вы начали код в чат GPT совать, и неверные ответы бота воспринимали за истину, я думал, что вы просто дебил. Но теперь, после этого совета я уверен в другом.
avatar

теги блога Quntag

....все тэги



UPDONW
Новый дизайн