Перепроданные и перекупленные условия

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

Определения

Индикаторы для выявления перепроданных и перекупленных условий

Индекс относительной силы (RSI)

Индекс относительной силы (RSI) - это один из наиболее часто используемых осцилляторов импульса для выявления перекупленных и перепроданных условий. Разработанный Дж. Уэллесом Уайлдером младшим, RSI варьируется от 0 до 100, с уровнями, обычно интерпретируемыми следующим образом:

Формула RSI:

RSI = 100 - [100 / (1 + RS)]

Где RS (относительная сила) - это среднее значение ‘n’ дней восходящих закрытий, деленное на среднее значение ‘n’ дней нисходящих закрытий.

Схождение-расхождение скользящих средних (MACD)

MACD - это еще один популярный инструмент. Он измеряет взаимосвязь между двумя экспоненциальными скользящими средними (EMA) цены ценной бумаги. Расчет включает:

Перекупленные и перепроданные условия в MACD часто определяются путем анализа разницы между этими линиями, известной как гистограмма:

Стохастический осциллятор

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

Формула:

%K = (Текущее закрытие - Самый низкий минимум) / (Самый высокий максимум - Самый низкий минимум) * 100
%D = 3-дневная SMA от %K

Применение в алгоритмической торговле

Торговые алгоритмы

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

Пример стратегии алгоритма

Рассмотрим простую стратегию с использованием RSI:

  1. Сигнал покупки: Если RSI падает ниже 30 (перепродано), купить актив.
  2. Сигнал продажи: Если RSI поднимается выше 70 (перекуплено), продать актив.

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

class SimpleRSIStrategy:
    def __init__(self, asset, period=14, rsi_oversold=30, rsi_overbought=70):
        self.asset = asset
        self.period = period
        self.rsi_oversold = rsi_oversold
        self.rsi_overbought = rsi_overbought

    def calculate_rsi(self, prices):
        gains = [0 if x<0 else x for x in [i - j for i, j in zip(prices[1:], prices[:-1])]]
        losses = [-x if x<0 else 0 for x in [i - j for i, j in zip(prices[1:], prices[:-1])]]
        average_gain = sum(gains) / self.period
        average_loss = sum(losses) / self.period
        rs = average_gain / average_loss
        rsi = 100 - (100 / (1 + rs))
        return rsi

    def generate_signals(self, prices):
        if len(prices) < self.period:
            return None
        rsi = self.calculate_rsi(prices)
        if rsi < self.rsi_oversold:
            return 'buy'
        elif rsi > self.rsi_overbought:
            return 'sell'
        return 'hold'

Бэктестинг

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

Пример фреймворка для бэктестинга
from datetime import datetime

class Backtester:
    def __init__(self, strategy, historical_data):
        self.strategy = strategy
        self.historical_data = historical_data

    def run_backtest(self):
        positions = []
        signals = []
        for i in range(len(self.historical_data)):
            prices = self.historical_data[:i+1]
            signal = self.strategy.generate_signals(prices)
            signals.append(signal)
            if signal == 'buy':
                positions.append({"action": "buy", "price": prices[-1], "date": datetime.now()})
            elif signal == 'sell' and positions:
                bought_position = positions.pop()
                profit_loss = prices[-1] - bought_position["price"]
                print(f'Продано по {prices[-1]}. Куплено по {bought_position["price"]}. Прибыль/Убыток: {profit_loss}')

# Пример исторических данных (например, цены закрытия)
historical_prices = [100, 102, 101, 98, 95, 90, 85, 88, 92, 95, 97, 98, 100]
strategy = SimpleRSIStrategy(asset='ABC')
backtester = Backtester(strategy, historical_prices)
backtester.run_backtest()

Психологические соображения

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

Известные компании, специализирующиеся на алгоритмической торговле и аналитике

Несколько компаний предлагают платформы и инструменты для разработки и развертывания стратегий алгоритмической торговли:

Заключение

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