Эта стратегия торгует с MACD перекрестными сигналами для принятия решений о входе и выходе.
Логика стратегии:
Вычислите быструю и медленную EMA, их разница образует линию MACD.
Сгладить линию MACD с помощью другой EMA для получения линии сигнала.
Пройти длинный на пересечении MACD выше сигнала, и короткий на пересечении ниже.
Установите процент стоп-лосса и возьмите прибыль для управления рисками.
Преимущества:
MACD улучшается по сравнению с единой EMA для более четкой идентификации тренда.
Брейк-трейдинг своевременно отслеживает переломные моменты.
Механизмы стоп-лосса/прибыли помогают контролировать торговые риски.
Риски:
Больше ложных прорывов около нулевой линии MACD.
Настройка параметров необходима для различных торговых инструментов.
Торговля трендом подвержена риску событий, требующим остановок.
В целом, эта стратегия основана на MACD и перекрестке линии сигнала. Сильные стороны MACD способствуют производительности, но риски ложного прорыва остаются. Для стабильных прибылей в долгосрочной перспективе все еще необходимы осторожные меры контроля риска.
/*backtest start: 2023-01-01 00:00:00 end: 2023-09-11 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("uray MACD", overlay=false, pyramiding = 0, calc_on_every_tick=true, precision=2, currency="USD", default_qty_value=10, default_qty_type=strategy.cash,initial_capital=100,commission_type=strategy.commission.percent,commission_value=0.1) // === INPUT BACKTEST RANGE === FromMonth = input(defval = 6, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2018, title = "From Year", minval = 2017) ToMonth = input(defval = 6, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 2020, title = "To Year", minval = 2017) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window inTimeframe() => true isPosLong = strategy.position_size > 0 isPosShort = strategy.position_size < 0 isNoMarginPos= strategy.position_size == 0 fastLength = input(12, minval = 1, title = "MACD fast") slowlength = input(26, minval = 1, title = "MACD slow") MACDLength = input( 9, minval = 1, title = "MACD length") stopLoss = input( 10, minval = 1, title = "Stop Loss (price %)", type=float) takeProfit = input( 50, minval = 1, title = "Take Profit (price %)", type=float) src = close // Source of Calculations (Close of Bar) MACD = ta.ema(src, fastLength) - ta.ema(src, slowlength) aMACD = ta.ema(MACD, MACDLength) delta = MACD - aMACD stopLossValue = close*(stopLoss/100)/syminfo.mintick takeProfitValue = close*(takeProfit/100)/syminfo.mintick switchLongTrigger = ta.crossover(delta, 0) switchShortTrigger = ta.crossunder(delta, 0) closeLongTrigger = ta.crossunder(delta, 0) closeShortTrigger = ta.crossover(delta, 0) entryLongTrigger = ta.crossover(delta, 0) entryShortTrigger = ta.crossunder(delta, 0) // if inTimeframe() // if isNoMarginPos // if entryLongTrigger // strategy.entry("Long", strategy.long, comment="Entry Long") // strategy.exit("Stop (long SL/TP)", loss=stopLossValue, profit=takeProfitValue) // if entryShortTrigger // strategy.entry("Short", strategy.short, comment="Entry Short") // strategy.exit("Stop (short SL/TP)", loss=stopLossValue, profit=takeProfitValue) // if isPosShort // if switchLongTrigger // strategy.close_all() // strategy.entry("Long", strategy.long, comment="switch Long") // strategy.exit("Stop (long SL/TP)", loss=stopLossValue, profit=takeProfitValue) // if closeLongTrigger // strategy.close_all() // if isPosLong // if switchShortTrigger // strategy.close_all() // strategy.entry("Short", strategy.short, comment="switch Short") // strategy.exit("Stop (short SL/TP)", loss=stopLossValue, profit=takeProfitValue) // if closeShortTrigger // strategy.close_all() if inTimeframe() strategy.entry("Long", strategy.long, comment="Entry Long", when=entryLongTrigger) strategy.close("Long", when=entryShortTrigger) strategy.entry("Short", strategy.short, comment="Entry Short", when=entryShortTrigger) strategy.close("Short", when=entryLongTrigger) strategy.exit("Stop (short SL/TP)", loss=stopLossValue, profit=takeProfitValue, when=entryShortTrigger) strategy.exit("Stop (long SL/TP)", loss=stopLossValue, profit=takeProfitValue, when=entryLongTrigger)