Избранное трейдера Роман Давыдов

по

Оптимизации портфеля с помощью Python и PyPortfolioOpt

    • 11 мая 2021, 21:57
    • |
    • Aleks
  • Еще
Портфельная теория Марковица

Портфельная теория Марковица(далее ПТМ) (Modern portfolio theory) — разработанная Гарри Марковицем методика формирования инвестиционного портфеля, направленная на оптимальный выбор активов, исходя из требуемого соотношения доходность/риск. Сформулированные им в 1950-х годах идеи составляют основу современной портфельной теории.

Основные положения портфельной теории были сформулированы Гарри Марковицем при подготовке им докторской диссертации в 1950—1951 годах.

Рождением же портфельной теории Марковица считается опубликованная в «Финансовом журнале» в 1952 году статья «Выбор портфеля». В ней он впервые предложил математическую модель формирования оптимального портфеля и привёл методы построения портфелей при определённых условиях. Основная заслуга Марковица состояла в предложении вероятностной формализации понятий «доходность» и «риск», что позволило перевести задачу выбора оптимального портфеля на формальный математический язык. Надо отметить, что в годы создания теории Марковиц работал в RAND Corp., вместе с одним из основателей линейной и нелинейной оптимизации — Джорджем Данцигом и сам участвовал в решении указанных задач. Поэтому собственная теория, после необходимой формализации, хорошо ложилась в указанное русло.



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

Об "ухмылке" волатильности

В теме опционов часто поднимается вопрос о причинах появления «ухмылки волатильности» в опционах на фондовые индексы. Или, проще говоря, почему опционы пут  «вне денег», на страйке лежащем на n% от текущей цены дороже опционов колл «вне денег», лежащих на том же «расстоянии» от текущей цены.

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

На самом деле все проще и иначе.

Вот общее определение «справедливой» цены произвольного платежного поручения

Итак, пара общих определений.
Платежное поручение — это обязательство продавца выплатить некоторую сумму покупателю, зависящую от цены базового актива в будущий момент времени Т — С(Т).
Платежной функцией платежного поручения называется функция выплат f(C(T)).

Тогда справедливой ценой платежного поручения можно считать среднее f(C(T)) по распределению будущей цены С(Т) (чаще всего неизвестному точно), деленную на 1+R, где R- безрисковая ставка до момента времени Т.



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

Как я заставил робота читать трейдерские и инвест-каналы вместо меня

Всем привет! Хочу поделиться одной моей поделкой, возможно она будет полезна кому-то еще.

Предыстория

Примерно полгода назад я начал разбираться в теме инвестиций, потому что ставки по депозитам пробили очередное дно, на этот раз опустившись уже ниже уровня инфляции, что конечно очень печально. Тем не менее благодаря этому событию я погрузился в тему инвестиций и узнал много нового и интересного. Теперь я могу отличить акции от облигаций😅

Знакомство мое с этой темой происходило в нескольких направлениях.

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

Во-вторых, ежедневно начал разбирать биржевые термины, явления и взаимосвязи, и писать для себя заметки в телеге. Таких постов за полгода набралось 500🙊



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

Подборка полезных ресурсов без Yahoo Finance и Seeking Alpha: данные, идеи и воспроизводимые исследования

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

Более направленные подборки по идеям можно посмотреть здесь https://smart-lab.ru/blog/628709.php, а по книгам здесь https://smart-lab.ru/blog/681121.php

Биржевые данные:

Биржевые:

  • https://www.quandl.com Quandl. Простой и адекватный API для Python, много бесплатных данных по отдельным биржам. Например, по Гонконгской и Варшавской бирже. Есть данные по сырьевым фьючерсам и другому сырью. Экономическая статистика и альтернативные данные тоже есть в бесплатном варианте. В отличие от других сайтов с котировками и графиками – здесь промышленная выгрузка для исследований;
  • https://stooq.com Stooq. Неожиданно богатый бесплатным контентом локальный сайт (Польша). Большая часть не представляет интереса и можно сразу перейти к большим (для бесплатных) выборкам биржевых данных по США, некоторым европейским и азиатским странам


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

Опционы. Тест одной известной системы

Одна идея на рынке опционов часто упоминается трейдерами как способ контроля над рисками. Рассмотрим систему, построенную на базе этой идеи. Мы продаем, скажем, один колл вне рынка и смотрим на динамику цены базового актива. Если до экспирации цена не поднялась до нашего страйка, все прекрасно — кладем в карман премию. Профиль позиции является простым профилем короткого колла, и он изображен на графике ниже.

Опционы. Тест одной известной системы

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

Опционы. Тест одной известной системы

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

Опционы. Тесты бабочки, зигзага, стрэнгла и кондора

Как вели себя в прошлом на нашем рынке опционные спреды? 
В этой статье мы рассмотрим результаты тестирования бабочки, стрэнгла, кондора и зигзага(risk reversal).
Очевидно, что обычно трейдеры входят в эти позиции, имея свой прогноз по базовому активу и волатильности.
Тем не менее, мне было интересно, дают ли указанные спреды постоянное статистическое преимущество, способное компенсировать неверный прогноз. Отрицательный результат теста не является приговором, ведь он получен при ограниченном наборе методов выбора позиции и хеджа.

Подробнее о расчетах

Во многом техника тестов повторяет ту, которая была использована ранее при анализе единичных опционов.
Тестируются только месячные опционы на индекс РТС.
Расчеты основаны на теоретической стоимости опционов с июня 2010 г. по июнь 2018 г.  
Данные предоставлены Московской Биржей и одним из известных опционных трейдеров, которому выражаю благодарность.

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

СКАЗКА ПРО ОПЦИОНЫ

    • 07 апреля 2021, 12:29
    • |
    • asfa
  • Еще


 Посвящается моему читателю со стандартным комментарием к моим постам: «Них… чего» не понял, но очень интересно!"

Пост ДОПИСАН 20.03.21, несколько графиков обновлены на актуальные сегодня.
Раздумывал несколько дней: «а надо ли публиковать здесь такое, когда такие страсти кипят на Смартлабе??»
Ну ладно, иду на риск! Всё как в трейдинге — исход изначально неизвестен :)) 

Наверно сегодня не совсем подходящий день для такого, но полистай потом на досуге — может найдёшь чё.

АТТЕНШН!
Это «вэри биг лонгрид» = очень-очень длинная сказка с большим количеством красочных иллюстраций.
(Нет, на самом деле — скучное чтиво, т.к. в основном это выдержки из дневника. Поэтому и разбавляю шуточками, хотя до «Виктора Петрова» мне ещё далеко).

РЕМАРКА №0 (только для взрослых = 5+ лет опыта на рынке)
Прошла квартальная экспирация.
«Мой друг» с путами 72250 на Si (код Si072250BO1) потерял все вложенные средства (предполагаю как и раньше, что он просто покупатель опциона). Вход был по 950, объём 60000к, т.е.



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

Быстрый бектестинг стратегии на python с pandas

Я уже давно использую для бектестов python и pandas. pandas это библиотека для работы с матрицами и её прелесть в том, что она оперирует векторами и работает ГОРАЗДО быстрее, чем обычные циклы. Для того, чтобы сохранить это достоинство при бектестах я использую логарифмическую доходность (log-return на английском). Не ручаюсь за русские термины, так как узнал про них из англоязычных статей. Написанное ниже не истина в первой инстанции, а моя попытка разобраться как это всё работает чтобы применять на практике. Если я не прав, напишите. Я хоть и защищал кандидатскую диссертацию, но не по математике или экономике.

Немного теории



Логарифмическая доходность — разница стоимости актива в разные промежутки времени в процентах. Рассчитываеся по такой формуле:  
Быстрый бектестинг стратегии на python с pandas


Формула для расчёта логарифмической доходности, логарифм натуральный

Теперь на примере акций теслы. Цена по дням:  

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

Как отправлять сообщения из Квика в Телеграм! И писать в файлик разную дребедень!


Все очень и  очень просто!
Достаточно создать бота в телеге,  написать примитивный  луа  скрипт и запустить его.

Про ботов в телеге здесь  https://core.telegram.org/bots
в гугле  куча инфы  и примеров, как чего куда и зачем.


--
--СКРИПТ Niki для smart-lab.ru 260321  ревизия
---------------------------------------

-- Флаг для поддержания работы функции main
is_run=true

fut_limit_old =0
fut_limit_max =0
kgo_old       =0.5


function main( ... )  -- чудотворная функция внутри  которой все  работает

		   
		    --"r": режим чтения (по умолчанию);
			--"w": режим записи;
			--"a": режим добавления;
			--"r+": режим обновления, все предыдущие данные сохраняются;
			--"w+": режим обновления, все предыдущие данные стираются;
			--"a+": режим добавления и обновления, предыдущие данные сохраняются, запись разрешена только в конец файла.     b бинарные файлы
		   
		   -- Пытается открыть файл в режиме "чтения/записи"
		   f = io.open(getScriptPath().."\\Limits.txt","a");
		   -- Если файл не существует
		   if f == nil then 
			  -- Создает файл в режиме "записи"
			  f = io.open(getScriptPath().."\\Limits.txt","w"); 
			  -- Закрывает файл
			  f:close();
			  -- Открывает уже существующий файл в режиме "чтения/записи"
			  f = io.open(getScriptPath().."\\Limits.txt","a");
		   end;

    while is_run do    
        sleep(1000)   -- 1000 = 1 секунда    --волшебная пауза в  работе  скрипта
		
		if getFuturesLimit("A111", "A111111", 0, "SUR") ~= nil then     -- защита от  пустых таблиц    -- впишите ваши данные из Квика
		
			-- %c   - дата и время (по-умолчанию) (пример, 03/22/15 22:28:11) 
			-- %x   - дата (пример, 09/16/98)
			-- %X   - время (пример, 23:48:10)
			
			seconds = os.time(); -- в seconds будет значение 1427052491
			date1 = os.date("%x",seconds);  --  %c   - дата (по-умолчанию) (пример, 03/22/15 22:28:11) 
			time1 = os.date("%X",seconds);  --  %c   - время (по-умолчанию) (пример, 03/22/15 22:28:11) 
			
			
			--[[
			liquidity_coef           --NUMBER  Коэффициент ликвидности  
			cbp_prev_limit           --NUMBER  Предыдущий лимит открытых позиций на спот-рынке» 
			cbplimit                 --NUMBER  Лимит открытых позиций  
			cbplused                 --NUMBER  Текущие чистые позиции  
			cbplplanned              --NUMBER  Плановые чистые позиции  
			varmargin                --NUMBER  Вариационная маржа  
			accruedint               --NUMBER  Накопленный доход   
			cbplused_for_orders      --NUMBER  Текущие чистые позиции (под заявки)  
			cbplused_for_positions   --NUMBER  Текущие чистые позиции (под открытые позиции)  
			options_premium          --NUMBER  Премия по опционам  
			ts_comission             --NUMBER  Биржевые сборы  
			kgo                      --NUMBER  Коэффициент клиентского гарантийного обеспечения  
			currcode                 --STRING   Валюта, в которой транслируется ограничение  
			real_varmargin           --NUMBER  Реально начисленная в ходе клиринга вариационная маржа. Отображается с точностью до 2 двух знаков. При этом в поле «varmargin» транслируется вариационная маржа, рассчитанная с учетом установленных границ изменения цены  
			--]]
			
			
			fut_limit    = getFuturesLimit("A111", "A111111", 0, "SUR").cbplused_for_positions    --  NUMBER  Текущие чистые позиции (под открытые позиции)     -- впишите ваши данные из Квика
			varmargin    = getFuturesLimit("A111", "A111111", 0, "SUR").varmargin                 -- впишите ваши данные из Квика
			accruedint   = getFuturesLimit("A111", "A111111", 0, "SUR").accruedint                -- впишите ваши данные из Квика
			ts_comission = getFuturesLimit("A111", "A111111", 0, "SUR").ts_comission              -- впишите ваши данные из Квика
			kgo          = getFuturesLimit("A111", "A111111", 0, "SUR").kgo                       -- впишите ваши данные из Квика
			
			profit = varmargin + accruedint;
	 
			--if  math.abs(fut_limit-fut_limit_old) > 10000 then       -- каждые 10000 рублей изменения ГО,   слишком частый файл печати 
			if  math.abs(fut_limit-fut_limit_old) > 100000 then       -- каждые 100000 рублей изменения ГО,   настраиваем под себя.
			
				open_lim     = getFuturesLimit("A111", "A111111", 0, "SUR").cbplimit                  --NUMBER  Лимит открытых позиций
				f:write( tostring(date1).."  "..tostring(time1).."  ".."ГО: "..tostring(fut_limit).."  ".."Профит: "..tostring(profit).."  ".."Комис: "..tostring(ts_comission).."  ".. "КГО: "..tostring(kgo).."  Lim: "..tostring(open_lim)..  "\n"); -- "\n" признак конца строки
				--f:write( tostring(date1).. "  " ..tostring(time1)..  "  " .. "BID: " .. tostring(res_trans) .. "  " .. "ASK: " ..  tostring(MXU8ask_vol) .. "\n"); -- "\n" признак конца строки
				   -- Сохраняет изменения в файле на диск
				f:flush();
				
				fut_limit_old = fut_limit;
			end
			
			if fut_limit_max == 0  then   								
				fut_limit_max = fut_limit;
			end	
				
			if ( math.abs(fut_limit-fut_limit_max) > 1000000 and fut_limit>0 ) then   	  -- настраиваем под себя							
				message( tostring(fut_limit) )   ----сообщение в Квик--
				--message( tostring(time1) )
				---------------------------------------- отправляем сообщение в  Телеграмм--
				pos_free     = getFuturesLimit("A111", "A111111", 0, "SUR").cbplplanned               --NUMBER  ГО свободных денег от позы без пониженного ГО 
				open_lim     = getFuturesLimit("A111", "A111111", 0, "SUR").cbplimit                  --NUMBER  Лимит открытых позиций
				tg_message = tostring(open_lim).."   ГО:"..tostring(fut_limit).."   Поза:"..tostring(open_lim-pos_free) 
				os.execute('curl  "https://api.telegram.org/botВашиДанныеИзТелеграмм&text= + '..tg_message..' " ')    -- отправляем в телегу, через винду. Вписать ваши данные из Телеграмм
				----------------------------------------
				-- Пример строки   https://api.telegram.org/bot365877050:AAE232342348HIqifnyGSsw89U_4TK3Y/sendMessage?chat_id=202560128&text=  + Привет Квик!
				----------------------------------------
				fut_limit_max = fut_limit;
			end	
			
			if  math.abs(kgo-kgo_old) > 0 then
				---------------------------------------- отправляем сообщение в  телеграмм
				tg_message = tostring(kgo).." Внимание! Изменился коэффициент КГО" 
				os.execute('curl  "https://api.telegram.org/botВашиДанныеИзТелеграмм&text= + '..tg_message..' " ')    -- отправляем в телегу, через винду. Вписать ваши данные из Телеграмм
				----------------------------------------
				-- Пример строки   https://api.telegram.org/bot365877050:AAE232342348HIqifnyGSsw89U_4TK3Y/sendMessage?chat_id=202560128&text=  + Привет Квик!
				----------------------------------------
				kgo_old = kgo;
			end
		end
		
		
		
    end
f:close();  -- закрываем файл печати.
end		
		

-- Остановка скрипта из Квика
function OnStop(stop_flag)

    is_run=false

end


( Читать дальше )
  • обсудить на форуме:
  • QUIK

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