Избранное трейдера Игорь
Добрый день, друзья!
Мой пост об отчетах 10-K, 10-Q и 8-K американских эмитентов (https://smart-lab.ru/blog/677043.php) вызвал достаточно большой отклик среди Смарт-Лабовцев (68 ⭐️ + 326 ❤️). Поэтому выполняю своё обещание и рассказываю о методике анализа отчетов 8-К, которая в прошлом году принесла мне 50% годовых в долларах США (https://smart-lab.ru/blog/668157.php).
Внимание: лонгрид. Если у Вас в данный момент нет возможности на 15 минут сосредоточиться на изучении достаточно сложной информации – лучше добавить пост в избранное и вернуться к его прочтению позже.
В прошлый раз мы пришли к выводу о том, что отчеты 10-K содержат только прошлые данные, в силу чего информация, отражённая в них, уже заложена в текущие котировки акций. А с учётом того, что изучение формы 10-K является достаточно трудоёмким процессом, то для частного инвестора эта форма теряет всякий смысл.
# В КВИКе запускаем луа-скрипт 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()
GameStop — это международная сеть магазинов видеоигр, которая переживает далеко не лучшие времена. Низкая прибыльность и непонятные дальнейшие перспективы (кто вообще будет ходить в магазин за тем, что можно просто качнуть из Steam?) привели к тому, что акции компании упали с $55 в 2013 до $4 к середине 2020 года.
Несколько крупных хедж-фондов были убеждены, что падение котировок акций GameStop продолжится: как говорят профессионалы, они «зашортили» эти акции на крупную сумму. Однако, в январе 2021 года акции внезапно резко пошли вверх — особенно в течение 26-27 января, когда котировки достигли $360 (рост в 20 раз по сравнению с ценами на 1 января!).
ТРЕЙДИНГ
С легкой иронией отношусь к авторам, публикующим только положительные результаты. И берущих паузу при отрицательных. Поэтому отставил идею не выкладывать результаты. Хотя ими недоволен. Совсем.
+19,1%
Непростой год для моего трейдинга. Идентичные результаты получил в 2019, однако совершенно разные ощущения. В 2019 все по делу. Четко отработал все тренды на нетрендовом рынке. В 2020 выявились неоптимальности.
В чем проблема? Что сломалось?
С трендом все ОК. Торговал бы только тренд, годовая доходность была бы в диапазоне 90-100%. Год трендовый, заработала и фонда, и Si. И лонг. И шорт. Минимальные изменения в системах по году.
Почему такой разрыв в доходности?
Корни проблемы лежат в 2008 году, когда пришла идея торговать большие утренние ценовые разрывы на высокой волатильности. Как эмоциональный перекос, который должен смениться не менее волатильным контрдвижением.
Все посчитал. В 2008 году такие идеи отработали на УРА. С одним НО – слишком мало сделок. Недооценил этот момент. Гуманитарий, одним словом.
Решил прочитать эту книгу, потому как были недовольные моей писаниной, которая была в предыдущих постах. Так многое хотелось сказать, но так было мало времени, что хотелось уместить это всё, сжать, но при этом успеть закончить остальные дела.
Вначале я даже не мог уяснить почему были те, кто ничего не понял, так как сам перечитывал, но мне было всё понятно. И вот тут я вспомнил, что мы мыслим картинками, но я говорил словами. Поэтому были те, кто недоумевал:
Фьючерс на фондовый индекс DAX за период с 1998 по 2011 годы. При покупке после каждого закрытия вниз с последующим выходом из рынка по цене закрытия того же самого дня мы совершим 1591 сделок, 52 процента которых будут выигрышными, но зато общая сумма убытка составит внушительные 60558$! При двух медвежьих закрытиях подряд реализуются 724 сделки, 52,2 процента которых будут закрыты с прибылью, причем общие потери оказываются значительно ниже – 1568$. Если вам хватит терпения каждый раз дожидаться подряд трёх закрытий вниз, вы будете вознаграждены 334 сделками, 55 процентов из которых принесут серьёзную прибыль 25295$.
Сектор здравоохранения (Health care)
Часть 1.
📜 Начинаю цикл статей-обзоров секторов американской экономики. Сегодня начну с одного из самых перспективных на долгосрочном горизонте — секторе здравоохранения. Я не спекулянт, поэтому мне важно понимать куда отрасль движется и какие у нее перспективы на «длинной дистанции».
💉 Здравоохранение — это отрасль народного хозяйства, которая отвечает за медицину в широком понимании этого слова. Она характеризуется высокими барьерами входа для новых участников, так как требует лицензирования, огромных расходов на научные исследования, а также защиты интеллектуальной собственности. В данной сфере спрос на продукцию слабо зависит от чека или, как говорят экономисты, он неэластичен по цене.
🌍 Мировой рынок здравоохранения в 2019 году составил по разным оценкам 9,2$ трлн, а прогнозные темпы роста индустрии составляют 8,9%, учитывая рост мирового ВВП на 2,6%. Прогнозы, разумеется, доCOVIDные, тем не менее сектор здравоохранения достаточно устойчиво проходит кризис в сравнении с другими отраслями.