Имитация отжига
Имитация отжига — это вероятностная техника для приближенного поиска глобального оптимума заданной функции. Она часто используется, когда пространство поиска дискретно, например, в задачах комбинаторной оптимизации, и находит обширное применение в таких областях, как проектирование сетей, размещение схем и, что особенно важно, в алгоритмической торговле. Алгоритмическая торговля (или “алготрейдинг”) использует компьютерные алгоритмы для автоматического принятия торговых решений, размещения ордеров и управления сделками на финансовых рынках.
Имитация отжига вдохновлена физическим процессом отжига в металлургии, где материал нагревается до высокой температуры, а затем постепенно охлаждается контролируемым образом для изменения его физических свойств и уменьшения дефектов. Аналогично, в контексте оптимизации имитация отжига постепенно снижает температуру системы для минимизации целевой функции, допуская при этом случайные ухудшающие переходы для выхода из локальных оптимумов.
Ключевые компоненты имитации отжига
-
График температуры (График охлаждения): Температура контролирует вероятность принятия худших решений по мере выполнения алгоритма. График определяет, как температура снижается со временем. Распространенным графиком является геометрическое охлаждение, которое уменьшает температуру на постоянный множитель на каждой итерации.
-
Функция соседства: Определяет локальную область в пространстве решений для исследования. Например, в торговой стратегии функция соседства может включать небольшие корректировки параметров, таких как точки входа и выхода или уровни стоп-лосса.
-
Вероятность принятия: Определяет вероятность принятия худшего решения на основе разницы в стоимости между текущим и новым решениями и текущей температуры. Это часто управляется с помощью критерия Метрополиса, который принимает худшие решения с вероятностью ( \exp(-\Delta E / T) ).
-
Целевая функция: Функция, которую нужно минимизировать или максимизировать. В торговле это может быть коэффициент Шарпа, общая доходность или другая метрика эффективности.
Шаги имитации отжига для алгоритмической торговли
-
Инициализация: Начните с начального решения и установите начальную температуру.
- Итерация:
- Сгенерируйте соседнее решение.
- Вычислите изменение целевой функции.
- Определите, принимать ли новое решение на основе вероятности принятия.
- Отрегулируйте температуру согласно графику охлаждения.
- Завершение: Процесс продолжается до тех пор, пока не будет выполнен критерий завершения. Это может быть фиксированное количество итераций, решение, соответствующее предопределенному порогу качества, или температура ниже определенного уровня.
Применение в алгоритмической торговле
В алгоритмической торговле имитация отжига может оптимизировать многочисленные компоненты торговой стратегии. Вот некоторые конкретные применения:
1. Оптимизация параметров
Торговые стратегии часто включают множество параметров, таких как периоды скользящих средних, пороги индекса относительной силы (RSI) и уровни стоп-лосса. Имитация отжига может найти оптимальную комбинацию этих параметров для максимизации прибыли или минимизации риска.
2. Оптимизация портфеля
Помимо отдельных стратегий, она может использоваться для оптимизации распределения активов внутри портфеля. Традиционно используется структура средней дисперсии Марковица, но имитация отжига предлагает гибкую альтернативу, которая может справляться с более сложными, нелинейными задачами оптимизации.
3. Разработка стратегий
Имитация отжига может помочь в разработке новых торговых стратегий, ища комбинации правил и условий, которые лучше всего улавливают рыночные неэффективности.
4. Калибровка алгоритма
Учитывая важность стабильности параметров в живой торговле, имитация отжига может использоваться для обеспечения того, чтобы параметры, установленные во время обучения, были устойчивы к изменениям рынка, тем самым уменьшая переобучение.
Пример: применение имитации отжига к стратегии пересечения скользящих средних
Рассмотрим базовую стратегию пересечения скользящих средних, где мы стремимся оптимизировать периоды краткосрочной и долгосрочной скользящих средних.
import numpy as np
import pandas as pd
from random import randint, uniform
import yfinance as yf
# Objective Function: Return of strategy
def calculate_return(params, data):
short_window, long_window = params
data['short_mavg'] = data['Close'].rolling(window=short_window).mean()
data['long_mavg'] = data['Close'].rolling(window=long_window).mean()
data['signal'] = 0.0
data['signal'][short_window:] = np.where(data['short_mavg'][short_window:] > data['long_mavg'][short_window:], 1.0, 0.0)
data['positions'] = data['signal'].diff()
initial_capital = float(100000.0)
positions = pd.DataFrame(index=data.index).fillna(0.0)
positions['AAPL'] = data['signal']
portfolio = positions.multiply(data['Close'], axis=0)
pos_diff = positions.diff()
portfolio['holdings'] = positions.multiply(data['Close'], axis=0).sum(axis=1)
portfolio['cash'] = initial_capital - (pos_diff.multiply(data['Close'], axis=0)).sum(axis=1).cumsum()
portfolio['total'] = portfolio['cash'] + portfolio['holdings']
portfolio['returns'] = portfolio['total'].pct_change()
return portfolio['returns'].sum()
# Simulated Annealing
def simulated_annealing(data, initial_temp, cooling_rate, stopping_temp, steps):
current_params = [randint(5, 15), randint(20, 50)]
current_cost = -calculate_return(current_params, data)
current_temp = initial_temp
while current_temp > stopping_temp:
new_params = [current_params[0] + randint(-2, 2), current_params[1] + randint(-5, 5)]
new_params = [max(1, x) for x in new_params] # Ensure moving periods are positive
new_cost = -calculate_return(new_params, data)
if new_cost < current_cost or uniform(0, 1) < np.exp((current_cost - new_cost) / current_temp):
current_params = new_params
current_cost = new_cost
current_temp *= cooling_rate
return current_params
ticker = 'AAPL'
data = yf.download(ticker, start="2020-01-01", end="2023-01-01")
optimized_params = simulated_annealing(data, initial_temp=10000, cooling_rate=0.99, stopping_temp=1, steps=1000)
print("Optimized Short and Long Window Parameters:", optimized_params)
В этом примере:
- Мы загружаем исторические данные для Apple (AAPL) с помощью yfinance.
- Определяем целевую функцию (
calculate_return) для стратегии пересечения скользящих средних, которая вычисляет общую доходность. - Реализуем имитацию отжига (
simulated_annealing), которая оптимизирует период для краткосрочных и долгосрочных скользящих средних. - Скрипт пытается найти оптимальные периоды окон краткосрочной и долгосрочной скользящих средних для максимизации доходности стратегии.
Преимущества и вызовы
Преимущества:
- Выход из локальных оптимумов: Вероятность принятия худших решений в имитации отжига помогает алгоритму выходить из локальных минимумов, ища более глобальное оптимальное решение.
- Гибкость: Она может обрабатывать сложные целевые функции, различные ограничения и многогранные пространства параметров, что делает её универсальным выбором для оптимизации торговых стратегий.
- Простота: Алгоритм относительно прост в реализации и не требует информации о градиенте или сложных производных.
Вызовы:
- Настройка параметров: Производительность имитации отжига сильно зависит от графика охлаждения и критериев принятия, что требует тщательной настройки.
- Вычислительная интенсивность: Учитывая стохастическую природу, многочисленные итерации и оценки целевой функции могут быть вычислительно дорогостоящими, особенно для торговых систем реального времени.
- Время сходимости: Поиск глобального оптимума может занять значительное время, что делает её менее подходящей для очень быстрых высокочастотных торговых приложений.
Заключение
Имитация отжига представляет собой мощный, гибкий инструмент оптимизации для алгоритмической торговли. Её способность навигировать по сложным и неровным ландшафтам параметров торговых стратегий делает её ценным методом для трейдеров, стремящихся оптимизировать свои торговые системы. Несмотря на преимущества, практикующие должны помнить о вычислительных требованиях и необходимости тщательной настройки, чтобы полностью использовать преимущества имитации отжига в своих усилиях по алгоритмической торговле.