Не получается получить информацию по фьючерсу MXH7_2017.
Перепробовал уже все способы, а ответ приходит пустой. Может кто сталкивался, подскажите, что в запрос подставлять? Я так понимаю, что это на MOEX ISS какая-то трабла при переходе на новое обозначение SECID.
Мой код запроса на Python _https://pastebin.com/YFcr8Py8
URL запросы по MXH7_2017 тоже не проходят.
iss.moex.com/iss/securities/MXZ6_2016 Прекрасно работает
iss.moex.com/iss/securities/MXH7_2017 Возвращает пустые значения
iss.moex.com/iss/securities/MXH7 Возвращает пустые значения
Сделал нейросеть для прогноза цены фьючерса RTS к клирингу на основе точки минимальных выплат по опционам.
Как трактовать результаты — вообще не понимаю. Вроде что-то интересное и есть, если поставить количество эпох более 5000. Ну это по коэффициенту детерминации еще более менее. А по loss и mae, вообще беда.
Кто занимается нейронками, гляньте пожалуйста. Может поставить входной слой LSTM и не перемешивать train, тогда результат будет лучше?
Ссылка на Colab notebook:
colab.research.google.com/drive/1MXjYUVcLMbiiE5hPauNtp9o8VE3QSu8c?usp=sharing
Пишу запросы на MOEX ISS, а там исторические данные(с прошедшей экспирацией) можно получить только с короткими названиями тикеров фьючерсов и опционов. Может кто-то уже писал код, чтобы вытащить дату экспирации из короткого названия тикера? Поделитесь пожалуйста.
Это один из запросов на MOEX:
<code>import requests import apimoex import pandas as pd # request_url = ('http://iss.moex.com/iss/history/engines/futures/markets/options/securities.json?date=2021-12-01&assetcode=RIZ1') request_url = ('http://iss.moex.com/iss/history/engines/futures/markets/options/securities.json?date=2021-12-01&assetcode=RTS') arguments = {'securities.columns': (["BOARDID, TRADEDATE, SECID, OPEN, LOW, HIGH, CLOSE, OPENPOSITIONVALUE, VALUE, VOLUME, OPENPOSITION, SETTLEPRICE"])} with requests.Session() as session: iss = apimoex.ISSClient(session, request_url, arguments) data = iss.get() df = pd.DataFrame(data['history']) df.set_index('SECID', inplace=True) print(df.to_string(max_rows=10, max_cols=15), '\n') df.info()</code>
Написал скрипт на Python, который строит график с точкой минимальных выплат по выбранному фьючерсу. Скрипт основан на библиотеке QuikPy.
Error: [31m The Parser function of type «linkTool» is not defined. Define your custom parser functions as: [34mhttps://github.com/pavittarx/editorjs-html#extend-for-custom-blocks [0mСам я не программист, поэтому на код не ругайтесь )))
Результат выдает в виде графика. Ждать нужно долго ))) Зато потом автообновляется каждые 20 секунд.
Было бы интересно в дальнейшем прогнать исторические значения через машинное обучение с прогнозом цены фьючерса, но не знаю с какой стороны к этому подступиться. Может кто может посоветовать хорошее )))
Посмотрев одно видео, пришла мысль посмотреть на точку минимальных выплат по опционам. Т.к. никогда на это не смотрел, решил спросить у более опытных людей. Насколько это перспективное направление?
Кто использует QuikPy, подскажите по коду.
Некоторые запросы обрабатываются прекрасно, а некоторые не обрабатываются.
Почему?
Пример не рабочих запросов:
<code>ba = qpProvider.GetParamEx(classCode, secCode, 'OPTIONBASE')['data']['param_value'] # Базовый актив option_type = qpProvider.GetParamEx(classCode, secCode, 'OPTIONTYPE')['data']['param_value'] long_name = qpProvider.GetParamEx(classCode, secCode, 'LONGNAME')['data']['param_value'] # Длинное имя print(f'{ba=}, {option_type=}, {long_name=}') # Не работает, выводит '0.000000'</code>
Полный код на pastebin.com/bXa9aVqh
Приветствую всех!
Сам я не программист, но решил написать скрипт, который будет выводить табличку по доходности синтетических облигаций (покупка акций/продажа фьючерса). Идея в получении дохода от контанго. Скрипт работает и табличка выводится, но через некоторое время появляется ошибка о недостатке памяти.
Подскажите, что я сделал не так?
<code>-- ©2022 by Aleksey Manin -- Таблица расчета доходности синтетической облигации -- Какие инструменты(тикеры) отслеживаем. Таблица пар тикер - площадка tickers = {GAZP = {GAZP = "TQBR", GZZ2 = "SPBFUT"}, SBER = {SBER = "TQBR", SRZ2 = "SPBFUT"}, PLZL = {PLZL = "TQBR", PZZ2 = "SPBFUT"}, GMKN = {GMKN = "TQBR", GKZ2 = "SPBFUT"}, LKOH = {LKOH = "TQBR", LKZ2 = "SPBFUT"}, AFLT = {AFLT = "TQBR", AFZ2 = "SPBFUT"}, NVTK = {NVTK = "TQBR", NKZ2 = "SPBFUT"}, YNDX = {YNDX = "TQBR", YNZ2 = "SPBFUT"}, --MOEX = {MOEX = "TQBR", MXZ2 = "SPBFUT"}, ALRS = {ALRS = "TQBR", ALZ2 = "SPBFUT"}, VTBR = {VTBR = "TQBR", VBZ2 = "SPBFUT"}, SNGS = {SNGS = "TQBR", SNZ2 = "SPBFUT"}, MGNT = {MGNT = "TQBR", MNZ2 = "SPBFUT"}, NLMK = {NLMK = "TQBR", NMZ2 = "SPBFUT"}, MTSS = {MTSS = "TQBR", MTZ2 = "SPBFUT"}, ROSN = {ROSN = "TQBR", RNZ2 = "SPBFUT"}} rows = {} -- Список строк в таблице по количеству тикеров oblig_t = AllocTable() -- Указатель на саму таблицу stopped = false -- Остановка скрипта -- Функция вызывается перед вызовом main function OnInit(path) AddColumn(oblig_t, 0, "Ticker_BA", true, QTABLE_STRING_TYPE, 8) -- "Ticker"- название первого столбца в таблице AddColumn(oblig_t, 1, "Lot_BA", true, QTABLE_INT_TYPE, 8) -- AddColumn(oblig_t, 2, "Ask_BA", true, QTABLE_DOUBLE_TYPE, 10) -- AddColumn(oblig_t, 3, "Ticker_F", true, QTABLE_STRING_TYPE, 10) -- AddColumn(oblig_t, 4, "Lot_F", true, QTABLE_INT_TYPE, 8) -- AddColumn(oblig_t, 5, "Bid_F", true, QTABLE_DOUBLE_TYPE, 10) -- AddColumn(oblig_t, 6, "Day_EXP", true, QTABLE_INT_TYPE, 10) -- AddColumn(oblig_t, 7, "Date_EXP", true, QTABLE_DATE_TYPE, 15) -- AddColumn(oblig_t, 8, "Dohod%", true, QTABLE_DOUBLE_TYPE, 10) -- AddColumn(oblig_t, 9, "Dohod", true, QTABLE_DOUBLE_TYPE, 10) -- CreateWindow(oblig_t) -- Создание окна таблицы SetWindowCaption(oblig_t, "Синтетическая облигация") -- Даем название таблице for ticker, two in pairs(tickers) do -- Перебираем пары БА-Фьючерс rows[ticker] = InsertRow(oblig_t, -1) -- Заносим тикер в список строк end end function Run() for ticker, two in pairs(tickers) do -- Перебираем пары БА-Фьючерс ask_ba = 0.0 bid_f = 0.0 lot_f = 0 for ticker_two, board in pairs(two) do -- Перебираем Тикеры внутри пары БА-Фьючерс if ticker == ticker_two then -- Если Тикер БА SetCell(oblig_t, rows[ticker], 0, ticker_two) -- Заполняем ячейке Тикера БА SetCell(oblig_t, rows[ticker], 1, -- Заполняем лот БА string.format("%u", getParamEx (board, ticker_two, "LOTSIZE").param_value)) ask_ba = getParamEx (board, ticker_two, "OFFER").param_value SetCell(oblig_t, rows[ticker], 2, string.format("%.2f", ask_ba)) -- Аск БА else -- Если Тикер фьючерса SetCell(oblig_t, rows[ticker], 3, ticker_two) -- Заполняем ячейку Тикера фьючерса lot_f = getParamEx (board, ticker_two, "LOTSIZE").param_value SetCell(oblig_t, rows[ticker], 4, string.format("%u", lot_f)) bid_f = getParamEx (board, ticker_two, "BID").param_value SetCell(oblig_t, rows[ticker], 5, string.format("%u", bid_f)) day_exp = getParamEx (board, ticker_two, "DAYS_TO_MAT_DATE").param_value SetCell(oblig_t, rows[ticker], 6, string.format("%u", day_exp)) SetCell(oblig_t, rows[ticker], 7, string.format("%u", getParamEx (board, ticker_two, "MAT_DATE").param_value)) --message('Дата:'..getParamEx (board, ticker_two, "MAT_DATE").param_type) end end sum_ba = ask_ba * lot_f --message('Тикер:'..ticker..' lot_f:'..lot_f..' sum_ba:'..sum_ba) sum_year = (bid_f - sum_ba) / day_exp * 365 percent = sum_year * 100 / sum_ba SetCell(oblig_t, rows[ticker], 8, string.format("%.2f", percent)) SetCell(oblig_t, rows[ticker], 9, string.format("%.2f", bid_f - sum_ba)) end end -- Функция вызывается перед остановкой скрипта function OnStop(signal) stopped = true end -- Функция вызывается перед закрытием квика function OnClose() stopped = true end; -- Основная функция выполнения скрипта function main() while not stopped do Run() sleep(10) end end</code>
Пришло вот такое письмо из БКС.
Спасибо за то, что пополнили счёт в БКС! В Компанию БКС поступили денежные средства. К сожалению, мы не смогли зачислить их на ваш индивидуальный инвестиционный счёт ввиду того, что процедура передачи информации по счетам ИИС от предыдущего брокера на этапе завершения. Зачислить денежные средства возможно после полной передачи информации нам. От вас для этого дополнительных действий не требуется. Для того чтобы вам не ожидать завершения процедуры и мы могли вернуть денежные средства обратно вам в банк-отправитель, с которого был осуществлен платеж, просим вас, пожалуйста, подать уточнение на возврат в личном кабинете БКС Мир Инвестиций. Для вашего удобства во вложении к письму прикреплена инструкция, поясняющая, как это сделать.
Хотя в Альфе ИИС закрыт месяц назад.
Только у меня такое или еще кто есть?
Главное, что БКС о такой подставе даже не предупредил, я бы не продавал активы на обычном брокерском счете.