Стратегия следования за трендом MACD с двойным пересечением скользящих средних


Дата создания: 2024-01-23 11:22:02 Последнее изменение: 2024-01-23 11:22:02
Копировать: 1 Количество просмотров: 594
1
Подписаться
1617
Подписчики

Стратегия следования за трендом MACD с двойным пересечением скользящих средних

Обзор

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

Стратегический принцип

Сначала стратегия рассчитывает три кривые MACD: быструю, медленную и отклонённую. Быстрая линия - это более быстрая, а медленная - более длительная средняя за определенный период. Отклонённая линия - это разница между быстрой и медленной линиями.

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

Стратегические преимущества

  • Использование скрещивания двойных скользящих средних для определения направления тренда и точного захвата поворотов тренда
  • Технический индикатор MACD уменьшает ложные сигналы и улучшает качество сигналов
  • Гибкий выбор: делать больше вакансий или делать только больше/вакансий
  • Параметры могут быть изменены в зависимости от рыночных условий

Стратегический риск

  • Двойная скользящая средняя с пересечением отстает и может пропустить часть прибыли в начале поворота
  • Индекс MACD может давать ложные сигналы в условиях колебаний рынка
  • Необходимость корректировки параметров, чтобы избежать чрезмерной чувствительности или вялости

Решение риска:

  • В сочетании с другими показателями фильтрует сигналы
  • Настройка параметров, снижение частоты торгов
  • Эта стратегия применяется только при наличии явных тенденций.

Направление оптимизации стратегии

Эта стратегия может быть оптимизирована в следующих аспектах:

  1. В сочетании с другими индикаторами подтверждения сигналов, таких как индикатор KDJ, индикатор Брин-Бенд и т. д., фильтрация ложных сигналов

  2. Изменения в механизме входа в игру, например, добавление фильтров прорыва, чтобы избежать раннего или позднего входа в игру

  3. Оптимизация параметров, адаптация к рынку в зависимости от различных циклов и рыночных условий

  4. Присоединяйтесь к стратегии Stop Loss и контролируйте свои убытки

  5. Расширяется на другие виды, такие как иностранные валюты, цифровые валюты и т. д.

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

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

Исходный код стратегии
/*backtest
start: 2023-01-16 00:00:00
end: 2024-01-22 00:00:00
period: 1d
basePeriod: 1h
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/
// © DeMindSET

//@version=4
strategy("MACD Trend Follow Strategy", overlay=false)
// Getting inputs
LSB = input(title="Long/Short", defval="Long only", options=["Long only", "Short only" , "Both"]) 
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

plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
plot(macd, title="MACD", color=col_macd, transp=0)
plot(signal, title="Signal", color=col_signal, transp=0)
//
Bull= macd > signal
Bear= macd < signal
ConBull=macd>0
ConBear=macd<0
//
Green= Bull and ConBull
Red= Bear and ConBear
Yellow= Bull and ConBear
Blue= Bear and ConBull
//
bcolor = Green ? color.green : Red ? color.red : Yellow ? color.yellow : Blue ? color.blue : na
barcolor(color=bcolor)
// === INPUT BACKTEST RANGE ===
FromYear  = input(defval = 2019, title = "From Year", minval = 1920)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2009)
ToMonth   = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 31, title = "To Day", minval = 1, maxval = 31)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"

if LSB == "Long only" and Green
    strategy.entry("L",true)
if LSB == "Long only" and Red
    strategy.close("L",qty_percent=100,comment="TP Long")
if LSB == "Both" and Green
    strategy.entry("L",true)
if LSB == "Both" and Red
    strategy.entry("S",false)
if LSB == "Short only" and Red
    strategy.entry("S",false)
if LSB == "Short only" and Green
    strategy.close("S",qty_percent=100,comment="TP Short")