27 октября 2023 года. Биржа Bybit. Баланс: 5000 $
Сегодня решил попробовать себя в написании полноценного торгового бота. Выбор пал на MACD-индикатор. Почему именно он? Потому что когда-то давно читал, что MACD часто используют профессионалы. Плюс, его легко понять даже новичку вроде меня.
Но первая же ошибка стоила мне 300 долларов. Вот как это было.
Что такое MACD?
MACD – это технический индикатор, который показывает разницу между двумя экспоненциальными скользящими средними (EMA). Он помогает определить моменты перекупленности и перепроданности актива.
Формула простая:
- EMA_12 = ewma(closing_price, window=12)
- EMA_26 = ewma(closing_price, window=26)
- MACD = EMA_12 - EMA_26
- Signal Line = ewma(MACD, window=9)
Где closing_price – цена закрытия свечи, ewma – экспоненциальная скользящая средняя.
Первый провал: нет трейлинг-стопа
Решил протестировать простую стратегию: если MACD пересекается выше сигнальной линии, покупаем актив; если ниже – продаём. Написал код примерно за час:
def macd_crossover(dataframe):
macd, signal, _ = ta.indicators.MACD(dataframe['close'], fastperiod=12, slowperiod=26, signalperiod=9)
return macd > signal
Запустил бота и стал ждать. Через пару дней заметил странную вещь: стратегия заработала несколько прибыльных сделок, но потом внезапно начала сливать деньги. Оказалось, что при резком движении цены вверх или вниз мои сделки закрывались слишком поздно. Рынок уходил далеко от моих позиций, и я терял прибыль.
Что я сделал не так?
Ошибка №1: Не использовал трейлинг-стоп. Это стандартный инструмент защиты позиции, позволяющий зафиксировать часть прибыли по мере движения рынка в нашу пользу.
Исправленный вариант выглядел так:
def macd_trailing_stop(dataframe, trailing_percent=0.5):
macd, signal, _ = ta.indicators.MACD(dataframe['close'], fastperiod=12, slowperiod=26, signalperiod=9)
trailing_stop = dataframe['high'].shift(1) * (1 - trailing_percent / 100)
return macd > signal and dataframe['close'] >= trailing_stop
Теперь, если цена поднялась выше трейлинг-стопа, позиция автоматически закрывалась с прибылью.
Второй провал: плохие настройки индикатора
После внедрения трейлинга решил ещё немного улучшить стратегию. Добавил проверку среднего истинного диапазона (ATR), чтобы избежать ложных сигналов при высокой волатильности.
def macd_atr_filter(dataframe, atr_period=14, atr_multiplier=2):
macd, signal, _ = ta.indicators.MACD(dataframe['close'], fastperiod=12, slowperiod=26, signalperiod=9)
atr = ta.indicators.ATR(dataframe, timeperiod=atr_period)
atr_value = atr.iloc[-1]
return macd > signal and dataframe['close'] >= trailing_stop and dataframe['close'] <= dataframe['close'].iloc[-1] + atr_multiplier * atr_value
Вроде стало лучше, но прибыль оставалась нестабильной. Тогда вспомнил старую поговорку рыбака: «Не поймал сегодня — завтра иди снова». Решил поиграть с параметрами MACD и ATR.
Настройки, которые принесли первые результаты:
- Fast period = 12
- Slow period = 26
- Signal period = 9
- Trailing percent = 0.5%
- ATR multiplier = 2
На тестировании эти параметры показали стабильные результаты с доходностью около 5% в месяц.
Цифры говорят сами за себя
За первую неделю работы бота на демо-счете получилось заработать 250 долларов. Реальный счёт пока не трогаю, боюсь повторить ошибки прошлого. Но уверен, что со временем смогу увеличить капитал.
Жена, увидев результат, сказала: «Ну вот видишь! Рыбаку тоже иногда везёт поймать крупную рыбу!» 😄
Прямая цитата
«Если MACD и ATR могут дать тебе хороший сигнал, то трейлинг-стоп поможет защитить твою прибыль.»
— Александр Элдер, известный трейдер и писатель.
Вывод
✨ Стратегия сработала 🎯
- Использовал простой индикатор MACD.
- Добавил трейлинг-стоп для фиксации прибыли.
- Настроил оптимальные параметры индикаторов.
⚠️ Что стоит учесть новичкам:
- Никогда не торгуйте без стоп-лоссов!
- Всегда тестируйте стратегию перед реализацией.
- Начинай с демо-счета, прежде чем рисковать реальными деньгами.