Автор:Чао Чжан, Дата: 2024-01-23 11:22:02
Тэги:

img

Обзор

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

Логика стратегии

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

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

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

Риски стратегии

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

Уменьшение риска:

  • Комбинировать с другими индикаторами для фильтрации сигналов
  • Настройка параметров на более низкую частоту торговли
  • Принимайте стратегию только тогда, когда тенденция очевидна

Области улучшения

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

  1. Включить другие индикаторы, такие как KDJ, Bollinger Bands и т. д., чтобы подтвердить сигналы и отфильтровать ложные сигналы

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

  3. Оптимизировать настройки параметров, корректировать периоды быстрой и медленной линии на основе различных временных рамок и рыночных режимов

  4. Добавление стоп-лосса для контроля потери от одной сделки

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

Резюме


/*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")


Больше