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

по

Быстрый бектестинг стратегии на 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

Использование API Fmp Cloud для отбора акций по дивидендам на Nasdaq с помощью Python

    • 21 марта 2021, 20:02
    • |
    • Aleks
  • Еще

Акции с высокой дивидендной доходностью часто являются отличной инвестиционной стратегией для инвесторов, стремящихся получать приток денежных средств каждый год. В данной статье буден создан скрипт на Python для отбора их на бирже NASDAQ.

Что такое дивидендная доходность?

Возьму определение из Википедии. Дивиде́ндная дохо́дность (англ. dividend yield) — это отношение величины годового дивиденда на акцию к цене акции. Данная величина выражается чаще всего в процентах.

Пример

При цене акции ОАО «Лукойл» 1124,37 рублей и дивиденде 28 рублей на акцию дивидендная доходность будет равна:

Использование API Fmp Cloud для отбора акций по дивидендам на Nasdaq с помощью Python
Так же необходимо обратить внимание, что многие растущие компании, такие как для примера Amazon и Yandex, не выплачивают дивиденды, поскольку они реинвестируют всю прибыль в развитие бизнеса. Поэтому дивидендная доходность для этих фирм будет равна нулю.

Расчет дивидендной доходности с помощью Python



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

Метод Altman Z-Score: как оценить банкротство компании

Altman Z-Score, названный в честь его создателя Эдварда Альтмана, используется для оценки риска банкротства компании по сравнению с группой аналогичных компаний. 

Немного о методе Z-Score

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

Например, вы можете использовать Z-Score, чтобы сравнить длину размаха рук Василия Олейника со средним аналогичным значением для всех инвесторов. Или вы можете сравнить доходность акций одной компании со средней доходностью акций всех компаний, входящих в индекс S&P 500. 

📍 В мире финансов и инвестиций Z-Score Эдварда Альтмана имеет более конкретную цель и является одним из многих способов измерения финансового состояния компании. Для расчета используются различные финансовые показатели, такие как оборотный капитал, общие активы и обязательства, нераспределенная прибыль и EBIT, а также рыночная стоимость собственного капитала и балансовая стоимость общих обязательств.



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

Газпром как value trap

Value trap — стоимостная ловушка, компания которая кажется дешевой но никогда не дорожает.

Недавно прочитал пост Александра Силаева (известного ныне книгой «Деньги без дураков»), Мораль басни про Газпром. И решил еще раз объяснить свою позицию по Газпрому.

Стоимостное инвестирование — это попытка купить дешево то, что в обозримом будущем подорожает. Компания не может быть дешева просто так. Всегда есть обоснованная причина. Задача инвестора понять, временна ли эта причина или нет. Если причины дешевизны никуда не исчезнут то глупо ждать что акция вдруг взлетит.

Газпром как value trap
Отдача за десять лет: Газпром — синяя линия, ММВБ — черная, Лукойл — зеленая.

Для тренировки инвесторского скилла:

1. Легкий вопрос. Сравните ВТБ, Сбербанк. Какой банк классический Value trap?

2. Вопрос посложнее. Назовите причины дешевизны.


Взрывной рост. Почему экспоненциальные организации в 10 раз лучше, быстрее и дешевле, чем ваша (и что с этим делать)

(Взрывной рост) Экспоненциальные организации — почему новые организации в 10 раз лучше, быстрее и дешевле, чем ваша (и что с этим делать) Салим Исмаил, Майкл Мэлоун, Юри ван Геест

Электронная книга t.me/kudaidem/1965



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

Что почитать по (алго) трейдингу? Обзор небанальных книг без Талеба, Грэма и Богла

Привет! Бегло полистал SL и обнаружил, что книжные обзоры делятся на 2 типа – инвесторские и хардкорное алго (HFT и опционы). Промежуточный вариант попытаюсь закрыть данным постом. По уровню сложности книги в обзоре находятся между зубодробительной подборкой от Eugene Logunov https://smart-lab.ru/blog/534237.php и приятным чтивом по фундаментальным стратегиям.
Что почитать по (алго) трейдингу? Обзор небанальных книг без Талеба, Грэма и Богла

1)    Lasse H. Pedersen – Efficiently Inefficient

Отличная книга и №1 по соотношению польза/сложность. Автор показывает, как кванты тестируют и отбирают стратегии в портфель. Условно ее можно разделить на 4 части: арбитраж, факторные стратегии, глобал макро и технические моменты запуска и финансирования фонда. HFT и опционные стратегии упоминаются вскользь. Наверное, книга подойдет и для совсем начинающих, т.к. все метрики (вплоть до волатильности) и базовые концепции раскрываются с 0.

LHP – один из боссов крупного хедж фонда в Гринвиче, но в отличие от Далио или Дракенмиллера, еще и хардкорный академик. Поэтому в книге любое утверждение подтверждается ссылками, а для глубокого погружения есть отличный список первоисточников. Понятно, что никаких секретов своего работодателя LHP не раскрывает, но профильные главы для меня оказались полезными в плане идей + отсылки туда, где копать глубже.
Что почитать по (алго) трейдингу? Обзор небанальных книг без Талеба, Грэма и Богла



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

ГОВАРД МАРКС «РЫНОЧНЫЕ ЦИКЛЫ»


ГОВАРД МАРКС «РЫНОЧНЫЕ ЦИКЛЫ»

Вначале пару слов об авторе. Рабочий стаж Говарда Маркса в финансовой сфере – более 40 лет. Сейчас он является совладельцем крупной инвестиционной компании, под управлением которой свыше $120 млрд.   

За время карьеры автор прошел через множество рыночных катаклизмов, прочувствовав их изнутри. И это легло в основу стройной системы функционирования рынков, которую он раскрывает книге «Рыночные циклы». 

Согласно Марксу, в основе циклических изменений в финансовой сфере лежит поведение людей. А поведение редко находится в равновесии, когда речь идет о потерях или приобретениях. Так и проскакивает человек это равновесное состояние на пути от алчности к страху, и обратно. 

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

В книге автор доносит до читателя три момента:



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

Как правильно рассчитать реальную доходность с учетом инфляции

Многим известно, что инфляция негативно влияет на доходность инвестиции. Но не все умеют правильно рассчитывать реальную доходность с учетом инфляции.

Проверьте себя 👇. 

Сначала определимся, что является доходностью. 

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

Поэтому есть два варианта доходности:

  • Номинальная доходность — рассчитанная без поправки на инфляцию.
  • Реальная доходность — рассчитанная с поправкой на инфляцию, то есть с учетом  будущей покупательной способности денег в сегодняшних ценах.

Как рассчитать реальную доходность?

Я заметил, что многие считают этот показатель по простой формуле:

Реальная доходность = Номинальная доходность — Инфляция

Но этот способ неточен. Причем, чем выше инфляция, тем точность все ниже. 



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

Опционы. Текущий рейтинг методов расчета исторической волатильности HV

В начале 2017 года я сделал расчет, в котором сравнил различные способы расчета HV.
Свои выводы я представил на завтраке инвестора у Алины Ананьевой.
Были рассмотрены восемь активов на различных рынках и период с 2010 по 2016 гг.
Методы сравнивались по критерию наименьшей ошибки прогноза будущей волатильности.
Лучшими подходами по моему мнению оказались методы господина Твардовского, господина Механизатора, экспоненциальный способ, а также усреднение этих трех прогнозов. Сейчас мне стало любопытно, насколько я оказался прав тогда в своих выводах.

Для теста я взял часовые свечки различных активов с января 2017г. по январь 2021г.
Основные выводы представлены ниже, объяснения и таблички  следуют за ними.
 

Выводы

1. В общем рейтинге с учетом всех рынков первое место занял метод усредняющий три прогноза: г-на Твардовского, г-на Механизатора и экспоненциальный.

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

3. Экспоненциальный метод также доказал свою полезность, заняв третье место в общем рейтинге. Для американских акций прогнозы в рамках данного подхода оказались самыми точными. 

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

5. Для часового таймфрейма популярные подходы Parkinson, Yang-Zhang, Rogers-Satchell и Garman-Klass в большинстве случаев оказались хуже даже базового метода расчета исторической волатильности. Впрочем, для дневного таймфрейма показатели этих методов (в частности, подхода 



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

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