Алексей Манин

Читают

User-icon
17

Записи

22

Вопрос по MOEX ISS.

Не получается получить информацию по фьючерсу 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 Возвращает пустые значения


Машинное обучение и точка минимальных выплат по опционам.

В продолжение. После обучения нейронки по прогнозированию цены фьючерса на конец торговой сессии по точке минимальных выплат опционов, решил попробовать другие методы машинного обучения. Сделал без подбора параметров. Результат уступает нейронке (но нейронку я долго гонял и подбирал конфигурацию). 
Если кто-то может посоветовать подбор параметров, то напишите пожалуйста.
Также интересно как реализовать кросс валидацию на нейронке.

Ссылка Colab Notebook по машинному обучению:
drive.google.com/file/d/1SY3qrqMF7XD4WDqoDCfzFexLe4LXeNZZ/view?usp=sharing

Нейросеть и точка минимальных выплат.

Сделал нейросеть для прогноза цены фьючерса RTS к клирингу на основе точки минимальных выплат по опционам.

Как трактовать результаты — вообще не понимаю. Вроде что-то интересное и есть, если поставить количество эпох более 5000.  Ну это по коэффициенту детерминации еще более менее. А по loss и mae, вообще беда.

Кто занимается нейронками, гляньте пожалуйста. Может поставить входной слой LSTM и не перемешивать train, тогда результат будет лучше?

Ссылка на Colab notebook:

colab.research.google.com/drive/1MXjYUVcLMbiiE5hPauNtp9o8VE3QSu8c?usp=sharing


Python. Как получить дату экспирации?

Пишу запросы на 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.

pastebin.com/FNNxSs52

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.

Кто использует 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


Синтетическая облигация. Помогите с Qlua.

Приветствую всех!

Сам я не программист, но решил написать скрипт, который будет выводить табличку по доходности синтетических облигаций (покупка акций/продажа фьючерса). Идея в получении дохода от контанго. Скрипт работает и табличка выводится, но через некоторое время появляется ошибка о недостатке памяти.

Подскажите, что я сделал не так?

Синтетическая облигация. Ошибка памяти.
<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>
  • обсудить на форуме:
  • Quik Lua

Проблемы с пополнением ИИС у БКС

  Пришло вот такое письмо из БКС.

Спасибо за то, что пополнили счёт в БКС! В Компанию БКС поступили денежные средства. К сожалению, мы не смогли зачислить их на ваш индивидуальный инвестиционный счёт ввиду того, что процедура передачи информации по счетам ИИС от предыдущего брокера на этапе завершения. Зачислить денежные средства возможно после полной передачи информации нам. От вас для этого дополнительных действий не требуется. Для того чтобы вам не ожидать завершения процедуры и мы могли вернуть денежные средства обратно вам в банк-отправитель, с которого был осуществлен платеж, просим вас, пожалуйста, подать уточнение на возврат в личном кабинете БКС Мир Инвестиций. Для вашего удобства во вложении к письму прикреплена инструкция, поясняющая, как это сделать.

Хотя в Альфе ИИС закрыт месяц назад.

Только у меня такое или еще кто есть?

Главное, что БКС о такой подставе даже не предупредил, я бы не продавал активы на обычном брокерском счете.


теги блога Алексей Манин

....все тэги



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