комментарии Алексей Манин на форуме

  1. Логотип фьючерс MIX
    Вопрос по MOEX ISS.

    Не получается получить информацию по фьючерсу MXH7_2017.

    Перепробовал уже все способы, а ответ приходит пустой. Может кто сталкивался, подскажите, что в запрос подставлять? Я так понимаю, что это на MOEX ISS какая-то трабла при переходе на новое обозначение SECID.

     Мой код запроса на Python _https://pastebin.com/YFcr8Py8

    URL запросы по MXH7_2017 тоже не проходят.



    Авто-репост. Читать в блоге >>>
  2. Логотип Quik Lua
    Синтетическая облигация. Помогите с 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>


    Авто-репост. Читать в блоге >>>
  3. Логотип БКС
    Народ, а с чем связано появление в Quik от БКС лишних акций. Причем ни в мобильном приложении, ни в Web их нет.

  4. Логотип БКС

    Алексей Манин, Слушай, совсем уже отстал от жизни. Даже альфа уже говорит всем, что до конца ничего не переведено и надо подождать с пополнениями счета. А то чуть что подскава бкс. Если иис закрыт то где ваша справка о его закрытии? Есть она — отдайте БКС и дело с концом. НО нет ее, так как не дает ее Альфа и раньше июля выдавать не начнет. А БКС будет нарушать закон активируя вас счет и давая его пополнять ибо это уже два ииса. Ждем Альфу.

    Артур Зайцев, подстава в том, что БКС не предупреждает об ограничениях С ИИС. Насчет справки о закрытии ИИС в Альфе, я её не брал, думаю в современном мире достаточно смс.

  5. Логотип ИИС
    Проблемы с пополнением ИИС у БКС

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

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

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

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

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



    Авто-репост. Читать в блоге >>>
  6. Логотип БКС
    Проблемы с пополнением ИИС у БКС

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

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

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

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

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



    Авто-репост. Читать в блоге >>>
  7. Логотип БКС
    Пришло вот такое письмо из БКС.

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


    Хотя в Альфе ИИС закрыт месяц назад.
    Только у меня такое или еще кто есть?
    Главное, что БКС о такой подставе даже не предупредил, я бы не продавал активы на обычном брокерском счете.

  8. Логотип QUIK
    Данные из QUIK в Python. Построение Дельта графика.
    Данные из QUIK в Python. Построение Дельта графика.Построение нестандартных графиков в Python при помощи библиотеки finplot.
    Можно строить почти любые нестандартные графики: Range, Renco, Delta.
    В качестве примера скрипт для построения Дельта графика.
    График строиться с момента запуска по поступающим данным из таблицы обезличенных сделок.
    Для получения данных из КВИКа используется PythonServer Евгения Шибаева (огромное спасибо автору!!!)

    Тапками не кидайтесь, программировать только учусь.

    # В КВИКе запускаем луа-скрипт QuikLuaPython.lua
    import socket
    import threading
    from datetime import datetime, timezone
    import pandas as pd
    import finplot as fplt
    
    fplt.display_timezone = timezone.utc
    
    
    class DeltaBar():
        def __init__(self):
            self.df = pd.DataFrame(columns='date_time open high low close delta delta_time_sec'.split(' '))
            self.df.loc[len(self.df)] = [0, 0, 0, 0, 0, 0, 0]
    
        def parser(self, parse):
            if parse[0] == '1' and parse[1] == 'RIH1':
                if abs(self.df.iloc[len(self.df) - 1]['delta']) >= 500:
                    self.df.loc[len(self.df)] = [0, 0, 0, 0, 0, 0, 0]  # Добавляем строку в DF
    
                self.df.iloc[len(self.df) - 1]['close'] = float(parse[4])  # Записываем последнюю цену как цену close бара
    
                if self.df.iloc[len(self.df) - 1]['date_time'] == 0:
                    self.df.iloc[len(self.df) - 1]['date_time'] = \
                        datetime.strptime(f'{parse[7]} {parse[8][0:-1]}', "%d.%m.%Y %H:%M:%S.%f").replace(microsecond=0)
    
                if self.df.iloc[len(self.df) - 1]['open'] == 0:
                    self.df.iloc[len(self.df) - 1]['open'] = float(parse[4])
    
                if float(parse[4]) > self.df.iloc[len(self.df) - 1]['high']:
                    self.df.iloc[len(self.df) - 1]['high'] = float(parse[4])
    
                if (float(parse[4]) < self.df.iloc[len(self.df) - 1]['low']) or \
                        (self.df.iloc[len(self.df) - 1]['low'] == 0):
                    self.df.iloc[len(self.df) - 1]['low'] = float(parse[4])
    
                if parse[5] == '1026':
                    self.df.iloc[len(self.df) - 1]['delta'] += float(parse[6])
    
                if parse[5] == '1025':
                    self.df.iloc[len(self.df) - 1]['delta'] -= float(parse[6])
    
                self.df.iloc[len(self.df) - 1]['delta_time_sec'] = \
                    datetime.strptime(f'{parse[7]} {parse[8][0:-1]}', "%d.%m.%Y %H:%M:%S.%f") - \
                    self.df.iloc[len(self.df) - 1]['date_time']
                self.df.iloc[len(self.df) - 1]['delta_time_sec'] = self.df.iloc[len(self.df) - 1]['delta_time_sec'].seconds
    
    
    def service():
        sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        sock.bind(('127.0.0.1', 3587))  # Хост-этот компьютер, порт - 3587
        while True:
            res = sock.recv(2048).decode('utf-8')
            if res == '<qstp>\n':  # строка приходит от клиента при остановке луа-скрипта в КВИКе
                break
            else:
                delta_bar.parser(res.split(' '))  # Здесь вызываете свой парсер. Для примера функция: parser (parse)
        sock.close()
    
    
    def update():
    
        df = delta_bar.df
        # Меняем индекс и делаем его типом datetime
        df = df.set_index(pd.to_datetime(df['date_time'], format='%Y-%m-%d %H:%M:%S'))
        # print(delta_bar.df)
    
        # pick columns for our three data sources: candlesticks and TD
        candlesticks = df['open close high low'.split()]
        volumes = df['open close delta_time_sec'.split()]
        if not plots:
            # first time we create the plots
            global ax
            plots.append(fplt.candlestick_ochl(candlesticks))
            plots.append(fplt.volume_ocv(volumes, ax=ax.overlay()))
        else:
            # every time after we just update the data sources on each plot
            plots[0].update_data(candlesticks)
            plots[1].update_data(volumes)
    
    
    if __name__ == '__main__':
        delta_bar = DeltaBar()
        # Запускаем сервер в своем потоке
        t = threading.Thread(name='service', target=service)
        t.start()
    
        plots = []
        ax = fplt.create_plot('RIH1', init_zoom_periods=100, maximize=False)
        update()
        fplt.timer_callback(update, 2.0)  # update (using synchronous rest call) every N seconds
    
        fplt.show()
    


    Авто-репост. Читать в блоге >>>
  9. Логотип фьючерс ртс
    Исследование движения цены индекса RTS
    Продолжение на тему «волосы» )))
    Исследование по движению цены индекса RTS, после первой свечи за торговую сессию с использованием фильтра в виде среднего первых свечей.
    Фильтр среднего применяется в виде того, что учитываются первые свечи с открытия сессии тела которых больше среднего значения всех первых свечей.


    2020-11-18-170507
    2020-11-18-170620

    Авто-репост. Читать в блоге >>>
  10. Логотип фьючерс ртс
    RTS движение цены
    Движение цены по индексу RTS после первой свечи М5 за 2020 год
    Цены нормализованы (1 — 100%)

    2020-11-17-202218 2020-11-17-202627

    Авто-репост. Читать в блоге >>>
  11. Логотип ошибки смартлаба
    URL
    Тикер бумаги:

    APLE торгуются на бирже СПб. В вашем списке данной акции нет. Не могу добавить в портфель.
Чтобы купить акции, выберите надежного брокера: