empenoso

empenoso

Привет! Меня зовут Михаил Шардин. Я IT-разработчик, кандидат технических наук и частный инвестор с 18-летним опытом работы на финансовых рынках. Более 250 моих статей, опубликованных на разных площадках: Хабр, Т—Ж, Смартлаб, Пикабу и в других сообществах посвящены различным аспектам IT-технологий, финансам, инвестициям, автоматизации и умному дому. Я выступаю на конференциях, таких как Smart-Lab Conf и Питерский промпт. Мой сайт-визитка: https://shardin.name/?utm_source=pikabu
Пикабушник
в топе авторов на 293 месте
1604 рейтинг 40 подписчиков 47 подписок 38 постов 7 в горячем
3

Обзор стратегий и индикаторов 2001–2005 годов из легендарного журнала о техническом анализе

В статье собрана коллекция торговых систем и индикаторов, опубликованных в журнале Technical Analysis of STOCKS & COMMODITIES за период с 2001 по 2005 год. Это издание считается одним из наиболее авторитетных в мире в области технического анализа.

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

О журнале Technical Analysis of STOCKS & COMMODITIES

Обзор стратегий и индикаторов 2001–2005 годов из легендарного журнала о техническом анализе Технологии, Финансы, Длиннопост

Основанный в 1982 году, Technical Analysis of STOCKS & COMMODITIES за более чем 40 лет стал ведущим мировым изданием в области технического анализа. Его создание — заслуга Джека Хатсона (Jack Hutson), инженера-электронщика, увлекшегося трейдингом в 1980-х. Столкнувшись с нехваткой практической и технически глубокой литературы, он решил создать журнал, который бы восполнил этот пробел. Так появилось издание, объединяющее трейдеров, аналитиков и исследователей рынка и по сей день.

Рубрика Traders’ Tips – готовые решения для трейдеров

Traders’ Tips - одна из самых востребованных рубрик журнала. В каждом номере публикуются коды индикаторов и торговых систем, что значительно упрощает их внедрение в реальную торговлю. Материалы представляют собой готовые решения для популярных торговых платформ, таких как TradingView, TradeStation (EasyLanguage), MetaStock, AmiBroker (AFL), NinjaTrader, а также для Python и Excel. Это позволяет быстро переходить от идеи к практике, без необходимости тратить время на самостоятельную реализацию описанных в статьях алгоритмов. Различные варианты кода для одного и того же алгоритма дают возможность глубже понять его логику и сравнить особенности реализации на разных платформах.

Рубрика будет полезна как новичкам, которым она может служить практическим пособием по алгоритмическому трейдингу, так и опытным трейдерам, заинтересованным в оптимизации своих стратегий и изучении новых подходов. Разработчикам же она может послужить источником вдохновения и набора готовых решений. Traders’ Tips - это настоящий мост между теорией технического анализа и практикой, помогающий читателям сразу применять полученные знания в реальных рыночных условиях.

Почему это не пиратство

Данная публикация не содержит сканов, PDF-файлов или нелегальных копий журнальных статей. Все материалы представлены исключительно в виде официальных ссылок на первоисточник - сайт издания Technical Analysis of STOCKS & COMMODITIES (traders.com).

Моя цель — не пиратить, а:

  • Направлять читателей к авторитетному источнику

  • Обращать внимание на ценные, но малоизвестные методики

  • Создавать удобную навигацию по архивным материалам

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

Подборка Technical Analysis of STOCKS & COMMODITIES с 2001 по 2005 год

2001

2001 / январь

Автор: Jayanthi Gopalakrishnan

Traders' Tips месяца: Range Index

Описание: Стратегия Range Index может быть легко построена с использованием стандартных индикаторов, которые определяют самый высокий максимум, самый низкий минимум и логарифм. Стратегия включает использование индикаторов divide, log, subtract, maximum value и minimum value.


2001 / февраль

Автор: Buff Dormeier

Traders' Tips месяца: Volume-Weighted Moving Averages

Описание: Использование метода взвешивания по объему для улучшения скользящих средних. Создана функция взвешивания в EasyLanguage "BuffAverage", которая может быть использована в любой технике анализа или стратегии.


2001 / март

Автор: Не указан

Traders' Tips месяца: Coding Candlesticks (II)

Описание: Продолжение обсуждения метода количественного анализа графиков японских свечей, начатого в ноябре 1999 года. Присваивание значений каждой свече для лучшего анализа с помощью индикаторов, распознавания паттернов и торговых систем. Используется код для индикатора CandleWeight.


2001 / апрель

Автор: John Ehlers

Traders' Tips месяца: Nonlinear Ehlers Filters

Описание: Разработка фильтров, включая код для нелинейного фильтра Ehlers.


2001 / май

Автор: Phil Doyle

Traders' Tips месяца: Relative Performance Charting

Описание: Сравнение скорости изменения цены двух или более торгуемых инструментов для поиска секторов с лучшими торговыми возможностями.


2001 / июнь

Автор: Christian Fries

Traders' Tips месяца: Elastic Volume-Weighted Moving Average (eVwma)

Описание: Реализация eVwma в виде индикатора.


2001 / июль

Автор: Не указан

Traders' Tips месяца: Three-Line Break Chart

Описание: Симуляция графика three-line break. Сравнение текущего закрытия с максимумом и минимумом предыдущего блока. Блок рисуется только когда текущее закрытие превышает максимум или минимум предыдущего блока.


2001 / август

Автор: Igor Livshin

Traders' Tips месяца: Balance of Market Power (BMP) Indicator

Описание: Упрощенная формула для расчета BMP: (Close-Open) / (High-Low).


2001 / сентябрь

Автор: Viktor Likhovidov, Marge Sherald

Traders' Tips месяца: CandleCode Trading Systems, Trading Fuzzy Patterns

Описание: Реализация торговых систем CandleCode. Использование Fuzzy Pattern Recognizer.


2001 / октябрь

Автор: Не указан

Traders' Tips месяца: Trend Detection Index (TDI)

Описание: Определение начала и конца тренда. Расчет TDI.


2001 / ноябрь

Автор: Hans Uhlig

Traders' Tips месяца: Nearest Neighbor Prediction (NNP) Trading System

Описание: Поиск ближайших соседей эталонного паттерна и усреднение их следующих движений для оценки следующего движения эталонного паттерна. Использование Adaptive Net Indicators (ANI).


2001 / декабрь

Автор: Massimiliano Scorpio

Traders' Tips месяца: Finding Key Reversals

Описание: Стратегия на основе ключевых разворотов с использованием статистического анализа для определения частоты появления ценовых паттернов и их прибыльности.

2002

2002 / январь

Автор: John Ehlers

Traders' Tips месяца:Relative Vigor Index (RVI)

Описание: Реализация RVI с использованием функции TriAverage_gen.


2002 / февраль

Автор: John Ehlers

Traders' Tips месяца:Instantaneous Trendline

Описание: Реализация мгновенной линии тренда с использованием внешних кодовых сегментов.


2002 / март

Автор: M.H. Pee

Traders' Tips месяца:Trend Continuation Factor

Описание: Использование индикаторов +TCF, -TCF и Position для определения тренда и его направления.


2002 / апрель

Автор: Rudy Teseo

Traders' Tips месяца:Stop-and-Reverse

Описание: Использование Parabolic SAR.


2002 / май

Автор: Mohab Nabil

Traders' Tips месяца:Projected Fibonacci Targets

Описание: Применение уровней Фибоначчи.


2002 / июнь

Автор: M.H. Pee

Traders' Tips месяца:Trend Intensity Index (TII)

Описание: Индекс, предназначенный для определения силы тренда.


2002 / июль

Автор: Не указан

Traders' Tips месяца:Divergence Formulas

Описание: Формулы для выявления дивергенций с использованием RSI(14) и цены закрытия.


2002 / август

Автор: Spyros Raftopoulos

Traders' Tips месяца:Zigzag Validity

Описание: Оценка достоверности зигзага.


2002 / сентябрь

Автор: Scott Brown, Marge Sherald

Traders' Tips месяца:Support and Resistance Levels, Trading Fuzzy Patterns

Описание: Использование MACD histogram, определение уровней поддержки и сопротивления. Использование Fuzzy Pattern Recognizer.


2002 / октябрь

Автор: John Ehlers

Traders' Tips месяца:RSI Smoothed

Описание: Упрощение формулы RSI Уайлдера и сглаживание RSI.


2002 / ноябрь

Автор: Viktor Likhovidov

Traders' Tips месяца:Affine Geometry of the Markets

Описание: Расчет прогнозируемой аффинной цены, заданной начальной и конечной точками линии тренда.


2002 / декабрь

Автор: Massimiliano Scorpio

Traders' Tips месяца:Developing Hot Zones

Описание: Техника для создания статистических отчетов о прогнозирующей природе паттерна key reversal.

2003

2003 / январь

Автор: William Rafter

Traders' Tips месяца: The Moving Trend

Описание: Индикатор Moving Trend, построенный с использованием LinearReg.


2003 / февраль

Автор: Veronique Valcu

Traders' Tips месяца: Z-Score Indicator

Описание: Отображение направленного изменения, нормализованного в терминах стандартного отклонения.


2003 / март

Автор: Ingo Bucher

Traders' Tips месяца: Fibonacci Retracements and the RSI

Описание: Преимущества использования уровней Фибоначчи для индикатора RSI.


2003 / апрель

Автор: Не указан

Traders' Tips месяца: Positive Volume Index (PVI) / Negative Volume Index (NVI), Finite Volume Elements (FVE)

Описание: Индикаторы PVI/NVI и FVE.


2003 / май

Автор: Stuart Belknap

Traders' Tips месяца: Time And Money Charts

Описание: Новая техника построения графиков, названная TAM charts.


2003 / июнь

Автор: Scott Castleman

Traders' Tips месяца: Market-Adaptive Channel Breakout System

Описание: Адаптивная к рынку система прорыва канала, в которой период обзора канала является функцией подразумеваемой волатильности и объема.


2003 / июль

Автор: Chris Satchwell

Traders' Tips месяца: Regularization

Описание: Регуляризованная экспоненциальная скользящая средняя (RegEMA).


2003 / август

Автор: Giorgos Siligardos

Traders' Tips месяца: Reverse Engineering RSI (II)

Описание: Процесс трансляции для построения графика цены "следующего бара", необходимой для создания трех вариантов индекса относительной силы (RSI).


2003 / сентябрь

Автор: Markos Katsanos

Traders' Tips месяца: Detecting Breakouts in Intraday Charts

Описание: Корректировка волатильности для расчета finite volume element (FVE).


2003 / октябрь

Автор: Vadim Gimelfarb

Traders' Tips месяца: Bull and Bear Balance Indicator

Описание: Метод определения настроений рынка на основе движения цены закрытия.


2003 / ноябрь

Автор: Spyros Raftopoulos

Traders' Tips месяца: Zigzag Trend Indicator

Описание: Метод определения тренда на основе фильтров разворота.


2003 / декабрь

Автор: Giorgos Siligardos

Traders' Tips месяца: Divergence Bias

Описание: Альтернативные методы расчета двух популярных индикаторов тренда: momentum и MACD.

2004

2004 / январь

Автор: Anthony Trongone

Traders' Tips месяца: Holding Overnight Positions

Описание: Торговая стратегия под названием rising darkness, в которой входы в сделки для кубов (AMEX: QQQ) основаны на однодневном процентном изменении цены QQQ и сравнении объема QQQ текущего дня с объемом предыдущего дня.


2004 / февраль

Автор: Dan Valcu

Traders' Tips месяца: Heikin-Ashi Technique

Описание: Метод построения японских свечей Heikin-Ashi и два простых индикатора на их основе.


2004 / март

Автор: Giorgos Siligardos

Traders' Tips месяца: Mechanically Recognizing Triangular Formations

Описание: Метод оценки графических паттернов с точки зрения треугольников с падающим объемом.


2004 / апрель

Автор: David Sepiashvili

Traders' Tips месяца: Trend-Quality Indicator

Описание: Метод оценки силы тренда с использованием cumulative price change (CPC).


2004 / май

Автор: John Ehlers

Traders' Tips месяца: The Inverse Fisher Transform

Описание: Использование обратного преобразования Фишера для RSI и Cyber Cycles.


2004 / июнь

Автор: Markos Katsanos

Traders' Tips месяца: Using Money Flow To Stay With The Trend

Описание: Метод оценки силы тренда с помощью модифицированного расчета on-balance volume.


2004 / июль

Автор: Markos Katsanos

Traders' Tips месяца: Volume Flow Indicator Performance

Описание: Четыре стратегии для торговли с использованием индикатора volume flow (VFI) и индикатор VFI-price divergence.


2004 / август

Автор: Lawrence Chan and Louis Lin

Traders' Tips месяца: Advance Issues Momentum (AIM)

Описание: Индикатор Advance Issues Momentum (AIM).


2004 / сентябрь

Автор: Giorgos Siligardos

Traders' Tips месяца: The Decomposition Method

Описание: Процедура использования reverse-engineered RSI of weekly lows для определения возможных уровней поддержки цены.


2004 / октябрь

Автор: Dennis Peterson

Traders' Tips месяца: Fibonacci And Gann Projections

Описание: Техника прогнозирования точек разворота времени и цены.


2004 / ноябрь

Автор: Vadim Gimelfarb

Traders' Tips месяца: True Range Specified Volume

Описание: Индикатор TRsV (true range specified volume), используемый в сочетании с bull and bear power indicator.


2004 / декабрь

Автор: M.H. Pee

Traders' Tips месяца: Trend Trigger Factor

Описание: Индикатор trend trigger factor (TTF), который представляет собой метод определения восходящих и нисходящих трендов с использованием 15-дневной buy power и 15-дневной sell power.


2005

Не поместился из-за ограничения по длине поста на Пикабу.

Заключение

Каждый выпуск рубрики Traders’ Tips - это готовый алгоритм, который можно внедрить в реальную торговлю уже сегодня.

В архиве за 2001–2005 годы можно найти десятки оригинальных идей: от классических скользящих средних до продвинутых фильтров Джона Эллерса и прогнозов с помощью ближайших соседей. Все материалы доступны по официальным ссылкам - легально, удобно и с уважением к авторам и журналу.

В планах - подборки за 2006–2010, 2011–2015, 2016–2020, 2021–2025 и 1999–2000 годы.

Автор: Михаил Шардин
🔗 Моя онлайн-визитка
📢 Telegram «Умный Дом Инвестора»

29 апреля 2025 г.

4

Тест выходов в TradingView: трейлинг-стоп vs ATR на Мосбирже (Si)

В трейдинге акцент часто смещён в сторону поиска идеальных входов, тогда как стратегии выхода остаются в тени. Между тем именно выходы определяют соотношение прибыли и убытков. Раздельное тестирование помогает изолировать входы и оценить, как разные методы управления позицией влияют на результат. В этой статье входы будут выполняться с 50% вероятностью - это устраняет фактор предсказуемости и позволяет объективно сравнивать эффективность различных стратегий выхода.

В статье тестирую две стратегии трейлинг-стопов для Московской биржи на фьючерсном контракте USD/RUB (Si) на часовом таймфрейме, используя язык Pine Script в TradingView.

Цель исследования и описание общего подхода

Главный вопрос исследования - какой метод трейлинг-стопа показывает лучшие результаты при одинаковых входах: фиксированный процентный или адаптивный ATR? Простой трейлинг-стоп строго ограничивает риск, но полностью игнорирует рыночную волатильность. В отличие от него, ATR-трейлинг, основанный на значении среднего истинного диапазона, автоматически подстраивается под текущие колебания рынка и способен удерживать прибыль в затяжных трендах.

Цель тестирования - проверить, действительно ли адаптивный подход оказывается эффективнее на волатильном рынке фьючерса Si, благодаря способности гибко реагировать на изменчивую динамику цены.

Для сравнения двух методов применяются одни и те же условия: используется фьючерсный контракт Si (USD/RUB) с часовым таймфреймом, комиссия составляет 0,04% на сделку, учитывается проскальзывание в размере 10 тиков, а торговля ведётся одним контрактом.

Обзор первой стратегии: простой трейлинг-стоп

Стратегия использует фиксированный процентный трейлинг-стоп. После случайного входа (лонг или шорт с 50% вероятностью каждые 24 часа) стоп-уровень постоянно пересчитывается для лонга: от максимальной достигнутой цены, для шорта: от минимальной достигнутой цены.

Основная идея в коде:

// Установка начального стопа при входе
trailingStopLong := close * (1 - trailingStopOffset / 100)

// Обновление стопа для лонга
highestLongPrice := math.max(highestLongPrice, close)
trailingStopLong := highestLongPrice * (1 - trailingStopOffset / 100)

Тест выходов в TradingView: трейлинг-стоп vs ATR на Мосбирже (Si) Программирование, Гайд, Финансы, Технологии, Длиннопост

Преимущества:

  • Простота реализации и понимания

  • Предсказуемый фиксированный риск

  • Хорошо работает в трендах

Недостатки:

  • Не адаптируется к волатильности рынка

  • Может преждевременно закрывать позиции при повышенной волатильности

  • Требует ручной настройки параметра под каждый инструмент

Полный код:

// === Описание стратегии ===
// Эта стратегия основана на случайных входах в рынок с использованием простого трейлинг-стопа для управления рисками.
// Основные особенности:
// 1. Случайные входы: Стратегия совершает входы в длинные (Long) или короткие (Short) позиции с заданной вероятностью
// каждые N баров. Частота входов регулируется параметром "Частота входов (каждые N баров)".
// 2. Генерация направлений: Для определения направления входа используется генератор случайных чисел.
// Если случайное значение меньше установленной вероятности входа в Long, открывается длинная позиция, иначе — короткая.
// 3. Простой трейлинг-стоп: После входа в позицию устанавливается трейлинг-стоп на заданном расстоянии в процентах от цены.
// Трейлинг-стоп обновляется при движении цены в благоприятную сторону, защищая прибыль и минимизируя убытки.
// 4. Гибкость настроек: Пользователь может задать вероятность входа в Long, частоту входов и размер трейлинг-стопа.
// 5. Отображение трейлинг-стопа: На графике отображаются уровни трейлинг-стопов для активных позиций, что позволяет
// визуально контролировать ход торговли.

// Михаил Шардин, https://shardin.name/?utm_source=tradingview

//@version=6
strategy("Случайные входы + простой трейлинг стоп",
overlay=true,
commission_type=strategy.commission.percent, // Тип комиссии: процент
commission_value=0.04, // Значение комиссии: 0.04%
slippage=10, // Проскальзывание в тиках
process_orders_on_close=true,
default_qty_type=strategy.fixed, // Фиксированный размер позиции
default_qty_value=1, // 1 контракт/лот
initial_capital=500000) // Начальный капитал

// === Параметры ===
entryFrequency = input.int(24, "Частота входов (каждые N баров)", minval=1)
longProbability = input.int(50, "Вероятность входа в Long (%)", minval=0, maxval=100)
trailingStopOffset = input.float(1.5, "Отступ трейлинг-стопа (%)", step=0.1, minval=0.1)

// === Сигнал на вход ===
entrySignal = bar_index % entryFrequency == 0 and bar_index > 0 // Игнорируем первый бар

// === Гарантированный рандом ===
randValue = math.random(0, 100) // Генерация случайного числа от 0 до 100
randDirection = randValue < longProbability ? 1 : -1 // 1 = Long, -1 = Short

// === Переменные для трейлинг-стопов ===
var float highestLongPrice = na
var float lowestShortPrice = na
var float trailingStopLong = na
var float trailingStopShort = na

// === Условие входа ===
longCondition = entrySignal and randDirection == 1 and strategy.position_size == 0
shortCondition = entrySignal and randDirection == -1 and strategy.position_size == 0

// === Вход в позиции ===
if (longCondition)
strategy.entry("Long", strategy.long)
highestLongPrice := close
trailingStopLong := close * (1 - trailingStopOffset / 100)

if (shortCondition)
strategy.entry("Short", strategy.short)
lowestShortPrice := close
trailingStopShort := close * (1 + trailingStopOffset / 100)

// === Обновление трейлинг-стопа ===
if (strategy.position_size > 0) // Если открыта длинная позиция
highestLongPrice := math.max(highestLongPrice, close)
trailingStopLong := highestLongPrice * (1 - trailingStopOffset / 100)

if (close <= trailingStopLong) // Закрытие по трейлинг-стопу
strategy.close("Long")

if (strategy.position_size < 0) // Если открыта короткая позиция
lowestShortPrice := math.min(lowestShortPrice, close)
trailingStopShort := lowestShortPrice * (1 + trailingStopOffset / 100)

if (close >= trailingStopShort) // Закрытие по трейлинг-стопу
strategy.close("Short")

// === Отображение трейлинг-стопов ===
plot(strategy.position_size > 0 ? trailingStopLong : na, title="Лонг трейлинг-стоп", color=color.green, linewidth=2, style=plot.style_linebr)
plot(strategy.position_size < 0 ? trailingStopShort : na, title="Шорт трейлинг-стоп", color=color.red, linewidth=2, style=plot.style_linebr)

// === Информация для отладки ===
if (barstate.islast)
label.new(bar_index, high,
"Текущий индекс бара: " + str.tostring(bar_index) +
"\nСледующая сделка через: " + str.tostring(entryFrequency - (bar_index % entryFrequency)) + " баров" +
"\nНаправление следующей: " + (randDirection == 1 ? "LONG" : "SHORT") +
"\nТекущая позиция: " + (strategy.position_size > 0 ? "LONG" : strategy.position_size < 0 ? "SHORT" : "НЕТ"),
color=color.blue, style=label.style_label_down)

Обзор второй стратегии: ATR трейлинг-стоп

ATR-трейлинг динамически адаптируется к рыночной волатильности. При каждом входе (лонг/шорт с 50% вероятностью) стоп рассчитывается для лонга: цена закрытия - (ATR(14) × 4) для шорта: цена закрытия + (ATR(14) × 4).

Адаптивный метод выхода: трейлинг-стоп на основе ATR учитывает волатильность инструмента. При росте колебаний стоп отодвигается дальше, при затухании - приближается. Это помогает держать тренд и снижать количество ложных выходов на «шуме».

Основная идея в коде:

// Расчет ATR
atr = ta.atr(atrPeriod)
// Установка ATR-стопа
trailingStopLong := close - atr * atrMultiplier
trailingStopShort := close + atr * atrMultiplier
// Адаптивное обновление
trailingStopLong := math.max(trailingStopLong, close - atr * atrMultiplier)

Тест выходов в TradingView: трейлинг-стоп vs ATR на Мосбирже (Si) Программирование, Гайд, Финансы, Технологии, Длиннопост

Преимущества:

  • Автоматическая подстройка под текущую волатильность

  • Шире стопы при высокой волатильности (меньше ложных выходов)

  • Уже стопы при спокойном рынке (лучше защищает прибыль)

Недостатки:

  • Сложнее в настройке (нужно подбирать период и множитель)

  • Может давать слишком широкие стопы в периоды экстремальной волатильности

Полный код стратегии:

// === Описание стратегии ===
// Эта стратегия основана на случайных входах в рынок с использованием трейлинг-стопов для управления рисками.
// Основные особенности:
// 1. Случайные входы: Стратегия генерирует случайные сигналы для входа в длинные (Long) или короткие (Short) позиции
// с заданной вероятностью. Частота входов регулируется параметром "Частота входов (каждые N баров)".
// 2. Трейлинг-стоп: Для управления рисками используется трейлинг-стоп, который рассчитывается на основе ATR (Average True Range)
// и заданного множителя. Трейлинг-стоп автоматически обновляется при движении цены в пользу позиции.
// 3. Гибкость настроек: Пользователь может настроить вероятность входа в длинную позицию, период ATR и множитель для трейлинг-стопа.

// Михаил Шардин, https://shardin.name/?utm_source=tradingview

//@version=6
strategy("Случайные входы + ATR трейлинг стоп",
overlay=true,
commission_type=strategy.commission.percent, // Тип комиссии: процент
commission_value=0.04, // Значение комиссии: 0.04%
slippage=10, // Проскальзывание в тиках
process_orders_on_close=true,
default_qty_type=strategy.fixed, // Фиксированный размер позиции
default_qty_value=1, // 1 контракт/лот
initial_capital=500000) // Начальный капитал

// === Параметры ===
entryFrequency = input.int(24, "Частота входов (каждые N баров)", minval=1)
longProbability = input.int(50, "Вероятность входа в Long (%)", minval=0, maxval=100)
atrPeriod = input.int(14, "Период ATR")
atrMultiplier = input.float(4.0, "Множитель ATR", step=0.1, minval=0.1)

// === ATR для трейлинг-стопов ===
atr = ta.atr(atrPeriod)

// === Сигнал на вход ===
entrySignal = bar_index % entryFrequency == 0 and bar_index > 0 // Игнорируем первый бар

// === Гарантированный рандом ===
randValue = math.random(0, 100) // Генерация случайного числа от 0 до 100
randDirection = randValue < longProbability ? 1 : -1 // 1 = Long, -1 = Short

// === Условие входа ===
longCondition = entrySignal and randDirection == 1 and strategy.position_size == 0
shortCondition = entrySignal and randDirection == -1 and strategy.position_size == 0

// === Переменные для трейлинг-стопов ===
var float trailingStopLong = na
var float trailingStopShort = na

// === Вход в позиции ===
if (longCondition)
strategy.entry("Long", strategy.long)
trailingStopLong := close - atr * atrMultiplier
// label.new(bar_index, high, "Открыт LONG", color=color.green, style=label.style_label_down, textcolor=color.white)

if (shortCondition)
strategy.entry("Short", strategy.short)
trailingStopShort := close + atr * atrMultiplier
// label.new(bar_index, low, "Открыт SHORT", color=color.red, style=label.style_label_up, textcolor=color.white)

// === Обновление трейлинг-стопа ===
if (strategy.position_size > 0) // Если открыта длинная позиция
trailingStopLong := math.max(trailingStopLong, close - atr * atrMultiplier)
if (close <= trailingStopLong) // Закрытие по трейлинг-стопу
strategy.close("Long")
// label.new(bar_index, high, "Закрыт LONG", color=color.green, style=label.style_label_down, textcolor=color.white)

if (strategy.position_size < 0) // Если открыта короткая позиция
trailingStopShort := math.min(trailingStopShort, close + atr * atrMultiplier)
if (close >= trailingStopShort) // Закрытие по трейлинг-стопу
strategy.close("Short")
// label.new(bar_index, low, "Закрыт SHORT", color=color.red, style=label.style_label_up, textcolor=color.white)

// === Отображение трейлинг-стопов ===
plot(strategy.position_size > 0 ? trailingStopLong : na, title="Лонг трейлинг-стоп", color=color.green, linewidth=2, style=plot.style_linebr)
plot(strategy.position_size < 0 ? trailingStopShort : na, title="Шорт трейлинг-стоп", color=color.red, linewidth=2, style=plot.style_linebr)

// === Информация для отладки ===
if (barstate.islast)
label.new(bar_index, high,
"Текущий индекс бара: " + str.tostring(bar_index) +
"\nСледующая сделка через: " + str.tostring(entryFrequency - (bar_index % entryFrequency)) + " баров" +
"\nНаправление следующей: " + (randDirection == 1 ? "LONG" : "SHORT") +
"\nТекущая позиция: " + (strategy.position_size > 0 ? "LONG" : strategy.position_size < 0 ? "SHORT" : "НЕТ"),
color=color.blue, style=label.style_label_down)

Методика тестирования

Тестирование проводилось на часовом таймфрейме фьючерса Si (USD/RUB) за период с 29.12.2023 по 21.04.2025. Это 480 дней или 11 520 часовых баров. Оценивались ключевые метрики:

  • Общие ПР/УБ: Итоговый финансовый результат стратегии выхода.

  • Макс. просадка средств: Максимальное падение эквити от пика, показатель риска.

  • Всего сделок: Общее количество для статистической значимости.

  • Прибыльные сделки, %: Доля выигрышных выходов.

  • Фактор прибыли: Отношение валовой прибыли к валовому убытку (эффективность).

Поскольку входы случайны (50/50), различия в этих показателях напрямую демонстрируют эффективность именно стратегии выхода. Это позволяет объективно сравнить, какой подход - жесткий процентный стоп или адаптивный ATR - лучше управляет позицией в заданных условиях.

Результаты и сравнение

Тест выходов в TradingView: трейлинг-стоп vs ATR на Мосбирже (Si) Программирование, Гайд, Финансы, Технологии, Длиннопост

Простой трейлинг (1.5%)

Сравним ключевые показатели обеих стратегий выхода при идентичных случайных входах на фьючерсе Si за период ~16 месяцев:

Тест выходов в TradingView: трейлинг-стоп vs ATR на Мосбирже (Si) Программирование, Гайд, Финансы, Технологии, Длиннопост
Тест выходов в TradingView: трейлинг-стоп vs ATR на Мосбирже (Si) Программирование, Гайд, Финансы, Технологии, Длиннопост

ATR трейлинг (4xATR)

Интерпретация:

Результаты однозначно показывают преимущество адаптивного ATR-трейлинга на волатильном фьючерсе Si.

  • Где ATR-выход был лучше: практически по всем параметрам. ATR-стоп не только принёс прибыль (+6.43%) против убытка простого стопа (-2.79%), но и показал в 5 раз меньшую максимальную просадку (1.03% vs 5.00%). Значительно выше процент прибыльных сделок (50.70% vs 30.65%) и фактор прибыли (2.305 vs 0.705), что говорит о лучшем удержании прибыльных позиций и контроле убытков.

  • Где выигрывает простой трейлинг: в данном тесте – нигде. Его единственное преимущество – простота – не компенсировало неспособность адаптироваться.

  • Реакция на волатильность: фиксированный стоп в 1.5%, вероятно, был слишком узким для волатильности Si, приводя к частым преждевременным выходам. ATR-стоп, динамически расширяясь и сужаясь вместе с рынком, позволил эффективнее "пересиживать" локальные коррекции и удерживать трендовые движения, что и отразилось на итоговой прибыли и просадке.

Выводы

Раздельное тестирование выходов - ценный метод анализа, так как изолирует влияние стратегии управления позицией от качества входов, позволяя объективно оценить её эффективность.

Как показали результаты для волатильного фьючерса Si, ATR-трейлинг предпочтительнее в условиях высокой изменчивости рынка. Его способность адаптивно расширять и сужать стоп помогает удерживать тренды и фильтровать рыночный шум, что критично для улучшения итогового ПР/УБ.

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

Автор: Михаил Шардин
🔗 Моя онлайн-визитка
📢 Telegram «Умный Дом Инвестора»

22 апреля 2025 г.

Показать полностью 5
7

Что за Pine Script и как он помогает рисовать свои штуки на графиках TradingView?

Pine Script - это язык программирования, разработанный командой TradingView как Domain Specific Language, то есть специализированный язык для решения конкретной задачи - анализа и визуализации финансовых данных. Он создан для тех, кто хочет строить собственные индикаторы, тестировать торговые стратегии и делать всё это прямо в интерфейсе графика - без установки Python, без импорта исторических котировок и без настройки среды разработки.

Pine Script предельно прост по синтаксису, но в то же время достаточно мощный, чтобы покрыть 95% потребностей розничного трейдера. В нём предусмотрены ключевые блоки: работа с таймсериями, доступ к фундаментальным данным, рисование на графике и даже поддержка таблиц.

Что за Pine Script и как он помогает рисовать свои штуки на графиках TradingView? Программирование, Python, Разработка, Гифка, Длиннопост

Базовый синтаксис: как читать и писать код

Pine Script создан с акцентом на простоту: даже если вы раньше не писали код на нём, освоить базовые конструкции можно за вечер. У каждого скрипта есть чёткая структура, и разобраться в ней - первый шаг к созданию собственного инструмента на TradingView.

Начинается скрипт с указания версии языка:

//@version=6

Это строка обязательна: она сообщает интерпретатору TradingView, какие правила синтаксиса использовать. Шестая версия — самая новая.

Далее идёт определение типа скрипта:

  • indicator() — если вы хотите просто визуализировать данные (например, нарисовать скользящую среднюю, уровни, стрелки).

  • strategy() — если ваша цель — бэктест торговых решений с расчётом сделок, прибыли и убытков.

Чтобы скрипт был гибким, в него добавляют параметры через функцию input(). Например:

lengthMA = input.int(20, title="Период скользящих средних")

Теперь пользователь может сам менять значение прямо из панели настроек на графике.

Что за Pine Script и как он помогает рисовать свои штуки на графиках TradingView? Программирование, Python, Разработка, Гифка, Длиннопост
GIF758 Кб

Рассмотрим базовый пример — аналог “Hello, World” в Pine Script:

// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// Михаил Шардин, https://shardin.name/?utm_source=tradingview
// 12.04.2025

//@version=6
indicator("Пример скользящих средних", overlay=true)

// Входные параметры
lengthMA = input.int(20, title="Период скользящих средних")
src = input(close, title="Источник данных")

// 1. Простая скользящая средняя (SMA)
smaValue = ta.sma(src, lengthMA)
plot(smaValue, "SMA", color=color.blue, linewidth=2)

// 2. Экспоненциальная скользящая средняя (EMA)
emaValue = ta.ema(src, lengthMA)
plot(emaValue, "EMA", color=color.red, linewidth=2)

// 3. Взвешенная скользящая средняя (WMA)
wmaValue = ta.wma(src, lengthMA)
plot(wmaValue, "WMA", color=color.green, linewidth=2)

// 4. Сглаженная скользящая средняя (SMMA)
smmaValue = ta.rma(src, lengthMA)
plot(smmaValue, "SMMA", color=color.purple, linewidth=2)

// Отображение цены для сравнения
plot(close, "Цена", color=color.black, linewidth=1)

// Легенда для отображения текущих значений
var table legendTable = table.new(position.top_right, 1, 6)
if barstate.islast
table.cell(legendTable, 0, 0, "Тип MA", bgcolor=color.gray)
table.cell(legendTable, 0, 1, "SMA: " + str.tostring(smaValue, format.mintick), bgcolor=color.blue)
table.cell(legendTable, 0, 2, "EMA: " + str.tostring(emaValue, format.mintick), bgcolor=color.red)
table.cell(legendTable, 0, 3, "WMA: " + str.tostring(wmaValue, format.mintick), bgcolor=color.green)
table.cell(legendTable, 0, 4, "SMMA: " + str.tostring(smmaValue, format.mintick), bgcolor=color.purple)

Этот пример Pine Script демонстрирует сразу четыре типа скользящих средних (MA) и сравнивает их между собой на графике. Скрипт устанавливает параметры:

- lengthMA: пользователь может выбрать период скользящих средних (по умолчанию 20).
- src: выбор источника данных (по умолчанию цена закрытия close).

Рассчитывает и отображает четыре типа MA
- SMA (Simple Moving Average) - простая скользящая, синяя линия.
- EMA (Exponential Moving Average) - экспоненциальная, красная линия.
- WMA (Weighted Moving Average) - взвешенная, зелёная линия.
- SMMA (Smoothed Moving Average) - сглаженная, фиолетовая линия.

Все линии накладываются поверх графика цены благодаря overlay=true.

Практические примеры

Пример 1: Индикатор для внутридневной торговли

Этот мой скрипт под названием Morning Rage Indicator предназначен для анализа первых часов торговой сессии. В нём задаётся утренний ценовой диапазон на 15-минутном таймфрейме и отображают уровни High и Low в заданный период — по умолчанию с 8:45 до 10:45. Эти уровни часто служат ориентирами для пробойных стратегий.

Что за Pine Script и как он помогает рисовать свои штуки на графиках TradingView? Программирование, Python, Разработка, Гифка, Длиннопост

// Михаил Шардин, https://shardin.name/?utm_source=tradingview
// 21.03.2025

//@version=6
indicator("Morning Rage Indicator", overlay=true)

// Параметры временных диапазонов
rangeStartHour = input.int(8, "Начало диапазона - час")
rangeStartMinute = input.int(45, "Начало диапазона - минута")
rangeEndHour = input.int(10, "Конец диапазона - час")
rangeEndMinute = input.int(45, "Конец диапазона - минута")

// Источники данных для расчета High/Low диапазона
rangeHighSource = input.source(high, "Источник для Range High")
rangeLowSource = input.source(low, "Источник для Range Low")

// Проверка нового дня
isNewDay = year != year[1] or month != month[1] or dayofmonth != dayofmonth[1]

// Функция для проверки времени
isTime(h, m) =>
hour == h and minute == m

// Определение периода формирования диапазона
isRangePeriod = (hour > rangeStartHour or (hour == rangeStartHour and minute >= rangeStartMinute)) and (hour < rangeEndHour or (hour == rangeEndHour and minute <= rangeEndMinute))

// Расчет максимума и минимума диапазона
var float rangeHigh = 0.0
var float rangeLow = 10e10
var bool rangeCalculated = false

// Сброс диапазона в начале нового дня
if isNewDay
rangeHigh := rangeHighSource
rangeLow := rangeLowSource
rangeCalculated := false

// Обновление диапазона только в указанный период
if isRangePeriod and not rangeCalculated
rangeHigh := math.max(rangeHigh, rangeHighSource)
rangeLow := math.min(rangeLow, rangeLowSource)

// Помечаем диапазон как рассчитанный после окончания периода
if hour == rangeEndHour and minute == rangeEndMinute
rangeCalculated := true

// Получаем цену закрытия в момент окончания диапазона
var float rangeClose = na
if hour == rangeEndHour and minute == rangeEndMinute
rangeClose := close

// Визуализация на графике
bgcolor(isRangePeriod and not rangeCalculated ? color.new(color.blue, 90) : na)

// Рисуем уровни диапазона
plot(rangeCalculated ? rangeHigh : na, "Range High", color.green, 2, plot.style_circles)
plot(rangeCalculated ? rangeLow : na, "Range Low", color.red, 2, plot.style_circles)

// Выводим метки с информацией
var table infoTable = table.new(position.top_right, 1, 1)
if barstate.islast
table.cell(infoTable, 0, 0, "Range High: " + str.tostring(rangeHigh) +
"\nRange Low: " + str.tostring(rangeLow),
bgcolor=color.new(color.gray, 80))

Ключевые функции:

  • isTime() и isRangePeriod определяют нужный временной интервал.

  • rangeHigh и rangeLow обновляются только в рамках этого окна.

  • plot() визуализирует границы диапазона.

  • table показывает итоговые значения прямо на графике.

Вы можете адаптировать код под любые рынки и таймфреймы, изменив время.

Пример 2: Фундаментальный анализ

Pine Script позволяет не только анализировать технические индикаторы, но и загружать фундаментальные данные компаний прямо на график. Это открывает возможности для оценки бизнеса без переключения между платформами и сайтами. Один из таких примеров — анализ показателя Net Profit Margin (чистой рентабельности).

Что за Pine Script и как он помогает рисовать свои штуки на графиках TradingView? Программирование, Python, Разработка, Гифка, Длиннопост

Что это за показатель?
Net Profit Margin (NPM) показывает, какой процент от выручки остаётся у компании после всех расходов — налогов, процентов, административных издержек и прочего. Если NPM выше 10%, это сигнализирует о финансовом здоровье бизнеса. Выше 15% — компания не просто эффективна, а конкурентоспособна даже в кризисные периоды.

Фундаментальный анализ акций в РФ и США

Разбор кода:

//@version=6
indicator("Net Profit Margin: чистая рентабельность", overlay=false)
// Получение квартального значения чистой рентабельности
NPM_quarterly = request.financial(syminfo.tickerid, 'NET_MARGIN', 'FQ')

Функция request.financial() позволяет подгрузить фундаментальные показатели. В данном случае мы берём NET_MARGIN за последний финансовый квартал ('FQ').

// Цвет фона: зелёный — хорошая рентабельность, красный — слабая
bg_color = NPM_quarterly >= 10 ? color.new(color.green, 90) : color.new(color.red, 90)
bgcolor(bg_color, title="Фон рентабельности")

Здесь используется наглядная визуализация: фон графика окрашивается в зависимости от уровня рентабельности. Если маржа ≥ 10% — всё в порядке, если меньше — стоит быть осторожным.

// График и контрольные линии
plot(NPM_quarterly, title="Net Profit Margin", color=color.yellow, linewidth=2)
hline(10, "10% уровень", color=color.silver, linestyle=hline.style_dotted)
hline(15, "15% уровень", color=color.silver, linestyle=hline.style_dotted)

На графике рисуется линия с текущими значениями чистой маржи и добавлены два горизонтальных уровня — для отслеживания контрольных границ эффективности.

Коды полностью представлены на Гитхаб.

Зачем использовать это в реальной торговле?
Представьте, что вы выбираете между двумя акциями. Обе растут на графике, но только у одной стабильная чистая рентабельность выше 15%. Это даёт дополнительное подтверждение: бизнес не просто на подъёме, а действительно зарабатывает. Сильная маржа — защитный буфер в трудные времена.

В Pine Script такие оценки можно строить прямо на графике, комбинируя с техническим анализом. И это делает язык особенно ценным — он объединяет технику и фундаментал в одной среде, прямо как в книге Виктора Сперандео.

Где брать готовые скрипты?

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

  • BigBeluga - популярные стратегии, часто с понятным описанием и открытым кодом.

  • PineCodersTASC - официальные скрипты по материалам Traders’ Tips, публикуются каждый месяц.

Чтобы использовать скрипт, просто откройте его, нажмите «Добавить на график», а затем — «Скопировать и изменить», если хотите доработать под себя.

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

Заключение

Pine Script – идеальный инструмент для быстрых экспериментов и визуализации торговых идей прямо на графиках TradingView. Он позволяет за 15 минут проверять гипотезы, недоступные стандартным индикаторам.

Не бойтесь начать! Попробуйте изменить примеры из статьи в Pine Editor и добавьте их на график – результат увидите сразу. Удачи!

Автор: Михаил Шардин
🔗 Моя онлайн-визитка
📢 Telegram «Умный Дом Инвестора»

15 апреля 2025 г.

2

Фундаментальный взгляд на акции в России и США: что нужно знать инвестору?

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

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

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

Хочу создать собственный скринер и бектестер для анализа акций по фундаментальным показателям. Чтобы сделать это правильно, нужно понимать не только программирование, но и сам предмет — фундаментальный анализ. В этой статье я разбираюсь какие вообще существуют подходы, а также ищу источники данных.

Буду использовать для анализа сразу два рынка: США и РФ.

  • США: здесь торгуется более 10 тысяч компаний, а объем открытых данных позволяет глубже изучать инвестиционные стратегии.

  • РФ: рынок значительно меньше (всего несколько сотен компаний), но, поскольку мы живем здесь, он остается актуальным для анализа и инвестиций.

В идеале хочу использовать лучшие практики фундаментального анализа на глобальном рынке и адаптировать их к российским реалиям.

Фундаментальный взгляд на акции в России и США: что нужно знать инвестору? Программирование, Технологии, Финансы, Длиннопост

Обложился книгами

Обзор книжных стратегий от Американской ассоциации частных инвесторов

Американская ассоциация частных инвесторов (AAII) — это независимая некоммерческая организация, которая помогает частным инвесторам принимать обоснованные решения. Она предлагает исследования, аналитические материалы и инструменты, включая формализованные наборы готовых стратегий по книгам известных инвесторов. У них это называется Guru Screens и это подборка из 42 инвестиционных стратегий.

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

Я выбрал пять стратегий, основанных на трудах известных инвесторов:

  • Weiss Blue Chip Div Yield – ориентирована на дивидендные акции крупных компаний.

  • Lakonishok – стратегия, основанная на стоимостном инвестировании.

  • Wanger (Revised) – фокусируется на малых компаниях с потенциалом роста.

  • O'Neil's CAN SLIM Revised 3rd Edition – сочетает фундаментальный и технический анализ.

  • Buffett: Hagstrom – следует принципам Уоррена Баффетта, отбирая недооцененные компании с высоким потенциалом.

Weiss Blue Chip Div Yield

Фундаментальный взгляд на акции в России и США: что нужно знать инвестору? Программирование, Технологии, Финансы, Длиннопост

Стратегия Weiss Blue Chip Div Yield фокусируется на инвестициях в "голубые фишки" с высокими дивидендами. Разработана Джеральдин Вайсс, известной как "первая леди дивидендного инвестирования". Стратегия основана на выборе недооцененных компаний с высокой дивидендной доходностью, стабильным ростом дивидендов и сильной финансовой надежностью.

Критерии стратегии:

  1. Только крупные американские компании (blue chips).

  2. Дивиденды:

    • Выплаты не менее 25 лет.

    • Рост дивидендов в 5 из последних 12 лет.

    • Коэффициент выплат ≤ 20%.

  3. Финансовая устойчивость:

    • Отношение долга к капиталу ≤ 20% (коммунальные компании — 50%).

    • Текущая ликвидность > 2.

    • Рост EPS в 7 из последних 12 лет.

  4. Оценка стоимости: Продажа при снижении дивидендной доходности до минимума или ухудшении финансов.

Я настроил критерии на скринере finviz.com.

Допущения: без истории и рейтингов, только текущий момент.

Lakonishok

Фундаментальный взгляд на акции в России и США: что нужно знать инвестору? Программирование, Технологии, Финансы, Длиннопост

Стратегия Lakonishok ориентирована на поиск недооцененных компаний, которые временно не пользуются популярностью у инвесторов, но демонстрируют признаки роста. Основная идея заключается в том, что рынок часто переоценивает «звездные» акции и недооценивает компании, которые испытывали трудности, но начинают восстанавливаться. Метод основан на анализе четырех ключевых мультипликаторов, а также динамики цены и прогнозов аналитиков.

Для отбора акций используются следующие параметры:

  • Цена акции ниже средних значений по отрасли по одному из показателей: P/B, P/CF, P/E или P/S.

  • Относительная сила за 6 месяцев > 0 (признак роста).

  • Относительная сила за 3 месяца > 0 (дополнительное подтверждение роста).

  • Положительный сюрприз прибыли (разница между фактическими и прогнозными показателями).

  • Рост консенсус-прогноза аналитиков за последние 6 месяцев.

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

Я настроил критерии на скринере finviz.com.

Допущения: выбраны не верхние проценты по рынку, а заданы фиксированные значения.

Wanger (Revised)

Фундаментальный взгляд на акции в России и США: что нужно знать инвестору? Программирование, Технологии, Финансы, Длиннопост

Стратегия Wanger (Revised), впервые представленная в 1997 году, направлена на снижение рисков при инвестировании в акции малых компаний. Ее ключевой принцип — поиск динамично развивающихся компаний с устойчивыми финансовыми показателями, высоким потенциалом роста прибыли и разумной оценкой. Подход ориентирован на долгосрочное инвестирование и позволяет находить перспективные активы среди компаний с малой капитализацией, избегая завышенно оцененных и нестабильных бизнесов.

Критерии стратегии

  • Рыночная капитализация: от $100 млн до $2 млрд.

  • Рост прибыли: ожидаемый рост не менее 15% в год на ближайшие 5 лет.

  • Оценка: P/E < 30, P/S < 3.

  • Финансовая устойчивость: долг/собственный капитал < 1, текущая ликвидность > 1.

Я настроил критерии на скринере finviz.com.

O'Neil's CAN SLIM Revised 3rd Edition

Фундаментальный взгляд на акции в России и США: что нужно знать инвестору? Программирование, Технологии, Финансы, Длиннопост

Методология CAN SLIM, разработанная Уильямом О’Нилом, сочетает фундаментальный и технический анализ для выявления акций с наибольшим потенциалом роста. Эта стратегия ориентирована на быстрорастущие компании, которые уже демонстрируют высокие показатели доходности. Она учитывает не только финансовые показатели, но и рыночные тенденции, что делает ее одной из самых популярных среди частных инвесторов.

Критерии стратегии:

  • Текущие доходы: рост прибыли за три года — не менее 25%.

  • Годовая прибыль: квартальный рост прибыли — минимум 25%.

  • Инновации: наличие новых продуктов или услуг, способных стимулировать рост.

  • Спрос и предложение: высокая институциональная заинтересованность и относительная сила.

  • Рыночное лидерство: инвестиции в компании-лидеры отрасли.

  • Тренд рынка: покупки только в условиях общего бычьего тренда.

Я настроил критерии на скринере finviz.com.

Buffett: Hagstrom

Фундаментальный взгляд на акции в России и США: что нужно знать инвестору? Программирование, Технологии, Финансы, Длиннопост

Эта стратегия основана на принципах инвестирования Уоррена Баффетта, описанных в книге Роберта Хагстрома. Она ориентирована на поиск недооцененных компаний с устойчивым ростом, высокой рентабельностью и разумной долговой нагрузкой. В отличие от краткосрочного трейдинга, подход Баффетта предполагает долгосрочное владение качественными активами.

Критерии стратегии:

  • ROE: минимум 15% – отражает эффективность управления капиталом.

  • Рост прибыли на акцию: минимум 10% – показатель устойчивого развития.

  • Соотношение долга к капиталу: не более 50% – ограничение финансовых рисков.

  • P/E: не выше 20 – избежание переоцененных активов.

Я настроил критерии на скринере finviz.com.

Краткие выводы по стратегиям от гуру

Конечно всё это не рекомендации, а просто повод задуматься о том, что существуют разные стратегии и множество из них публичны.

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

И конечно надо проверить заинтересовавшую вас стратегию на истории - как выборки составленные в прошлом показывали результаты в настоящем.

Для этого я и хочу написать свой скринер и бэктестер.

Выбор самых важных параметров для оценки акций

Это моя субъективная оценка, разбито по категориям как в скринере Яху Финанс:

1. Market Data (рыночные данные)

  • Price (End of Day) - цена на конец дня

  • Market Cap (Market Capitalization) – рыночная капитализация
    Общая стоимость компании на фондовом рынке, определяется как цена акции × количество акций.

2. Ratios (финансовые коэффициенты)

Эти коэффициенты помогают инвесторам оценить стоимость компании и её финансовую устойчивость.

  • ROA (Return on Assets) – Рентабельность активов
    Показывает, насколько эффективно компания использует свои активы для получения прибыли.
    🟰 > 5%: эффективно использующая свои активы компания должна генерировать не менее 5% прибыли. Низкий ROA может означать плохое использование активов или неэффективную деятельность.

  • ROE (Return on Equity) – Рентабельность собственного капитала
    Оценивает прибыльность компании относительно её собственного капитала.
    🟰 > 10%, в идеале > 15%: более высокий ROE показывает, что компания эффективно генерирует прибыль из акционерного капитала.

  • Debt/Equity (Debt-to-Equity Ratio) – Коэффициент долг/капитал
    Соотношение общего долга к собственному капиталу.
    🟰 < 1, в идеале < 0,5: более низкий коэффициент указывает на то, что компания не слишком полагается на заемные средства для финансирования операций, что снижает финансовый риск. Компании с D/E > 1 имеют высокую долговую нагрузку, что может быть рискованно в условиях роста процентных ставок.

  • Current Ratio – Коэффициент текущей ликвидности
    Показывает способность компании погашать краткосрочные обязательства.
    🟰1,5 – 3: гарантирует, что компания может выполнить свои краткосрочные обязательства. Коэффициент ниже 1,5 может указывать на проблемы с ликвидностью, тогда как коэффициент выше 3 может указывать на неэффективное распределение капитала.

  • Gross Profit Margin – Валовая рентабельность
    Доля валовой прибыли в выручке компании. Чем выше, тем эффективнее производство.
    🟰> 30%: более высокая валовая маржа означает, что у компании сильная ценовая политика и эффективность затрат. Это указывает на конкурентное преимущество в производстве или услугах.

  • Dividend Yield – Дивидендная доходность
    Процент дивидендов к цене акции. Чем выше, тем больше компания платит акционерам.
    🟰 > 2%, но < 8%: умеренная дивидендная доходность обеспечивает доход. Чрезвычайно высокая дивидендная доходность в долларах (> 8%) может указывать на падение цены акций из-за бизнес-рисков.

3. Financials - Income Statement (финансовые показатели – Отчёт о прибылях и убытках)

Этот раздел отражает финансовые результаты компании за определённый период.

  • EPS Growth (Earnings Per Share Growth) – Рост прибыли на акцию
    Показывает рост прибыли на акцию по сравнению с предыдущим периодом.
    🟰> 10% год за годом: растущие прибыли указывают на здоровый и расширяющийся бизнес. Компании с постоянным ростом EPS привлекают инвесторов и оправдывают более высокую оценку с течением времени.

  • Sales Growth (Revenue Growth) – Рост выручки
    Изменение выручки компании по сравнению с прошлым периодом. Высокий рост указывает на развитие компании.
    🟰5% год за годом: стабильный рост выручки поддерживает долгосрочную устойчивость бизнеса. Если выручка стагнирует или снижается, рост EPS может быть неустойчивым.

  • Operating Margin (Operating Profit Margin) – Операционная рентабельность
    Процент выручки, остающийся после вычета операционных расходов (зарплаты, аренда, амортизация и т.д.).
    🟰> 10%, в идеале > 15%: более высокая операционная маржа указывает на эффективную работу и лучший контроль над расходами. Она также обеспечивает подушку безопасности во время экономических спадов.

  • Net Profit Margin – Чистая рентабельность
    Процент выручки, остающийся после вычета всех расходов, включая налоги и проценты.
    🟰> 10%, в идеале > 15%: высокая чистая маржа показывает сильную прибыльность после учета всех расходов, включая проценты и налоги.

4. Valuation (оценка компании)

Раздел оценивает эффективность использования активов и капитала.

  • P/E (Price-to-Earnings Ratio) – Коэффициент цена/прибыль
    Показывает, во сколько раз цена акции превышает прибыль на акцию (EPS).
    🟰< 15 (в идеале от 8 до 12): более низкий P/E предполагает, что акции недооценены относительно их прибыли. P/E < 5 может сигнализировать о финансовых трудностях, тогда как P/E > 20 может указывать на переоценку компании.

  • P/B (Price-to-Book Value Ratio) – Коэффициент цена/балансовая стоимость
    Отношение рыночной цены акции к балансовой стоимости компании.
    🟰< 1,5, в идеале < 1: P/B ниже 1 предполагает, что акция торгуется ниже своей балансовой стоимости, что указывает на потенциальную недооценку. Однако акции с низким P/B могут быть и в отраслях, находящихся в упадке.

  • P/S (Price-to-Sales Ratio) – Коэффициент цена/выручка
    Соотношение рыночной капитализации к выручке компании.
    🟰< 2, в идеале < 1: более низкий P/S означает, что выручка компании не переоценена рынком.

  • Price/Cash (Price-to-Cash Flow Ratio, P/CF) – Цена к денежному потоку
    Показывает, сколько инвесторы платят за каждый доллар денежных потоков компании.
    🟰< 10: более низкий P/CF означает, что инвесторы платят меньше за каждый доллар денежного потока, что делает акции более привлекательными.

API для поиска фундаментальных данных по России

Получение фундаментальных данных по российскому фондовому рынку — непростая задача, поскольку доступных API значительно меньше, чем для американских акций. Тем не менее, существует несколько источников, которые можно использовать для автоматизации анализа.

T-Invest API https://russianinvestments.github.io/investAPI/swagger-ui/#/

T-Invest API предоставляет данные о российских акциях, включая фундаментальные показатели. Но выдаёт только текущие - истории нет, для скринера это АПИ не подходит.

Запрос: /tinkoff.public.invest.api.contract.v1.InstrumentsService/GetAssetFundamentals

Пример ответа:

Фундаментальный взгляд на акции в России и США: что нужно знать инвестору? Программирование, Технологии, Финансы, Длиннопост

FinanceMarker.ru API https://financemarker.ru/api/swagger-ui/

Для частных лиц только 400 запросов в день.

Исторический период, по основной отчетности с 2012 года.

Гранулярность данных зависит от частоты выпущенных компанией отчетов, если компания выпускает отчетность по квартально – то квартал, по полугодиям, то полугодие. По РСБУ отчетности – чаще всего квартал. Это относится к категории – reports.
Мультипликаторы (ratios) рассчитываются только в годовом значении и ТТМ (последние 12 месяцев и текущая капитализация).

Запрос: /fm/v2/stocks/{exchange}:{code} Получить данные по компании

Пример ответа:

Фундаментальный взгляд на акции в России и США: что нужно знать инвестору? Программирование, Технологии, Финансы, Длиннопост

RU Data от Интерфакс https://dh2.efir-net.ru/swagger/index.html

Не уверен что частное лицо может подключиться.

Вот ссылка-описание: https://rudata.info/rd-api

Conomy DATA https://conomy.ru/partnership/api

Сервис для предоставления данных о компаниях через API. Используются открытые источники: отчёты, документы, сообщения эмитентов и данные Центробанка. Рассчитываются фундаментальные коэффициенты деятельности компаний. Сервис ещё разрабатывается, но часть данных уже доступна. Информация делится на блоки: общая информация, оцифрованная отчётность, аналитика, прогнозы по акциям и статьи. Цена договорная.

Вот ссылка-описание: https://conomy.ru/partnership

Я писал на указанную ими почту и мне ничего не ответили за две недели.

TradingView

Фундаментальный взгляд на акции в России и США: что нужно знать инвестору? Программирование, Технологии, Финансы, Длиннопост

ROE и SMA200 через Pine

Как ни странно, но сюда похоже ещё можно отнести сервис TradingView, который включает базовые показатели и основные строки из отчетности. У них есть свой язык программирования Pine. Этот язык используется для создания собственных индикаторов и стратегий. График может отображать почти любые строки из отчетности или макроэкономические показатели. Вот ссылка на справку и синтаксис как правильно писать.

А с помощью Pine скрипта можно составить индикаторы, которые отобразят ROE компании и SMA200.

Изменение ROE в отдельной панели:

// Михаил Шардин, https://shardin.name/
//@version=6
indicator("ROE History", overlay=false)

// Получение ROE
roe = request.financial(syminfo.tickerid, 'RETURN_ON_EQUITY', 'FQ')

// Plot ROE на отдельной панели
plot(roe, title="ROE", color=roe > 15 ? color.green : color.red, linewidth=2)

// Добавление горизонтальных линий для визуальной индикации
hline(0, title="Нулевая линия", color=color.gray, linestyle=hline.style_dashed)
hline(15, title="Порог ROE 15%", color=color.green, linestyle=hline.style_dashed)

// Цветовая индикация
bgcolor(roe > 15 ? color.new(color.green, 90) : color.new(color.red, 90))

SMA200 и бирки с отметками о ROE:

// Михаил Шардин, https://shardin.name/
//@version=6
indicator("ROE с SMA200", overlay=true)

// Получение ROE
roe = request.financial(syminfo.tickerid, 'RETURN_ON_EQUITY', 'FQ')

// Расчет SMA200 на основе цены закрытия
sma200 = ta.sma(close, 200)

// Визуализация SMA200 на графике
plot(sma200, color=color.red, linewidth=2, title="SMA200")

// Переменная для отслеживания предыдущего значения ROE
var float previousRoe = na

// Функция создания метки ROE
create_roe_label(float currentRoe) =>
label.new(x = bar_index, y = high + high * 0.05, text = "ROE (FY): " + str.tostring(currentRoe, "#.##") + "%", color = currentRoe > 15 ? color.green : color.red, style = label.style_label_down,textcolor = color.white)

// Создание метки при изменении ROE
if (not na(roe) and (na(previousRoe) or math.abs(roe - previousRoe) > 0.01))
create_roe_label(roe)
previousRoe := roe

// Цветовая индикация графика
bgcolor(roe > 15 ? color.new(color.green, 90) : color.new(color.red, 90))

Знаете ещё какие-нибудь API по России?

Если не использовать API, то теоретически можно спарсить данные с какого нибудь сайта и поместить их в базу данных - но это сложнее.

Заключение

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

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

Комбинация обоих подходов повышает точность решений: фундаментальные данные дают "что покупать", технические — "когда покупать".

Автор: Михаил Шардин
🔗 Моя онлайн-визитка
📢 Telegram «Умный Дом Инвестора»

9 апреля 2025 г.

Показать полностью 9
14

Как Python и погода помогают решить, когда менять шины: простое решение без гаданий

Весна вроде бы пришла: днём светит солнце, асфальт сухой, и кажется, что пора менять зимние шины. Но ночью всё ещё холодно, и иногда случаются заморозки.

Знакомая ситуация? Чтобы не гадать, я решил подключить Python и прогноз погоды, чтобы получить точный ответ.

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

Своевременная смена шин — это не просто забота о резине, а вопрос безопасности. Зимние шины в плюсовую погоду теряют сцепление и быстрее изнашиваются, а летние на холодной дороге могут стать причиной заноса.

Есть простое правило: если ночью температура стабильно выше +5 °C, можно смело переобуваться. Но если по ночам случаются заморозки, даже несмотря на тёплые дни, — лучше повременить. Один неожиданный ледяной утренник может обернуться серьёзными проблемами.

Идея решения

Угадывать по ощущениям — не лучший способ принимать решения. Лучше спросить напрямую у погоды. Я нашёл открытый погодный API, который не требует ни регистрации, ни ключей — всё просто.

Как Python и погода помогают решить, когда менять шины: простое решение без гаданий Программирование, Технологии, Погода, Длиннопост

api.open-meteo.com/v1/forecast?latitude=58.00927115232101&longitude=56.2228553210843&daily=temperature_2m_min&timezone=auto

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

Как это работает

Сначала я определяю координаты своего города — Перми — и передаю их в API-запрос.

Как Python и погода помогают решить, когда менять шины: простое решение без гаданий Программирование, Технологии, Погода, Длиннопост

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

В ответ получаю прогноз минимальных температур на ближайшие 7 дней. Далее скрипт анализирует ночные значения: если хоть в один из дней температура опускается ниже заданного порога — с заменой шин стоит подождать. Если же ночи стабильно тёплые, значит, пришло время переобуваться без риска.

Код

Вот так выглядит мой скрипт на Python — он простой, понятный и снабжён комментариями на русском. Нужно лишь указать координаты своего города, задать порог температуры (например, +1 °C), и скрипт сам покажет прогноз на ближайшие 7 дней. В выводе вы сразу увидите: стоит ли ещё ждать с переобувкой, или уже можно смело записываться в шиномонтаж.

Как Python и погода помогают решить, когда менять шины: простое решение без гаданий Программирование, Технологии, Погода, Длиннопост

Код можно скопировать отсюда

Это не магия, а просто удобный способ принимать бытовые решения на основе данных, а не «на глазок». И кстати — всё open source, так что можно доработать под себя.

Результаты

Скрипт показал, что в ближайшие дни в Перми несколько ночей будут с заморозками: -0.5 °C, -1.0 °C и даже при +0.4 °C ещё рано рисковать. Несмотря на дневное тепло, ночные температуры всё ещё ниже безопасного порога.

Итог: менять зимние шины пока не стоит — подождём более стабильного тепла хотя бы выше +5 °C ночью.

Как Python и погода помогают решить, когда менять шины: простое решение без гаданий Программирование, Технологии, Погода, Длиннопост

Заключение

Немного кода и открытые данные — и вы уже принимаете решения не «на глаз», а осознанно.

Автор: Михаил Шардин
🔗 Моя онлайн-визитка
📢 Telegram «Умный Дом Инвестора»

8 апреля 2025 г.

Показать полностью 4
3

Заметка на тему индикатора измерения силы тренда в теханализе

Понимание силы тренда помогает трейдерам оценить устойчивость движения цены и находить оптимальные точки входа и выхода. Идея индикатора взята из комментария Ийона Тихого на Smart-Lab: он предложил измерять силу тренда через относительное отклонение цены от средней. Формула проста: разница между ценой и средней, деленная на среднюю. Это позволяет оценить тренд независимо от абсолютных значений цены.

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

Теоретическое обоснование

Индикатор силы тренда показывает, насколько цена отклоняется от своего среднего значения. Он рассчитывается по формуле:

Сила тренда = (Цена – Средняя) / Средняя × 100

Где:
Цена – текущая цена актива (например, цена закрытия свечи).
Средняя – значение скользящей средней (например, 21-периодная экспоненциальная средняя EMA).

Почему деление на среднюю удобнее?

Абсолютное отклонение цены от средней меняется в зависимости от уровня цены актива. Например, отклонение в 10 рублей на акции стоимостью 100 рублей и 1000 рублей будет восприниматься по-разному. Деление на среднюю нормализует это значение, позволяя объективно сравнивать силу тренда на разных инструментах и таймфреймах.

Использование двух средних вместо цены

Вместо сравнения цены со средней можно использовать разницу между быстрой и медленной скользящей средней. Тогда формула примет вид:

Сила тренда = (Быстрая средняя – Медленная средняя) / Медленная средняя × 100

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

Первый вариант индикатора (базовый)

Заметка на тему индикатора измерения силы тренда в теханализе Финансы, Программирование, Длиннопост

Базовая версия индикатора измеряет силу тренда через разницу между текущей ценой и скользящей средней.
Исходный код Pine Script. RAW версия чтобы скопировать с Гитхаба без ошибок:

Заметка на тему индикатора измерения силы тренда в теханализе Финансы, Программирование, Длиннопост

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

Доработанный вариант индикатора (улучшенный)

Заметка на тему индикатора измерения силы тренда в теханализе Финансы, Программирование, Длиннопост

В ходе обсуждения с автором идеи были предложены улучшения базовой версии индикатора.
Исходный код Pine Script. RAW-версия кода на GitHub для копирования без ошибок:

Заметка на тему индикатора измерения силы тренда в теханализе Финансы, Программирование, Длиннопост

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

Как использовать индикатор в TradingView

Пошаговая инструкция:

  1. Открытие TradingView
    Перейдите на сайт TradingView и войдите в свою учетную запись. Если у вас нет аккаунта, зарегистрируйтесь – это бесплатно.

  2. Открытие графика
    В верхнем меню выберите "График" и откройте нужный вам актив (акции, фьючерсы и т. д.).

  3. Добавление индикатора вручную

    • В нижней панели нажмите на кнопку "Pine Editor" (Редактор Pine).

    • Скопируйте код индикатора из данной статьи и вставьте его в редактор.

    • Нажмите "Сохранить" и затем "Добавить на график".

  4. Настройка параметров индикатора

    • После добавления индикатора на график нажмите на его название в списке индикаторов.

    • Откроется окно параметров, где можно изменить периоды средних (например, EMA 21 или SMA 50).

    • При необходимости настройте цветовую гамму и отображение гистограммы.

  5. Интерпретация данных

    • Если значение индикатора положительное, тренд считается восходящим, если отрицательное – нисходящим.

    • Чем выше абсолютное значение индикатора, тем сильнее тренд.

    • Можно использовать сигналы пересечения нулевой линии для определения смены направления тренда.

Выводы

Базовый и усовершенствованный варианты индикатора помогают оценить силу тренда.

Интерпретация:

  • Положительное значение — восходящий тренд.

  • Отрицательное значение — нисходящий тренд.

  • Чем больше абсолютное значение, тем сильнее тренд.

Дальнейшие улучшения:

  • Добавить фильтрацию сигналов, например, через ATR.

  • Ввести зону неопределенности для избежания ложных сигналов.

  • Добавить параметры, учитывающие волатильность или объем.


Автор: Михаил Шардин
🔗 Моя онлайн-визитка
📢 Telegram «Умный Дом Инвестора»

31 марта 2025 г.

Показать полностью 4
15

Скрипт, находящий самые выгодные облигации к покупке

На Московской бирже торгуется более 2500 облигаций, но большая часть из них неликвидна - в стакане почти нет предложений и сделок совершается крайне мало. Это затрудняет покупку и продажу таких бумаг. При этом известные мне публичные сервисы не суммируют объемы торгов за период, поэтому сложно быстро найти облигации с высокой ликвидностью.

Пять лет назад написал Node.js-скрипт, затем адаптировал его для Google Таблиц, а теперь разрабатываю Python версию. При помощи сообщества на GitHub эта Python версия идёт к созданию полноценной библиотеки с расширенными возможностями: автоматический поиск ликвидных облигаций, расчет денежных потоков, сбор новостей по эмитентам и вычисление оптимального объема покупки. Все это направлено на помощь простым инвесторам, вроде нас с вами, чтобы оперативно находить выгодные инвестиционные инструменты и принимать решения на основе актуальной информации.

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

Скрипт, находящий самые выгодные облигации к покупке Программирование, Финансы, Технологии, Длиннопост

Критерии выбора ликвидных облигаций на Московской Бирже

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

Доходность
Эффективная доходность облигации — один из главных параметров. В фильтре задаётся диапазон, например, от 15% до 30%. Важно учитывать, что этот показатель не включает налог с купонов и комиссии брокера.

Скрипт, находящий самые выгодные облигации к покупке Программирование, Финансы, Технологии, Длиннопост

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

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

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

Скрипт, находящий самые выгодные облигации к покупке Программирование, Финансы, Технологии, Длиннопост

Пример: облигация ЕвроТранс БО-001Р-03 на 10 марта 2025 года (код RU000A1061K1, ссылка):

  • Текущая цена: 86% от номинала

  • Купонная доходность: 13,6% годовых

  • Доходность к погашению: 26,78% годовых. Доходность к погашению предполагает, что вы держите облигацию до погашения и что все купонные выплаты будут произведены в срок.

Откуда такая разница? Дело в том, что облигация сейчас торгуется ниже номинала, а при погашении инвестор получит 100% номинальной стоимости. То есть, кроме купонов, инвестор дополнительно зарабатывает на разнице в цене. Именно поэтому параметр текущей цены помогает выбрать, когда получать основную доходность — постепенно в течение срока или разово в момент погашения.

Дюрация
Показатель дюрации позволяет выбрать облигации с нужным сроком жизни. Например, если мне нужна бумага на ближайшие 3–18 месяцев, фильтр исключает слишком краткосрочные или долгосрочные варианты.

Прозрачность выплат
Наличие полной информации о будущих купонных выплатах или наличие оферты.
Также я исключаю флоатеры, поскольку Московская биржа не передаёт по ним данные о будущих платежах.

Ликвидность
Ликвидность - основной критерий, ради которого создавался этот инструмент. В скрипте анализируются:

  • Минимальное число сделок за каждый из последних 15 дней - чтобы исключить облигации, которые могут внезапно «замереть».

  • Общий объём сделок за 15 дней - параметр, который позволяет выявлять бумаги с устойчивым спросом. Этот скрипт позволяет гибко подстраивать фильтры и находить действительно ликвидные облигации, подходящие под конкретно Вашу стратегию инвестирования.

Как работает скрипт

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

Скрипт, находящий самые выгодные облигации к покупке Программирование, Финансы, Технологии, Длиннопост

Ограничение запросов. С сентября 2024 года API Московской биржи начало периодически разрывать соединение без объяснения причин. Это продолжалось около полугода, поэтому в коде был установлен лимит — не более 50 запросов в минуту. Сейчас, в марте 2025, эта проблема больше не наблюдается, но ограничение оставлено для стабильности.

Московская биржа периодически меняет формат данных, что требует оперативного обновления скрипта.

Пошаговое руководство по запуску

Если вы не разбираетесь в программировании, но хотите воспользоваться этим Python-скриптом, следуйте инструкции:

Шаг 1. Скачайте скрипт

  1. Откройте ссылку: GitHub проекта.

  2. Нажмите "Code" → "Download ZIP".

  3. Разархивируйте ZIP в удобную папку.

Скрипт, находящий самые выгодные облигации к покупке Программирование, Финансы, Технологии, Длиннопост

Шаг 2. Установите Python

Если Python не установлен:

Шаг 3. Установите зависимости проекта

  1. Откройте папку с проектом.

  2. Дважды кликните файл install_requirements.bat (Windows) или install_requirements.command (MacOS).

Шаг 4. Запустите скрипт

Дважды кликните файл 1_bonds_search by criteria.py.

Скрипт, находящий самые выгодные облигации к покупке Программирование, Финансы, Технологии, Длиннопост

Во время выполнения отображается лог выполнения.

Шаг 5. Наслаждайтесь результатом

Будет создан файл с текущей датой: bond_search_2025-03-25.xlsx

Скрипт, находящий самые выгодные облигации к покупке Программирование, Финансы, Технологии, Длиннопост

Обычные вклады это до сих пор альтернатива облигациям

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

Следующими по надежности идут корпоративные облигации, чья доходность может доходить до 35%, однако они сопряжены с большими рисками. Надо понимать что высокие доходности несут высокие риски: это подходит тем, кто больше разбирается в данной сфере и лучше понимает, что такое эмитенты и как с ними работать.

Банковские вклады занимают промежуточную позицию между этими категориями активов. Их доходность сравнима с доходностью надежных корпоративных облигаций, однако основное преимущество вкладов заключается в отсутствии рисков благодаря системе государственного страхования вкладов. Они также отличаются простотой использования: достаточно разместить средства и ожидать истечения срока депозита.

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

Скрипт, находящий самые выгодные облигации к покупке Программирование, Финансы, Технологии, Длиннопост

Преимущества open source и шаги к Python-библиотеке

Идея - набор из четырёх скриптов для личного использования. Разработал их как частный инвестор, понимая какие задачи стоят передо мной:

  1. Поиск ликвидных облигаций

  2. Автоматический расчёт денежных потоков

  3. Сбор новостей по эмитентам

  4. Расчёт оптимального объёма покупки

От одиночного скрипта к полноценной библиотеке

Так как проект открыт, к нему подключилось сообщество. Одним из первых с pull request пришёл lmasikl, который заинтересовался темой облигаций и предложил преобразовать набор  скриптов в полноценную Python-библиотеку.  Уже было внесено множество улучшений:

Март 2025

  • #12 – Добавлен простой тест как пример (автор: lmasikl, одобрено 19 марта)

  • #11 – Добавлена диаграмма взаимодействия пользователя со скриптом (автор: lmasikl, одобрено 17 марта)

  • #7 – Отформатирован код с дефолтными настройками Ruff (автор: lmasikl, одобрено 14 марта)

  • #6 – Внесен в приложение скрипт расчета оптимального объема покупки облигаций (автор: lmasikl, одобрено 13 марта)

  • #5 – Перенесен в приложение скрипт поиска новостей (автор: lmasikl, одобрено 12 марта)

  • #4 – Перенесен в приложение скрипт поиска облигаций (автор: lmasikl, одобрено 10 марта)

  • #3 – Начат переход к полноценной библиотеке (автор: lmasikl, одобрено 6 марта)

Февраль 2025

  • #2 – Исправлены некорректные значения в рублях (автор: gogbajbobo, одобрено 21 февраля)

  • #1 – Выполнен рефакторинг кода (автор: lmasikl, одобрено 20 февраля)

Добавлен план схемы работы:

Скрипт, находящий самые выгодные облигации к покупке Программирование, Финансы, Технологии, Длиннопост

Почему open source — это важно?

Открытый код даёт возможность сообществу вносить улучшения, исправлять ошибки и расширять функциональность. Гибкость библиотеки позволяет каждому настроить поиск облигаций под собственные нужды, создавая индивидуальные стратегии отбора.

Как практически использовать эту библиотеку

Допустим, у нас есть 300 000 рублей, которые мы хотим вложить в облигации. Чтобы минимизировать риски, разделим сумму на 10 разных облигаций.

  1. Поиск ликвидных облигаций
    Первая часть скрипта анализирует рынок и отбирает бумаги с хорошей ликвидностью, подходящие под заданные критерии (доходность, дюрация, цена и т. д.).

  2. Проверка эмитента
    Запускаем вторую часть скрипта — он собирает последние новости по эмитентам. Если обнаружены негативные публикации (например, судебные иски или финансовые проблемы компании), такие облигации исключаем из списка.

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

  4. Расчёт объёма покупки
    Последний скрипт поможет рассчитать, сколько именно облигаций можно приобрести с учётом доступного капитала и НКД. Это позволяет эффективно распределить средства и избежать недостатка ликвидности.

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

Заключение

Использование этого скрипта позволяет частному инвестору систематизировать процесс подбора облигаций, минимизировать риски и упростить управление портфелем.

Присоединяйтесь к сообществу!

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

Любые предложения, правки и новые модули помогут сделать библиотеку ещё более мощным инструментом для инвесторов.

Автор: Михаил Шардин
🔗 Моя онлайн-визитка
📢 Telegram «Умный Дом Инвестора»

25 марта 2025 г.

Показать полностью 9

Алготрейдинг для начинающих: проверяю на Python работает ли система случайных входов для фьючерсов

💡 Для ЛЛ:

Я протестировал торговую систему для фьючерсов Московской биржи, основанную на идеях Александра Резвякова. Основная суть: сделки открываются в 10:00, используются дневные бары, выход - по времени (20:40) или по трейлинг-стопу. Я реализовал это в Python с библиотекой backtesting.py, код доступен на GitHub. Теперь подробнее для тех, кто хочет разобраться.

Алготрейдинг для начинающих: проверяю на Python работает ли система случайных входов для фьючерсов Программирование, Финансы, Технологии, Фьючерсы, Длиннопост

📊 Воспроизведение и тестирование стратегии Александра Резвякова на фьючерсах

Недавно я наткнулся на выступление Александра Резвякова на конференции 2024 года "5-6 идей для построения прибыльной торговой системы на фьючерсах". Его система меня зацепила своей простотой и логичностью. Я решил воссоздать её, протестировать и проверить, насколько она эффективна.

Алготрейдинг для начинающих: проверяю на Python работает ли система случайных входов для фьючерсов Программирование, Финансы, Технологии, Фьючерсы, Длиннопост

✅ Основная идея стратегии

  1. Вход в сделку строго в 10:00.

  2. Лонг, если за последние два дня минимумы и максимумы росли.

  3. Шорт, если последние два дня минимумы и максимумы снижались.

  4. Выход из позиции либо:

    • По времени (20:40);

    • По трейлинг-стопу (движение цены на 2% от максимума для лонга, от минимума для шорта).

  5. Дополнительно можно увеличивать объем позиции при успешных сделках.

🌐 Подготовка среды

Для тестирования я использовал Python и библиотеку backtesting.py. Разбил проект на модули:

Алготрейдинг для начинающих: проверяю на Python работает ли система случайных входов для фьючерсов Программирование, Финансы, Технологии, Фьючерсы, Длиннопост

Хотя в видео рекомендовали 5-минутные свечи, я взял 1-минутные – так проще отследить срабатывание трейлинг-стопов.

🔄 Реализация стратегии в Python

1. Загрузка данных
Минутные котировки обрабатываются и фильтруются по нужному диапазону.

2. Преобразование данных
CSV-файлы конвертируются в формат, понятный backtesting.py.

3. Логика входа/выхода
В 10:00 проверяются два последних дневных бара. Если условия выполняются – вход в лонг/шорт с вероятностью 50%. Выход в 20:40 или по трейлинг-стопу.

Алготрейдинг для начинающих: проверяю на Python работает ли система случайных входов для фьючерсов Программирование, Финансы, Технологии, Фьючерсы, Длиннопост

✈ Тестирование и результаты

Запуск бэктеста с параметрами:

bt = Backtest( df, DynamicStrategyClass, cash=1_000_000, commission=0.002, margin=0.1, # Маржа 10% trade_on_close=True, hedging=False, )

Так как вход случайный (50%), результаты тоже рандомные. Но уже на первых тестах видно, что стратегия даёт интересные закономерности.

Пример сделки на фьючерсе NGH5:

🚀 Запуск бэктеста для NGH5 ⏳ ПРОДАЖА на 2025-03-12: Цена: 4.33, Стоп: 4.33 ✅ ВЫКУП (трейлинг-стоп) на 2025-03-12: Цена: 4.31

Алготрейдинг для начинающих: проверяю на Python работает ли система случайных входов для фьючерсов Программирование, Финансы, Технологии, Фьючерсы, Длиннопост

🔧 Код в открытом доступе

Если хотите воспроизвести или улучшить стратегию – код на GitHub. Готов обсудить идеи и улучшения!

Автор: Михаил Шардин
🔗 Моя онлайн-визитка
📢 Telegram «Умный Дом Инвестора»

19 марта 2025 г.

Отличная работа, все прочитано!