Избранное трейдера rinman

по

примерно 80% акций - принесут вам убытки

Правда в том, что большинство акций — это ужасное вложение. Позвольте мне показать вам, что я имею в виду, и как вы можете превратить эту правду в преимущество, которое позволит вам победить 99% инвесторов.

Эта правда обманывала инвесторов на протяжении веков

Около 150 лет назад китобойный промысел был одной из важнейших отраслей Америки. Электричество не изобрели. Чтобы осветить ночью улицы и дома, люди сжигали легковоспламеняющийся китовый жир.

 

К 1850 году китобойный промысел был пятым по величине сектором Америки и приносил очень хорошие доходы. Всего несколько тысяч китобоев заработали за год в современном эквиваленте 27 миллиардов долларов. Но большинство путешествий никогда не приносили прибыли.

Несколько лет назад исследователи Чикагского университета написали книгу о китобойном буме в США: «  В погоне за левиафаном» . Они проанализировали более 4000 рейсов и обнаружили, что треть китобойных судов фактически теряла деньги. 



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

Простая система на основе индикатора MACD для корзины акций.

    • 01 июня 2021, 18:09
    • |
    • FBond
  • Еще

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

Делюсь результатами торговли акциями по очень простой системе на основе индикатора MACD, за 13 месяцев торговли.

Вот основные правила торговой системы:

Торгую только российские акции. Сейчас «на листе» 58 бумаг по несколько субъективному признаку – насколько они техничны на истории. Также, я исключил слишком дорогие акции для равномерного распределения риска на эмитент.

Таймфрейм – недельный.

Индикатор MACD — со стандартными настройками (12 26 close 9). Оптимизацию сознательно не провожу.

Открытие и закрытие позиций – только в понедельник по сигналу индикатора на закрытой свече.

Открытие позиции – при появлении зеленого столбца гистограммы.

Закрытие позиции – при появлении красного столбца гистограммы.

Желательно чтобы доли эмитентов были в равных долях.

Позиции – только buy, без плеч. Однако, при некоторых условиях допускаю использование плеча.



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

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

Чуть больше недели назад выступил на 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 

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



Данные из 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



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

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