Избранное трейдера Юрий

по

Эволюционирующий ИИ

Чуть больше недели назад выступил на AllDerivatives. Рассказывал о моем личном опыте работы с эволюционирующим ИИ и о попытках применения в торговле. Материала засунул, как сейчас понимаю, избыточно много, в результате выступление получилось слегка скомканным, затянутым и поверхностным, но на удивление, люди, присутствовавшие на выступлении говорят, что получилось интересно.

Во-первых, не ждите глубоких секретов, не ждите граалей. Более того, было больше всего про биологию, меньше про программную реализацию и совсем чуть-чуть про трейдинг.

Во-вторых, это не те дроиды, которых вы ищите это совсем не то, что мы используем, во всяком случае на чужих деньгах в реальной торговле.

Но рассказывал я о том, что реально делал в разное время на протяжении многих лет, что меня давно очень интересует и в чем, смею надеяться, чуть-чуть понимаю ;)


Презу на экране видно плохо, но она есть по ссылке в описании.


Шаблон для индикатора Зизаг

Шаблон для индикатора Зизаг


--[[
параметры: 
Procent - процент зигзага 
--]]
Settings={
Name="ZIGZAG_Templ",
Procent=2,
    line=                                     
                {  
					{  
                        Name = "cur1",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(0,0, 0)
                    }				
                }
}

function Init()
  
  y1 = nil
  y2 = nil
  x1 = 1
  x2 = 1
       
  return 1
  
end

function OnCalculate(index)

  de = Settings.Procent

  vl = C(index)
  if index == 1 then 
	y1 = vl
    y2 = vl
  else   
	  if C(index) > y1*(1+de/100) and y1 < y2 then 
	    x2 = x1
	    y2 = y1	
	    x1 = index 
	    y1 = C(index)		
      else 
	    if C(index) > y1 and y1 >= y2 
		then 
	      x1 = index 
	      y1 = C(index)	  			  
	    end 		
	  end 	

	  	  		
	  if C(index) < y1*(1-de/100) and y1 > y2 then 
	    x2 = x1
	    y2 = y1
	    x1 = index 
	    y1 = C(index)				
      else 
	    if C(index) < y1 and y1 <= y2 
		then 
	      x1 = index 
	      y1 = C(index)	  			  
	    end 		
	  end 	
	  	  		
	end 	
  
  if x1 ~= index then 
    curfrom = x1
	curto = index
  else 
    curfrom = x2
	curto = x1
  end 

  if curto ~= curfrom and curfrom ~= nil and curto ~= nil then 
    if C(curto) ~= nil and C(curfrom) ~= nil then 
      k = (C(curto)- C(curfrom))/(curto- curfrom)  
      for i = curfrom, index  do
        curv = i*k + C(curto) - curto*k  		          
	    SetValue(i, 1, curv)
      end   	
	end 
  end 
  
  return vl
 
  
end

Как торговать нефтью: от фундаментала к стратегиям

Всем привет!

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


О чем расскажу:

  1. Кое-что об истории нефти
  2. Производители и потребители
  3. Политика и картели
  4. Факторы, которые влияют на цену
  5. Как можно заработать на нефтяных трендах
  6. Как еще можно заработать на нефтяных трендах
  7. Куда покопать
Готовы? Тогда поехали!


История

Для начала посмотрим на исторический график нефтяных цен с учетом инфляции. Не то чтобы он предоставит суперполезную информацию, но, во-первых, это любопытно, а, во-вторых, там классный рисунок на фоне. Не пропадать же добру.

( Читать дальше )

Делюсь своей таблицей для расчета прибыли, расходов, валютной переоценки и налога

Приветствую всех! Для подсчета расходов на позицию (вместе с комиссиями), прибыли, и для учета валютной переоценки я сделал Exel таблицу. Делюсь ею с Вами! Я использую таблицу, чтобы подсчитать данные для налоговой декларации по операциям купли-продажи. 

docs.google.com/spreadsheets/d/1pnYYvHefZJ7DTiGbNFe-Y8xPiTKtR-3eknGAgQdP7J0/edit?usp=sharing

КАК ПОЛЬЗОВАТЬСЯ: Чтобы редактировать таблицу — скачайте ее к себе во вкладке Файл, или сделайте копию. Данные в ячейки вводятся из брокерского отчета (если в отчете сумма указана с минусом, то и в таблицу так и вводим с минусом). Пересчитайте пару сделок в ручную, чтобы убедиться, что данные вводятся верно и все формулы в таблице работают корректно. Также можете посмотреть видео ниже в блоге про Декларацию 3НДФЛ, там я показываю, как пользоваться таблицей. Также подписывайтесь на мой канал ютуб Знаниефинанс, там я выкладываю не длинные, но информативные видео. Спасибо за внимание! Всем удачи на рынке!

www.youtube.com/channel/UCmWmRhxIHWpDB4FmeLtxlYg 

Делюсь своей таблицей для расчета прибыли, расходов, валютной переоценки и налога



Новый индекс высокодоходных облигаций Индекс Мосбиржи ВДО ПИР составит конкуренцию индексу High Yield от Cbonds

Новый индекс высокодоходных облигаций Индекс Мосбиржи ВДО ПИР составит конкуренцию индексу High Yield от Cbonds
Индекс Cbonds-CBI RU High Yield

ВДО становятся если не более значимыми, то более институциональными инструментами российского долгового рынка. С 26 марта Московская биржа начинает расчет и публикацию индекса ВДО – Индекс Мосбиржи ВДО ПИР (https://t.me/moexnews/4013).

На рынке ВДО с 2018 года уже существует индекс Cbonds-CBI RU High Yield. Теперь, когда у индекса появилась альтернатива важно понимать, чем эти индексы отличаются и какие бумаги лежат в основе каждого из них.

Критерии индекса Cbonds:
• Валюта выпуска Рубли РФ
• Фиксированный купон, который равен или выше, чем ставка ЦБ + 5%
• Минимальный срок обращения 182 дня
• Хотя бы треть торговых дней в квартал по бумаге совершались сделки
• Максимальный объём в обращении 2 млрд (до ноября 2019 года 1 млрд)

Критерии индекса МосБиржи ВДО ПИР:
• Эмитент исполнил в полном объеме обязательства по выплате купонного дохода, выкупу по оферте, погашению всех выпусков облигаций, допущенных к торгам
• Национальными рейтинговыми агентствами эмитенту присвоен кредитный рейтинг на уровне не менее ruB- или аналог
• Валютой выпуска являются рубли РФ
• Объем по номинальной стоимости выпуска составляет не менее 200 млн рублей
• Срок до даты погашения составляет не менее 3 месяцев



( Читать дальше )

Данные из 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()
  • обсудить на форуме:
  • QUIK

Годовой апдейт 2020 по порфтелю в Interactive Brokers

Доходность в долларах США:
29.03% — портфель.
16.83% — индекс SP500.
Годовой апдейт 2020 по порфтелю в Interactive Brokers


Макс просадка с начала года:

-24% — портфель.
-30% — индекс SP500.
Годовой апдейт 2020 по порфтелю в Interactive Brokers



( Читать дальше )

Волатильность и вероятность падения индекса Мосбиржи (IMOEX)

Продолжаю цикл о волатильности и вероятности падения различных инструментов Московской биржи и международных рынков. Предыдущий материал был про индекс S&P500 в качестве аналога которого рассматривали SPY ETF.

Вот этот материал:
smart-lab.ru/blog/670892.php

Сегодня на арене индекс мосбиржи (IMOEX). Итак, сначала историческая вероятность абсолютной волатильности от HIGH до LOW:

Волатильность и вероятность падения индекса Мосбиржи (IMOEX)

Если для SPY 10% дневной волатильности были пределом, до MOEX демонстрирует даже дни с 20% волатильностью (с рекордом более чем 25% — это кстати был лонговый день в окончании кризиса 2008-2009 гг.).

Существует 76,5% вероятность, что волатильность дня не выйдёт за пределы 2,5%. Что интересно, так это в отличии от SPY который демонстрирует Гауссовский спад от 0 и ниже с концентрацией основной массы дней в диапазоне от 0 до 1%, индекс Мосбиржи имеет большую вероятность пройти до 1,5 и даже до 2%, чем остаться от 0 до 1%:

Волатильность и вероятность падения индекса Мосбиржи (IMOEX)

А теперь направленная волатильность по закрытию рынка (close-open)/open:

( Читать дальше )

....все тэги
UPDONW
Новый дизайн