Стратегия стоп-лосса на основе индикатора MACD


Дата создания: 2023-10-26 15:51:34 Последнее изменение: 2023-10-26 15:51:34
Копировать: 0 Количество просмотров: 709
1
Подписаться
1617
Подписчики

Стратегия стоп-лосса на основе индикатора MACD

Обзор

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

Принципы

В этой стратегии сначала рассчитываются MACD-линия и линия сигнала. Когда MACD-линия прорывает сигнальную линию снизу вверх, это рассматривается как сигнал к покупке. Для фильтрации ложного прорыва стратегия требует barssince ((crossover ((macd_line, signal_line)) <= 5, то есть прорыв происходит в пределах последних 5 K-линий.

Для каждой сделки стратегия рассчитывает разумную стоп-цену и цену остановки. Стоп-цену устанавливают как самую низкую цену на последних 3 линиях K. Стоп-цену устанавливают как цену покупки плюс стоп-цену в 4 раза от цены покупки.

Ключевым является то, что стратегия рассчитывает конкретную позицию для каждой сделки на основе приемлемого риска. Устанавливается максимально приемлемый убыток для каждой сделки в процентах от общего капитала с помощью параметра capital_risk. Затем размер позиции в долларах США рассчитывается на основе стоп-риска.

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

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

  • Контроль риска - первоочередное требование, риск в каждой сделке контролируется
  • Оптимизация размеров позиций, максимальное использование средств
  • Стоп-стратегия эффективно контролирует отступление
  • Разумная задержка, большой потенциал для прибыли

Риски и улучшения

  • MACD отстает, может пропустить быстро меняющиеся тенденции
  • Неправильно настроенная позиция стоп-лосса или стоп-стоп может уменьшить доход или увеличить риск
  • Возможно, слишком высокая частота сделок, повышенная стоимость

Можно подумать:

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

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2022-10-19 00:00:00
end: 2023-10-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy( "McDonalds ", shorttitle="Ur Lovin' It", initial_capital=10000, default_qty_type=strategy.cash, currency=currency.USD )

capital_risk    = input( 1.0, "% capital risk per trade" ) / 100
r_exit          = input( 4.0, "Take Profit in 'R'" )
wma_length      = input( 150, 'WMA Bias Length' )

[macd_line, signal_line, hist ] = macd(close, 12, 26, 9)

w_line = wma( close, wma_length )

golong = barssince(crossover(macd_line, signal_line)) <= 5 and ( macd_line < 0 and signal_line < 0 ) and ( close > w_line ) and strategy.opentrades == 0

float stop = na
float tp = na

// For a stop, use a recent low 
stop := golong ? lowest(low, 3)[1] : stop[1]
range = abs(close - stop)
tp := golong ? close + (r_exit * range) : tp[1]


// This is the bit that calculates how much size to use so we only lose 1% of the `strategy.equity`
how_much_willing_to_lose = strategy.equity * capital_risk
// Spread the risk across the stop range 
position_size_in_usd = how_much_willing_to_lose / (range / close)
// Sized specified in base contract
position_size_in_contracts = position_size_in_usd / close

// Enter the position
if golong
    strategy.entry("long", strategy.long, qty=position_size_in_contracts)
    strategy.exit("long exit","long", stop=stop, limit=tp)

// experimental exit strategy
// hist_strength = hist >= 0 ? ( hist[1] < hist ? 'strong' : 'weak') : ( hist[1] < hist ? 'weak' : 'strong' )
// if hist < 0 and hist_strength == 'strong' and falling( hist, 8 )
//     strategy.close("long")


plot( strategy.equity,  color=strategy.equity > 10000 ? color.green : color.red, linewidth=2 )