Эта стратегия генерирует индикатор MACD, рассчитывая разницу между быстрыми и медленными скользящими средними линиями, и оценивает тенденцию и перекупленные/перепроданные области финансовых рынков вместе с линией сигнала. Она длится, когда MACD и линия сигнала образуют золотой крест, когда цена находится выше 200-дневного MA, и становится короткой, когда формирует мертвый крест, когда цена находится ниже 200-дневного MA. Это относится к типичной стратегии двойного скользящего среднего кроссовера.
Основная логика состоит в том, чтобы использовать индикатор MACD, генерируемый из разницы быстрого и медленного MA, для определения направления тренда рынка, и линию сигнала для оценки уровня перекупленности / перепродажи. Когда MACD и линия сигнала образуют золотой крест, это длинный сигнал для длинного хода. Когда образуется мертвый крест, это короткий сигнал для короткого хода. Между тем, он использует отношение цены с 200-дневным MA для фильтрации сигналов, принимая только длинные сигналы, когда цена выше 200-дневного MA, и короткие сигналы, когда цена ниже 200-дневного MA, чтобы избежать сбоев во время сильных тенденций.
Конкретный метод расчета:
Когда MACD пересекает линию сигнала выше, когда они оба находятся ниже 0, это золотой длинный сигнал. Когда MACD пересекает линию сигнала ниже, когда они оба находятся выше 0, это короткий сигнал мертвого креста. Между тем, длится только тогда, когда цена выше 200-дневной MA, и короткий, когда цена ниже 200-дневной MA.
Может снизить риски путем сокращения периодов MA, добавления других индикаторов и добавления стоп-лосса.
1.Испытано в разных временных рамках от 15 до 1D, оптимальные результаты в 4H в рискованно скорректированных доходах
2.Оптимизируйте быстрый и медленный MA так, чтобы MACD фиксировал циклы, 7-21 хорошо для 15m
3.Халл МА по MACD дал хорошие результаты
4.Ограничение потерь улучшает управление рисками
В целом это очень простая и практичная стратегия, генерирующая высоковероятные торговые сигналы с помощью двойной системы индикаторов и фильтрации цен. Она имеет относительно высокую маржу прибыли, использует классическую комбинацию параметров MACD, чтобы избежать чрезмерной оптимизации.
/*backtest start: 2024-02-14 00:00:00 end: 2024-02-21 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Hurmun //@version=4 strategy("Simple MACD strategy ", overlay=true, margin_long=100, margin_short=100) fast_length = input(title="Fast Length", type=input.integer, defval=12) slow_length = input(title="Slow Length", type=input.integer, defval=26) src = input(title="Source", type=input.source, defval=close) signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9) sma_source = input(title="Simple MA (Oscillator)", type=input.bool, defval=false) sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=false) // Plot colors col_grow_above = #26A69A col_grow_below = #FFCDD2 col_fall_above = #B2DFDB col_fall_below = #EF5350 col_macd = #0094ff col_signal = #ff6a00 // Calculating fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length) slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length) macd = fast_ma - slow_ma signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length) hist = macd - signal movinga2 = input(title="movinga 2", type=input.integer, defval=200) movinga200 = sma(close, movinga2) plot(movinga200, "MA", color.orange) longCondition = crossover(macd, signal) and macd < 0 and signal < 0 and close > movinga200 if (longCondition) strategy.entry("My Long Entry Id", strategy.long) shortCondition = crossunder(macd, signal) and macd > 0 and signal > 0 and close < movinga200 if (shortCondition) strategy.entry("My Short Entry Id", strategy.short) shortProfitPerc = input(title="Short Take Profit (%)", minval=0.0, step=0.1, defval=2) / 100 longProfitPerc = input(title="Long Take Profit (%)", minval=0.0, step=0.1, defval=2) / 100 stoploss = input(title="stoploss in %", minval = 0.0, step=1, defval=2) /100 longStoploss = strategy.position_avg_price * (1 - stoploss) longExitPrice = strategy.position_avg_price * (1 + longProfitPerc) shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc) shortStoploss = strategy.position_avg_price * (1 + stoploss) if (strategy.position_size > 0 ) strategy.exit(id="XL TP", limit=longExitPrice, stop=longStoploss) if (strategy.position_size < 0 ) strategy.exit(id="XS TP", limit=shortExitPrice, stop=shortStoploss)