10EMA Двойной кроссовер Стратегия следования за трендом


Дата создания: 2023-12-29 16:03:55 Последнее изменение: 2023-12-29 16:03:55
Копировать: 1 Количество просмотров: 807
1
Подписаться
1621
Подписчики

10EMA Двойной кроссовер Стратегия следования за трендом

Обзор

Эта стратегия является стратегией отслеживания тренда, основанной на двойном скрещивании 10 ЭМА и 50 ЭМА. Она сочетает в себе 10 ЭМА часовой линии в качестве вспомогательного решения, чтобы динамически находить направление тренда на рынке, где смены быков и медведей, для автоматического отслеживания стоп-лостов.

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

Основная логика стратегии основана на золотом форексе 10 ЭМА и 50 ЭМА. В частности, когда 10 ЭМА сверху проходит 50 ЭМА, формируя золотой форекс, цена входит в восходящий тренд; когда 10 ЭМА сверху снизу проходит 50 ЭМА, формируя мертвый форекс, цена входит в нисходящий тренд.

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

После открытия позиции, стратегия использует выходный способ отслеживания стоп-лосса + лимит-стоп. Отслеживание стоп-лосса позволяет блокировать прибыль и максимально обеспечить прибыль от торговли; лимит-стоп гарантирует получение прибыли от закрытия позиции, когда цена достигнет целевой точки.

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

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

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

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

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

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

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

Существует несколько способов оптимизации этой стратегии: во-первых, можно тестировать различные комбинации параметров, такие как циклы EMA, корень задержки открытия позиции и т. Д., чтобы найти оптимальные параметры; во-вторых, можно вводить больше вспомогательных показателей, таких как MACD, BOLL и т. Д., для фильтрации сигналов и улучшения качества сигналов; в-третьих, можно оптимизировать логику остановки убытков, например, использовать другие способы остановки, такие как временная остановка убытков, колебательная остановка убытков; в-четвертых, можно объединить больше условий для открытия стратегии торговли, например, запускать сигнал только в течение определенного периода времени или при падении.

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

Стратегия 10 EMA Double Cross Trend Tracking Strategy, которая определяет направление текущей тенденции с помощью EMA golden cross и death cross, устанавливает стоп-стоп и стоп-стоп для отслеживания прибыли и контроля риска, а также в сочетании с помощью фильтрационных сигналов для улучшения качества сигнала, является более полной стратегией для торговли тенденциями. По сравнению с одним показателем и традиционными стоп-стопами, эта стратегия имеет преимущества точности суждения, оптимизации стоп-стоп и т. Д., которая позволяет эффективно получать доход от тренда.

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

//@version=5
strategy("10ema Strat 9", overlay=true, format=format.price)
//#region // inputs for candles
//time
t1 = time(timeframe.period,"0930-1500") //last hour of market is not ideal for trading
// candle status
bullish = close > open and barstate.isconfirmed
bearish = open > close and barstate.isconfirmed
bullcandle = ta.valuewhen(bullish, close, 0)
bearcandle = ta.valuewhen(bearish, close, 0)
ema1 = input.int(10, minval=1, title="short ema")
ema2 = input.int(50, minval=1, title="long ema")
ema3 = input.int(200, minval=1, title="hourly 10 ema")
//@variable Input for source
src = input(close, title="Source")
offsetema = input.int(title="Offset", defval=0, minval=-500, maxval=500)
sema = ta.ema(src, ema1)//@variable Input for smaller ema1
lema = ta.ema(src, ema2)//@variable Input for longer ema2
hema = ta.ema(src, ema3)// @variable Input for hourly ema3
bullcrosscount = ta.barssince(ta.crossover(sema,lema)) //@variable Input 10/50 cross higher
bearcrosscount = ta.barssince(ta.crossunder(sema,lema)) //@variable Input 10/50 cross lower
ideallong = bullcrosscount <= 5 //number of candles after the cross
idealshort = bearcrosscount <= 5 //number of candles after the cross

emabull = (sema > lema) and bearish and close > sema and close > hema and ideallong and t1 and barstate.isconfirmed
xemabull = ta.barssince(emabull)
dbullema = emabull and emabull[1] and xemabull <=1
bullentry = if dbullema
    ta.valuewhen(emabull[1], high + 0.05, 0)
else 
    ta.valuewhen(emabull, high + 0.05, 0)
bullentryh = dbullema ? bullentry[1] : bullentry
bullentrylow = ta.valuewhen(emabull, low - 0.05, 0)
bullstop = (bullentryh - bullentrylow) <= 1.00 ? bullentryh - 1.00 : (bullentryh - bullentrylow) <= 10.40 ? bullentrylow : na
bulltarget = (bullentryh - bullstop) * 1.62 + bullentryh

// bear setup
emabear = (sema < lema) and bullish and close < sema and close < hema and idealshort and t1 and barstate.isconfirmed
xemabear = ta.barssince(emabear)
dbearema = emabear and emabear [1] and xemabear <=1
bearentry = if dbearema
    ta.valuewhen(emabear[1], low - 0.05, 0)
else
    ta.valuewhen(emabear, low - 0.05, 0)
bearentryh = dbearema ? bearentry[1] : bearentry
bearentryhigh = ta.valuewhen(emabear, high + 0.05, 0)
bearstop = (bearentryhigh - bearentryh) <= 1.00 ? bearentryh + 1.00 : (bearentryh - bearentryhigh) <= 10.40 ? bearentryhigh : na
beartarget = bearentryh - (bearstop-bearentryh) * 1.62

bullclose = (xemabull <=7) and bullish and bullcrosscount >=1 and barstate.isconfirmed //number of candles for a close above
bearclose = (xemabear <=7) and bearish and bearcrosscount >=1 and barstate.isconfirmed //number of candles for a close below
buyzone = ta.barssince(bullclose)
shortzone =  ta.barssince(bearclose)
idealbuy = close >= bullentryh and bullclose and (buyzone<=7)
idealsell = close <= bearentryh and bearclose and (shortzone<=7)

// // bull setup on chart
// if sema > lema and xemabull < 50
//     var line line_bullentry = line.new(bar_index, na, bar_index + 1, na, color=color.rgb(0, 200, 0), style=line.style_solid, width=1)
//     if emabull
//         line.set_xy1(line_bullentry, x=bar_index, y=bullentryh)
//         line.set_xy2(line_bullentry, x=bar_index, y=bullentryh)
//         alert("EMA-bullish", alert.freq_once_per_bar_close)
//     line.set_x2(line_bullentry, x=bar_index)
//     var line line_bullstop = line.new(bar_index, na, bar_index + 1, na, color=color.rgb(250, 0, 0), style=line.style_solid, width=1)
//     if emabull
//         line.set_xy1(line_bullstop, x=bar_index, y=bullstop)
//         line.set_xy2(line_bullstop, x=bar_index, y=bullstop)
//     line.set_x2(line_bullstop, x=bar_index)    
//     var line line_bulltarget = line.new(bar_index, na, bar_index + 1, na, color=color.rgb(200, 100, 200), style=line.style_solid, width=1)
//     if emabull
//         line.set_xy1(line_bulltarget, x=bar_index, y=bulltarget)
//         line.set_xy2(line_bulltarget, x=bar_index, y=bulltarget)
//     line.set_x2(line_bulltarget, x=bar_index)

// //bear setup on chart
// if sema < lema and xemabear < 50
//     var line line_bearentry = line.new(bar_index, na, bar_index, na, color=color.rgb(0, 200, 0), style=line.style_solid, width=1)
//     if emabear
//         line.set_xy1(line_bearentry, x=bar_index, y=bearentryh)
//         line.set_xy2(line_bearentry, x=bar_index, y=bearentryh)
//         alert("EMA-bearish", alert.freq_once_per_bar_close)
//     line.set_x2(line_bearentry, x=bar_index)
//     var line line_bearstop = line.new(bar_index, na, bar_index, na, color=color.rgb(250, 0, 0), style=line.style_solid, width=1)
//     if emabear
//         line.set_xy1(line_bearstop, x=bar_index, y=bearstop)
//         line.set_xy2(line_bearstop, x=bar_index, y=bearstop)
//     line.set_x2(line_bearstop, x=bar_index)
//     var line line_beartarget = line.new(bar_index, na, bar_index, na, color=color.rgb(200, 100, 200), style=line.style_solid, width=1)
//     if emabear
//         line.set_xy1(line_beartarget, x=bar_index, y=beartarget)
//         line.set_xy2(line_beartarget, x=bar_index, y=beartarget)
//     line.set_x2(line_beartarget, x=bar_index)

//#endregion
//execution 
if idealbuy
    strategy.close("sell", comment=na)	
    strategy.entry("buy", strategy.long, limit=bullentryh, stop=bullstop, comment="buy")
strategy.exit("exit","buy", trail_points = low, trail_offset = 5, qty_percent=100, limit=bulltarget, stop=bullstop)

if idealsell
	strategy.close("buy",comment=na)
    strategy.entry("sell", strategy.short, limit=bearentryh, stop=bearstop, comment="sell")
strategy.exit("exit","sell", trail_points = low, trail_offset = 5, qty_percent=100, limit=beartarget, stop=bearstop)
// strategy.close_all(time == close_day) 
//#region // graphical analysis
//Plots
plotshape(emabull, location=location.belowbar, title='emabull')
plotshape(idealbuy, style=shape.circle, color=color.green, title="bull close")
plotshape(emabear, title='emabear')
plotshape(idealsell, location=location.belowbar, style=shape.circle, color=color.red, title="bear close")

// //Dashboard
// var label id = na
// label.delete(id)   // Delete last label
// i_offsetLabel = input(15, "Data Dashboard Offset") 
// offset = i_offsetLabel * (time - time[1])
// dynamicText = "= Bull Setup ="
// id := label.new(x=time + offset, y=open, xloc=xloc.bar_time, text=dynamicText, color=color.rgb(255, 255, 255), size=size.normal)
// label.set_textcolor(id, color.rgb(0, 0, 0))
// label.set_text(id=id, text=dynamicText)
// label.set_textalign(id, text.align_left)
// label.set_text(id=id, text=dynamicText)
// f_round( _val, _decimals) => 
//     _p = math.pow(10, _decimals)
//     math.round(math.abs(_val) * _p) / _p * math.sign(_val)
// dynamicText := dynamicText + "\n" + str.tostring(f_round(bulltarget,2)) + "  :Target"
// label.set_text(id=id, text=dynamicText)
// dynamicText := dynamicText + "\n" + str.tostring(f_round(bullentryh,2)) + "  :Entry"
// label.set_text(id=id, text=dynamicText)
// dynamicText := dynamicText + "\n" + str.tostring(f_round(bullstop,2)) + "  :Stop"
// label.set_text(id=id, text=dynamicText)
// dynamicText := dynamicText + "\n"
// label.set_text(id=id, text=dynamicText)
// dynamicText := dynamicText + "\n" + "= Bear Setup ="
// label.set_text(id=id, text=dynamicText)
// dynamicText := dynamicText + "\n" + str.tostring(f_round(bearstop,2)) + "  :Stop"
// label.set_text(id=id, text=dynamicText)
// dynamicText := dynamicText + "\n" + str.tostring(f_round(bearentryh,2)) + "  :Entry"
// label.set_text(id=id, text=dynamicText)
// dynamicText := dynamicText + "\n" + str.tostring(f_round(beartarget,2)) + "  :Target"
// label.set_text(id=id, text=dynamicText)
// //#endregion