Избранное трейдера vovak_85
Привет! Бегло полистал SL и обнаружил, что книжные обзоры делятся на 2 типа – инвесторские и хардкорное алго (HFT и опционы). Промежуточный вариант попытаюсь закрыть данным постом. По уровню сложности книги в обзоре находятся между зубодробительной подборкой от Eugene Logunov https://smart-lab.ru/blog/534237.php и приятным чтивом по фундаментальным стратегиям.
1) Lasse H. Pedersen – Efficiently Inefficient
Отличная книга и №1 по соотношению польза/сложность. Автор показывает, как кванты тестируют и отбирают стратегии в портфель. Условно ее можно разделить на 4 части: арбитраж, факторные стратегии, глобал макро и технические моменты запуска и финансирования фонда. HFT и опционные стратегии упоминаются вскользь. Наверное, книга подойдет и для совсем начинающих, т.к. все метрики (вплоть до волатильности) и базовые концепции раскрываются с 0.
LHP – один из боссов крупного хедж фонда в Гринвиче, но в отличие от Далио или Дракенмиллера, еще и хардкорный академик. Поэтому в книге любое утверждение подтверждается ссылками, а для глубокого погружения есть отличный список первоисточников. Понятно, что никаких секретов своего работодателя LHP не раскрывает, но профильные главы для меня оказались полезными в плане идей + отсылки туда, где копать глубже.
# В КВИКе запускаем луа-скрипт 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()
Оказывается, не все еще разобрались во всех ошибках Московской биржи 20.04.20. В частности, раздаются голоса от весьма мной уважаемых людей, что покупателям фьючерсов на Лайт нужно было читать спецификации.
А также им странно, что 25.12.18 участники рынка были возмущены тем, что Биржа проводила торги по Бренту, а 20.04.20 участники рынка возмущаются тем, что Биржа наоборот остановила торги по Лайту. Люди не понимают, почему возмущение идет по противоположным поводам?
Объясняю это непонимание тем, что эти люди просто не вникли глубоко в информацию. Спешу восполнить этот пробел.
Итак. По поводу остановки/не остановки торгов. Дело в том, что фьючерсы на Брент и Лайт на московской бирже являются так называемыми «зеркальными» контрактами-репликами западных аналогов. И задача Биржи ради минимизации рисков как простых участников торгов, так и арбитражеров — обеспечить торги этими репликами на нашей бирже МАКСИМАЛЬНО приближенными к торговле западных первоисточников (в этом и суть “зеркальности” по прямому смыслу).
— 600 тыс руб вообще не основной критерий для отправки сообщений — это миф, там много иных критериев которые могут сработать и раньше и не работать и свыше 600 тыс.
— С высокой долей вероятности ваше налоговая инспекция никогда не узнает о тех операциях, сведения о которых были направлены банком или брокером в Росфинмониторинг.
Лишь крайне ограниченный список сведений получает ФНС от Росфинмониторинга, ниже приведены эти данные
--------
N п/п | Вид информации | Периодичность представления (обновления) |
https://t.me/khtrader
Снова Минэнерго США транслирует рост запасов, в то время как баланс на рынке указывает на дефицит.
ПРЕДЛОЖЕНИЕ
▪️Добыча нефти на 27.09. снизилась на 100 тб\д, и составляет 12,4 мб\д… что на 11,7% выше чем за аналогичный период годом ранее.
▪️Буровая активность неуклонно снижается, на 27 сентября потеряли еще 6 буровых и сейчас на рынке 713 быровых, что на 17% ниже чем годом ранее. Минэнерго США продолжает ждать рост добычи в 2019 году, которая уперлась в 12,5 мб\д, и не может пройти этут отметку со средины августа.
▪️Чистый импорт немного вырос на 30 тб\д, и составляет 3,424 мб\д, что на 45% ниже чем в 2018 году.
❗️ Похоже, что США уверенно шагает в сторону энергонезависимости, задача была поставлена в далеком 1973 году.
ИТОГО предложение упало на 70 тб\д.
СПРОС
Объем нефтепереработки сократился на 496 тб\д и на 27 сентября составляет 16,017 мб\д., что на 3,5% ниже чем годом ранее. Производство бензина остается на высоких уровнях, НПЗ пока не ушли на ТО.