Стратегия отслеживания тенденций перекрестного использования двойного MA

Автор:Чао Чжан, Дата: 2023-12-21 16:10:22
Тэги:

img

Обзор

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

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

  1. Вычислить N-дневную EMA как короткосрочную быструю линию;
  2. Вычислить м-дневную ЭМА как медленную линию на длительный срок;
  3. Длинный путь, когда быстрая линия проходит через медленную линию вверх, и короткий путь, когда она проходит вниз;
  4. Сигнал выхода: обратный перекресток (например, выход длинный, когда происходит длинный перекресток).
  5. Для управления рисками используйте стоп-лосс, прибыль, отставание стоп-лосса.

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

  1. Принятие двойных линий EMA позволяет лучше определить точки переворота ценовой тенденции и улавливать движения тренда.
  2. Сочетание стоп-лосса, take profit и trailing stop помогает ограничить потерю на одной сделке, зафиксировать прибыль и уменьшить вывод.
  3. Существует множество настраиваемых параметров для корректировки и оптимизации для различных продуктов и рыночных условий.
  4. Логика стратегии проста и ясна, легко понять и изменить.
  5. Поддержка как длинных, так и коротких операций, адаптируемых к различным рыночным условиям.

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

  1. Стратегии двойного MA очень чувствительны к ложным прорывам и склонны к ловушке.
  2. Неправильное настройка параметров может привести к частой торговле, увеличению затрат на торговлю и потерям от сдвига.
  3. Сама по себе стратегия не может определить точки переворота тенденции, она должна сочетаться с другими показателями.
  4. Это легко генерировать торговые сигналы на различных рынках, но фактическая рентабельность, как правило, низкая.
  5. Параметры необходимо оптимизировать для различных продуктов и рыночных условий.

Риски могут быть уменьшены:

  1. Фильтрация ложных сигналов другими индикаторами.
  2. Оптимизация параметров для снижения частоты торговли.
  3. Добавление индикаторов оценки тенденций для избежания торгов на рынке с ограниченными диапазонами.
  4. Корректировка размеров позиций с целью снижения рисков в рамках единой торговли.

Руководство по оптимизации

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

  1. Оптимизировать быстрые и медленные периоды MA для различных продуктов и рынков.
  2. Добавить другие индикаторы для определения тенденций и фильтрации ложных сигналов, например MACD, KDJ и т.д.
  3. Подумайте о замене EMA на SMA или WMA.
  4. Динамическое регулирование стоп-потери на основе ATR.
  5. Гибкость корректировки размеров отдельных позиций на основе методологии размещения позиций.
  6. Самоадаптивная оптимизация параметров на основе показателей корреляции и волатильности.

Резюме

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


/*backtest
start: 2023-11-20 00:00:00
end: 2023-12-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2

strategy(title = "Strategy Code Example", shorttitle = "Strategy Code Example", overlay = true)

// Revision:        1
// Author:          @JayRogers
//
// *** THIS IS JUST AN EXAMPLE OF STRATEGY RISK MANAGEMENT CODE IMPLEMENTATION ***

// === GENERAL INPUTS ===
// short ma
maFastSource   = input(defval = open, title = "Fast MA Source")
maFastLength   = input(defval = 14, title = "Fast MA Period", minval = 1)
// long ma
maSlowSource   = input(defval = open, title = "Slow MA Source")
maSlowLength   = input(defval = 21, title = "Slow MA Period", minval = 1)

// === STRATEGY RELATED INPUTS ===
tradeInvert     = input(defval = false, title = "Invert Trade Direction?")
// the risk management inputs
inpTakeProfit   = input(defval = 1000, title = "Take Profit", minval = 0)
inpStopLoss     = input(defval = 200, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 200, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

// === SERIES SETUP ===
/// a couple of ma's..
maFast = ema(maFastSource, maFastLength)
maSlow = ema(maSlowSource, maSlowLength)

// === PLOTTING ===
fast = plot(maFast, title = "Fast MA", color = green, linewidth = 2, style = line, transp = 50)
slow = plot(maSlow, title = "Slow MA", color = red, linewidth = 2, style = line, transp = 50)

// === LOGIC ===
// is fast ma above slow ma?
aboveBelow = maFast >= maSlow ? true : false
// are we inverting our trade direction?
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false

// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() => not tradeDirection[1] and tradeDirection // functions can be used to wrap up and work out complex conditions
exitLong() => tradeDirection[1] and not tradeDirection
strategy.entry(id = "Long", long = true, when = enterLong()) // use function or simple condition to decide when to get in
strategy.close(id = "Long", when = exitLong()) // ...and when to get out
// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort() => tradeDirection[1] and not tradeDirection
exitShort() => not tradeDirection[1] and tradeDirection
strategy.entry(id = "Short", long = false, when = enterShort())
strategy.close(id = "Short", when = exitShort())

// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)


Больше