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

Автор:Чао Чжан, Дата: 2023-12-07 15:21:45
Тэги:

img

Обзор

Эта стратегия использует 24-периодический Дончианский канал в сочетании с 200-периодической скользящей средней как основные торговые сигналы.

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

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

  1. Дончианский канал построен с использованием самого высокого максимума и самого низкого минимума за последние 24 периода.

  2. 200-периодная скользящая средняя действует как фильтр для длинного/короткого уклонения.

  3. Сигналы входа:

  • Краткий: закрытие предыдущей панели находится выше верхней полосы Доньчянского канала и ниже 200-периодного MA. Открытие текущей панели находится ниже предыдущего закрытия, а низкий уровень находится ниже 200-MA.
  • Длинный: закрытие предыдущей панели находится ниже нижней полосы Дончианского канала и выше 200-периодного MA. Открытие текущей панели находится выше предыдущего закрытия, а максимум - выше 200-периодного MA.
  1. Стоп-лосс для коротких позиций устанавливается на самый высокий максимум за последние 3 бара. Приобретение прибыли устанавливается на цену входа минус 3 раза разницу между стоп-лосом и ценой входа. Логика длинной позиции стоп-лосса и приобретения прибыли является противоположной.

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

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

Стратегия имеет следующие преимущества:

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

  2. Контролируемый риск: Использование последнего максимального максимума/нижнего минимума в качестве уровня остановки потери эффективно управляет негативными последствиями для проигрышных сделок.

  3. Простая и простая в реализации: логика использует простые, интуитивные индикаторы, которые легко понять и выполнить.

  4. Устойчивость на разных рынках и в разные периоды времени: при сравнительно небольшом количестве параметров стратегия стабильна на разных продуктах и в разные периоды времени.

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

Основными рисками этой стратегии являются:

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

  2. Риск преждевременного сигнала выхода: выход на новые противоположные сигналы может вызвать чрезмерную торговлю на нестабильных рынках из-за повторного входа и выхода.

  3. Риск оптимизации параметров: Плохая настройка параметров периода просмотра Дончианского канала или скользящей средней может привести к задержке или частоте сигналов. Это может быть сведено к минимуму посредством строгой оптимизации и комбинаторного тестирования.

Возможности для расширения

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

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

  2. Проверьте различные коэффициенты стоп-лосса для получения прибыли, чтобы сбалансировать уровень выигрыша по сравнению с вознаграждением/риском.

  3. Включить дополнительные фильтры на входные сигналы с использованием таких индикаторов, как MACD, RSI и т. д., чтобы улучшить надежность.

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

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

Заключение

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


/*backtest
start: 2023-11-06 00:00:00
end: 2023-12-06 00:00:00
period: 1h
basePeriod: 15m
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/
// © Mysteriown

//@version=4

strategy("Lagged Donchian Channel + EMA", overlay = true)

//tradePeriod = time(timeframe.period,"0000-0000:1234567")?true:false


// ------------------------------------------ //
// ----------------- Inputs ----------------- //
// ------------------------------------------ //

period = input(24, title="Channel's periods")
Pema = input(200, title="EMA's periods ?")
ratio = input(3, title="Ratio TP", type=input.float)
loss = input(20, title="Risk Loss ($)")
lev = input(5, title="Leverage *...")
chan = input(title="Plot channel ?", type=input.bool, defval=false)
Bpos = input(title="Plot Bull positions ?", type=input.bool, defval=false)
bpos = input(title="Plot Bear positions ?", type=input.bool, defval=false)
labels = input(title="Plot labels of bets ?", type=input.bool, defval=true)
supp = input(title="Delete last labels ?", type=input.bool, defval=true)


// ------------------------------------------ //
// ---------- Canal, EMA and arrow ---------- //
// ------------------------------------------ //

pema = ema(close,Pema)
plot(pema, title="EMA", color=color.blue)

canalhaut = highest(period)[1]
canalbas = lowest(period)[1]

bear = close[1] > canalhaut[1] and close < open and high > pema
bull = close[1] < canalbas[1] and open < close and low < pema

canalhautplot = plot(chan? canalhaut:na, color=color.yellow)
canalbasplot = plot(chan? canalbas:na, color=color.yellow)

plotshape(bear, title='Bear', style=shape.triangledown, location=location.abovebar, color=color.red, offset=0)
plotshape(bull, title='Bull', style=shape.triangleup, location=location.belowbar, color=color.green, offset=0)


// ------------------------------------------ //
// ------------- Position Short ------------- //
// ------------------------------------------ //

SlShort = highest(3)
BidShort = close[1]

TpShort = BidShort-((SlShort-BidShort)*ratio)
deltaShort = (SlShort-BidShort)/BidShort
betShort = round(loss/(lev*deltaShort)*100)/100
cryptShort = round(betShort*lev/BidShort*1000)/1000

// if bear[1] and labels //and low < low[1]
//     Lbear = label.new(bar_index, na, text="SHORT\n\nSL: " + tostring(SlShort) + "\n\nBid: " + tostring(BidShort) + "\n\nTP: " + tostring(TpShort) + "\n\nMise: " + tostring(betShort) + "\n\nCryptos: " + tostring(cryptShort), color=color.red, textcolor=color.white, style=label.style_labeldown, yloc=yloc.abovebar)
//     label.delete(supp ? Lbear[1] : na)

var bentry=0.0
var bsl=0.0
var btp=0.0

if bear[1] and low < low[1]
    bentry:=BidShort
    bsl:=SlShort
    btp:=TpShort
    
pbentry = plot(bpos? bentry:na, color=color.orange)
plot(bpos? (bentry+btp)/2:na, color=color.gray)
pbsl = plot(bpos? bsl:na, color=color.red)
pbtp = plot(bpos? btp:na, color=color.green)

fill(pbentry,pbsl, color.red, transp=70)
fill(pbentry,pbtp, color.green, transp=70)


// ------------------------------------------ //
// ------------- Position Long -------------- //
// ------------------------------------------ //

SlLong = lowest(3)
BidLong = close[1]

TpLong = BidLong + ((BidLong - SlLong) * ratio)
deltaBull = (BidLong - SlLong)/BidLong
betLong = round(loss/(lev*deltaBull)*100)/100
cryptLong = round(betLong*lev/BidLong*1000)/1000

// if bull[1] and labels //and high > high[1]
//     Lbull = label.new(bar_index, na, text="LONG\n\nSL: " + tostring(SlLong) + "\n\nBid: " + tostring(BidLong) + "\n\nTP: " + tostring(TpLong) + "\n\nMise: " + tostring(betLong) + "\n\nCryptos: " + tostring(cryptLong), color=color.green, textcolor=color.white, style=label.style_labelup, yloc=yloc.belowbar)
//     label.delete(supp ? Lbull[1] : na)

var Bentry=0.0
var Bsl=0.0
var Btp=0.0

if bull[1] and high > high[1]
    Bentry:=BidLong
    Bsl:=SlLong
    Btp:=TpLong
    
pBentry = plot(Bpos?Bentry:na, color=color.orange)
plot(Bpos?(Bentry+Btp)/2:na, color=color.gray)
pBsl = plot(Bpos?Bsl:na, color=color.red)
pBtp = plot(Bpos?Btp:na, color=color.green)

fill(pBentry,pBsl, color.red, transp=70)
fill(pBentry,pBtp, color.green, transp=70)


// ------------------------------------------ //
// --------------- Strategie ---------------- //
// ------------------------------------------ //

Bear = bear[1] and low < low[1]
Bull = bull[1] and high > high[1]

if (Bear and strategy.opentrades==0)
    strategy.order("short", false, 1, limit=BidShort)
    strategy.exit("exit", "short", limit = TpShort, stop = SlShort)

strategy.cancel("short", when = high > SlShort or low < (BidShort+TpShort)/2)
strategy.close("short", when=bull)

if (Bull and strategy.opentrades==0)
    strategy.order("long", true, 1, limit=BidLong)
    strategy.exit("exit", "long", limit = TpLong, stop = SlLong)
    
strategy.cancel("long", when = low < SlLong or high > (BidLong+TpLong)/2)
strategy.close("long", when=bear)


Больше