Стратегия наложения сигналов тренда

Автор:Чао Чжан, Дата: 2024-02-18 10:00:22
Тэги:

img

Обзор

Эта стратегия генерирует торговые сигналы путем вычисления индексов направленного движения (DMI) DI+ и DI- наряду с средним направленным индексом (ADX) и экспоненциальным движущимся средним (EMA). Он запускает длинный сигнал, когда DI+ пересекает DI- и ADX выше 20.

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

  1. Расчет DI+, DI-, ADX

    • Используйте ta.dmi() для вычисления DI+, DI-, ADX
    • DI+/DI- измеряет направленное движение цен
    • ADX измеряет силу движения цен
  2. Расчет экспоненциальной скользящей средней

    • Использовать пользовательскую функцию my_ema() для вычисления EMA
    • EMA сглаживает данные о ценах
  3. Создание торговых сигналов

    • Длинный сигнал: DI+ пересекается над DI- и ADX > 20 и близко > EMA
      • Указывает на тенденцию к росту и повышенную волатильность
    • Краткий сигнал: DI- пересекается ниже DI+ и ADX > 25 и близко < EMA
      • Указывает на тенденцию к снижению и высокую волатильность
  4. Установка стоп-потери

    • Длинная остановка убытков: DI- пересекается над DI+ и ADX > 30
      • Указывает на изменение тренда
    • Краткий стоп-потеря: DI+ пересекается ниже DI- и ADX > 30
      • Указывает на изменение тренда

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

Анализ преимуществ

  1. Двойной дифференциатор избегает ложных сигналов
    • Одно DI может дать ложные сигналы, двойной DI обеспечивает тенденцию
  2. Порог ADX требует повышенной волатильности
    • Только торгует высокой волатильности движется, избегает диапазона
  3. EMA дополняет DI
    • EMA выявляет среднесрочные и долгосрочные тенденции
  4. Строгий стоп-лосс
    • Быстро снижает убытки

Анализ рисков

  1. Частые остановки потери
    • Волатильные колебания могут привести к частым остановкам
  2. Зависимость от параметров
    • Нужно найти оптимальные параметры DI и ADX
  3. Низкая частота торговли
    • Строгие правила сокращают торговлю

Может оптимизировать, расширяя стоп-потерю, настраивая параметры, добавляя фильтры для увеличения частоты.

Возможности оптимизации

  1. Оптимизация параметров
    • Оптимизировать параметры DI и ADX
  2. Добавить фильтры
    • Объем, дивергенция и т.д.
  3. Расширить стоп-лосс
    • Расслабление остановок для уменьшения частоты

Заключение

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


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Tamil_FNO_Trader

//@version=5
strategy("Overlay Signals by TFOT", overlay=true)

// Calculate DMI
len = input.int(14, minval=1, title="DI Length")
lensig = input.int(14, title="ADX Smoothing", minval=1, maxval=50)
[diplus, diminus, adx] = ta.dmi(len, lensig)

// Get EMA
emalen = input.int(26, minval=1, title = "EMA Length")
emasrc = input.source(close, title = "EMA Source")

my_ema(src, length) =>
    alpha = 2 / (length + 1)
    sum = 0.0
    sum := na(sum[1]) ? src : alpha * src + (1 - alpha) * nz(sum[1])
EMA2 = my_ema(emasrc, emalen)

// Variables
var bool buycondition1 = false
var bool sellcondition1 = false

var int firstbuybar = na
var int firstsellbar = na

var int buyexitbar = na
var int sellexitbar = na

var bool buyexit1 = false
var bool sellexit1 = false

// Buy & Sell Conditions
buycondition1 := (ta.crossover(diplus, diminus)) and (adx > 20) and (close > EMA2) and na(firstbuybar)
sellcondition1 := (ta.crossover(diminus, diplus)) and (adx > 25) and (close < EMA2) and na(firstsellbar)

buyexit1 := ta.crossover(diminus, diplus) and (adx > 30) and na(buyexitbar)
sellexit1 := ta.crossover(diplus, diminus) and (adx > 30) and na(sellexitbar)

if buycondition1
    if(na(firstbuybar))
        firstbuybar := bar_index
        buyexitbar := na
        firstsellbar := na
        strategy.entry("Buy", strategy.long)

if sellcondition1
    if(na(firstsellbar))
        firstsellbar := bar_index
        sellexitbar := na
        firstbuybar := na
        strategy.entry("Sell", strategy.short)

if buyexit1 and not na(firstbuybar)
    if(na(buyexitbar))
        buyexitbar := bar_index
        firstbuybar := na
        firstsellbar := na
        strategy.close("Buy")

if sellexit1 and not na(firstsellbar)
    if(na(sellexitbar))
        sellexitbar := bar_index
        firstsellbar := na
        firstbuybar := na
        strategy.close("Sell")

// Plot signals on chart
hl = input.bool(defval = true, title = "Signal Labels")

plotshape(hl and buycondition1 and bar_index == firstbuybar ? true : na, "Buy", style = shape.labelup, location = location.belowbar, color = color.green, text = "Buy", textcolor = color.white, size = size.tiny)
plotshape(hl and sellcondition1 and bar_index == firstsellbar ? true : na, "Sell", style = shape.labeldown, location = location.abovebar, color = color.red, text = "Sell", textcolor = color.white, size = size.tiny)

plotshape(hl and buyexit1 and bar_index == buyexitbar ? true : na, "Buy Exit", style = shape.labelup, location = location.belowbar, color = color.red, text = "Buy X", textcolor = color.white, size = size.tiny)
plotshape(hl and sellexit1 and bar_index == sellexitbar ? true : na, "Sell Exit", style = shape.labeldown, location = location.abovebar, color = color.red, text = "Sell X", textcolor = color.white, size = size.tiny)



Больше