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


Дата создания: 2023-12-11 15:21:58 Последнее изменение: 2023-12-11 15:21:58
Копировать: 0 Количество просмотров: 637
1
Подписаться
1621
Подписчики

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

Обзор

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

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

Стратегия использует две движущиеся средние: быстрый МА и медленный МА. Быстрый МА-цикл обычно устанавливается на более короткий период (например, 15-ти периодов), чтобы улавливать краткосрочные изменения цен; медленный МА-цикл обычно устанавливается на более длинный период (например, 21-ти периодов), чтобы определять направление основных тенденций. Торговые сигналы стратегии исходят из пересечения двух МА: сигнал покупки при прохождении медленного МА над быстрым МА и сигнал продажи при прохождении медленного МА ниже.

Построение различных пакетов MA позволяет регулировать длительность времени, в течение которого стратегия будет улавливать тренды. Более короткие пакеты MA позволяют улавливать возможности для изменения цены в короткие, небольшие периоды; более длинные пакеты MA позволяют фильтровать колебания и улавливать только тенденции на более длинном уровне.

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

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

Двухлинейная стратегия имеет следующие преимущества:

  1. Концепция проста, легко понятна и реализуема.
  2. Можно отслеживать тенденции в разные периоды времени, адаптируя циклы МА к различным рыночным условиям;
  3. В то же время, в некоторых странах, например, в Китае и Китае, это не так.
  4. В сочетании со стоп-стоп-подом можно эффективно контролировать риск.
  5. Легко оптимизировать, можно скорректировать циклы МА, параметры управления рисками и т. Д., Чтобы еще больше повысить эффективность.

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

При этом существуют определенные риски, связанные с двойной равномерной стратегией, в основном в следующих областях:

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

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

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

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

  1. Добавление фильтров, таких как объем сделок или показатели колебаний, чтобы избежать частого создания складов во время колебаний и ложных прорывов;
  2. Циклы и комбинации МА могут быть разнообразно скорректированы, чтобы соответствовать характеристикам различных циклов и сортов;
  3. можно тестировать различные типы МА, такие как EMA, LWMA и т. д., выбирая наиболее чувствительную к ценовой реакции форму МА;
  4. Добавление алгоритмов машинного обучения, которые автоматически оптимизируют параметры MA, параметры сверхпропорций, такие как стоп-магнита;
  5. Можно тестировать различные способы остановки, такие как прыжковая остановка, отслеживающая остановка, средняя остановка и т. д.

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

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

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

Исходный код стратегии
/*backtest
start: 2022-12-10 00:00:00
end: 2023-06-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title = "Silent Trader Strategy", shorttitle = "Silent Trader", overlay = true, pyramiding = 0, default_qty_type = strategy.cash, default_qty_value = 1000, commission_value = 0.0675, initial_capital = 1000, currency = currency.USD, calc_on_order_fills = true, calc_on_every_tick = true)

maFastSource   = input(defval = ohlc4, title = "Fast MA Source")
maFastLength   = input(defval = 15, title = "Fast MA Period", minval = 1)
maSlowSource   = input(defval = ohlc4, title = "Slow MA Source")
maSlowLength   = input(defval = 21, title = "Slow MA Period", minval = 1)

tradeInvert     = input(defval = false, title = "Invert Trade Direction?")
inpTakeProfit   = input(defval = 100, title = "Take Profit percentage(0.1%)", minval = 0)
inpStopLoss     = input(defval = 100, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 0, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)

useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

useTimeLimit    = input(defval = true, title = "Use Start Time Limiter?")
startYear       = input(defval = 2018, title = "Start From Year",  minval = 0, step = 1)
startMonth      = input(defval = 05, title = "Start From Month",  minval = 0,step = 1)
startDay        = input(defval = 01, title = "Start From Day",  minval = 0,step = 1)
startHour       = input(defval = 00, title = "Start From Hour",  minval = 0,step = 1)
startMinute     = input(defval = 00, title = "Start From Minute",  minval = 0,step = 1)

startTimeOk() =>
    inputTime = timestamp(syminfo.timezone, startYear, startMonth, startDay, startHour, startMinute)
    timeOk = time > inputTime ? true : false
    r = (useTimeLimit and timeOk) or not useTimeLimit

maFast = ema(maFastSource, maFastLength)
maSlow = sma(maSlowSource, maSlowLength)

fast = plot(maFast, title = "Fast MA", color = #26A69A, linewidth = 1, style = line, transp = 50)
slow = plot(maSlow, title = "Slow MA", color = #EF5350, linewidth = 1, style = line, transp = 50)

aboveBelow = maFast >= maSlow ? true : false
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false

if( startTimeOk() )
    enterLong = not tradeDirection[1] and tradeDirection
    exitLong = tradeDirection[1] and not tradeDirection
    strategy.entry( id = "Long", long = true, when = enterLong )
    //strategy.close( id = "Long", when = exitLong )
    
    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.exit("Exit Long", from_entry = "Long",  profit = close * useTakeProfit / 1000 / syminfo.mintick, loss = close * useStopLoss / 1000 / syminfo.mintick, trail_points = close * useTrailStop / 1000 / syminfo.mintick, trail_offset = close * useTrailOffset / 1000 / syminfo.mintick)
    strategy.exit("Exit Short", from_entry = "Short", profit = close * useTakeProfit / 1000 / syminfo.mintick, loss = close * useStopLoss / 1000 / syminfo.mintick, trail_points = close * useTrailStop / 1000 / syminfo.mintick, trail_offset = close * useTrailOffset / 1000 / syminfo.mintick)