
Двойная стратегия EMA - это стратегия отслеживания тенденций, которая определяет направление тенденции цены путем вычисления EMA в разных циклах, чтобы принять решение о создании позиции или о закрытии позиции. Эта стратегия проста и практична и применима к рынкам с сильной тенденцией.
Стратегия основана на двух показателях EMA, одно - 9-дневная EMA с коротким периодом, другое - 21-дневная EMA с более длительным периодом. Их пересечение является сигналом для создания и прекращения позиций.
Когда краткосрочная EMA пересекает долгосрочную EMA, считается, что цена вошла в восходящую тенденцию, и стратегия будет открывать дополнительные заказы, отслеживая рост цены. Когда краткосрочная EMA пересекает долгосрочную EMA, считается, что цена вошла в нисходящую тенденцию, и стратегия будет открывать свободные заказы, отслеживая падение цены.
Показатель EMA может эффективно фильтровать шум в ценовых данных, идентифицируя основные направления ценовых тенденций. Поэтому стратегия использует двухместный показатель EMA в качестве основы для создания позиций и позиций в надежде на то, что он сможет уловить более длительный цикл ценовых тенденций.
Эта стратегия имеет следующие преимущества:
Однако эта стратегия также несет в себе некоторые риски:
Эта стратегия может быть оптимизирована в следующих аспектах:
Двойная стратегия EMA в целом является очень практичной стратегией для отслеживания тенденций. Она проста в использовании, легко понятна и превосходно работает на рынке с сильной тенденцией. В то же время, стратегия имеет некоторые риски, которые можно оптимизировать для повышения стабильности стратегии с нескольких измерений.
/*backtest
start: 2023-02-21 00:00:00
end: 2024-02-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
// This can only draw so many lines. Use bar replay to go back further
strategy("Strategy Lines", shorttitle="Strategy Lines", overlay=true, max_lines_count=500)
//###########################################################################################################################################
// Replace your strategy here
//###########################################################################################################################################
shortEMA = ta.ema(close, input(9, title="Short EMA Length"))
longEMA = ta.ema(close, input(21, title="Long EMA Length"))
// Entry conditions for long and short positions
longCondition = ta.crossover(shortEMA, longEMA)
shortCondition = ta.crossunder(shortEMA, longEMA)
//###########################################################################################################################################
// Strategy Lines
//###########################################################################################################################################
var timeLow = bar_index
var line li = na
var openLPrice = 0.0000
var openSPrice = 0.0000
LongWColor = input.color(color.rgb(0,255,0,0),"Long Win Color", group="Strategy Lines")
LongLColor = input.color(color.rgb(0,0,255,0),"Long Loss Color", group="Strategy Lines")
ShortWColor = input.color(color.rgb(255,255,0,0),"Short Win Color", group="Strategy Lines")
ShortLColor = input.color(color.rgb(255,0,0,0),"Short Loss Color", group="Strategy Lines")
WinFontColor = input.color(color.rgb(0,0,0,0),"Win Font Color", group="Strategy Lines")
LossFontColor = input.color(color.rgb(255,255,255,0),"Loss Font Color", group="Strategy Lines")
LinesShowLabel = input(false,"Show Labels?",group = "Strategy Lines")
// // Start new line when we go long
// if strategy.position_size >0
// line.delete(li)
// li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=close>openLPrice?LongWColor:LongLColor)
// // Start new line when we go short
// if strategy.position_size <0
// line.delete(li)
// li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=close<openSPrice?ShortWColor:ShortLColor)
// //Delete Lines if we don't have a position open
// if strategy.position_size ==0
// li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=color.rgb(0,0,0,100))
// line.delete(li)
if LinesShowLabel
// Short Label
if strategy.position_size>=0 and strategy.position_size[1] <0
label.new(
timeLow, na,
text=str.tostring((openSPrice-close[1])/(syminfo.mintick*10)),
color=close[1]<openSPrice?ShortWColor:ShortLColor,
textcolor=close[1]<openSPrice?WinFontColor:LossFontColor,
size=size.small,
style=label.style_label_down, yloc=yloc.abovebar)
// Long Label
if strategy.position_size<=0 and strategy.position_size[1] >0
label.new(
timeLow, na,
text=str.tostring((close[1]-openLPrice)/(syminfo.mintick*10)),
color=close[1]>openLPrice?LongWColor:LongLColor,
textcolor=close[1]>openLPrice?WinFontColor:LossFontColor,
size=size.small,
style=label.style_label_down, yloc=yloc.abovebar)
// Open long position and draw line
if (longCondition)
//strategy.entry("Long", strategy.long)
// timeLow := bar_index
// li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=close>openLPrice?LongWColor:LongLColor)
openLPrice := close
// Open short position and draw line
if (shortCondition)
//strategy.entry("Short", strategy.short)
// timeLow := bar_index
// li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=close<openSPrice?ShortWColor:ShortLColor)
openSPrice := close
//###########################################################################################################################################
// Strategy Execution (Replace this as well)
//###########################################################################################################################################
if (longCondition)
strategy.entry("Long", strategy.long)
if (shortCondition)
strategy.entry("Short", strategy.short)