
Эта стратегия использует двухуровневые и треххуровневые индексы, в сочетании с случайными индикаторами, чтобы сформировать более стабильную и надежную стратегию отслеживания тенденций. Основная идея заключается в том, что в случае возникновения золотой или мертвой вилки в результате оценки равномерных индикаторов, сигналы торговли посылаются; в то время как случайные индикаторы используются в качестве вспомогательного решения о перекупке и перепродаже, чтобы избежать ошибочных сигналов во время сильных колебаний на рынке.
Стратегия состоит из четырех основных частей:
Двухлинейный индикатор: рассчитывается как 50-циклическая, так и 100-циклическая скользящая средняя ((EMA), которая дает сигнал к покупке при прохождении долгосрочной ЭМА над краткосрочной ЭМА и сигнал к продаже при прохождении долгосрочной ЭМА.
Три индексовых показателя: для определения направления рыночных тенденций используются индексы, рассчитанные на 50 циклов, 100 циклов и 200 циклов. Если 50EMA> 100EMA> 200EMA - это многоголовый рынок, а если 50EMA < 100EMA < 200EMA - это пустой рынок.
Случайный индикатор: рассчитывает 6-дневные значения K и D RSI, чтобы определить, есть ли перепродажа.
Торговые сигналы: только в то время, когда двойной средний индикатор генерирует сигнал, рынок также соответствует многоголовному или пустого состоянию трехмерной средней линии, и истинное торговое указание выдается только тогда, когда случайный индикатор не показывает перекуп и перепродажу.
Эта стратегия объединяет преимущества использования среднелинейных и случайных индикаторов, учитывает направление тренда при выпуске торговых сигналов, а также ссылается на состояние перекупа и перепродажи на рынке, что позволяет лучше фильтровать шум и отслеживать более четкую тенденцию. Кроме того, она использует трехиндексальную среднюю линию для определения общей тенденции, что делает сигнал более надежным.
Самый большой риск этой стратегии заключается в том, что она зависит от оценки показателей, которые могут привести к торговым неудачам, когда они посылают ошибочные сигналы. Кроме того, при использовании более длительных среднечасовых показателей для оценки общей тенденции, возможно, будет пропущены краткосрочные возможности. Основные меры противодействия риску следующие:
Оптимизация параметров индикатора, корректировка периодического сочетания двойной и трехуровневой средних линий, чтобы они лучше соответствовали рыночным характеристикам.
В сочетании с другими индикаторами, проводить операции CANCEL, приостанавливать текущую торговлю при резкой волатильности рынка.
Применение коротколинейной многолинейной стратегии для получения прибыли от использования краткосрочных возможностей на долголинейных многолинейных рынках.
Эта стратегия может быть оптимизирована в следующих аспектах:
Корректировка циклических параметров двойной и трехуровневой средних линий, оптимизация показателей в соответствии с рыночными характеристиками.
Увеличение оценки по таким показателям, как VOLUME и MACD, чтобы избежать ошибочных сигналов, вызванных аномалиями цен.
Используйте модель свечей для лучшего определения тенденции и избегайте ошибочных сигналов после краткосрочного отступления.
Расширять на другие виды, такие как акции, валюты и т.д., чтобы проверить соответствие стратегии.
В сочетании с показателями VIX оценивается волатильность рынка в целом, контролируется размер позиции.
Эта стратегия использует бинарную среднюю линию для подачи торговых сигналов, трехзначную среднюю линию и случайный индикатор для вспомогательного суждения, чтобы создать более стабильную стратегию отслеживания тенденций. Она проста в понимании, проста в реализации, высоко соответствует рыночным характеристикам, более стабильная прибыль, это рекомендуемая количественная стратегия.
/*backtest
start: 2023-12-07 00:00:00
end: 2023-12-12 08:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title='5212 EMA Strategy', shorttitle='5212 EMA', overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=10, calc_on_every_tick=false)
//**Backtest Date sof
useStartPeriodTime = input.bool(true , 'Start Date & Time' , group='Date Range' , inline='Start Period')
startPeriodTime = input(timestamp('16 Apr 2021') , '' , group='Date Range' , inline='Start Period')
useEndPeriodTime = input.bool(false , 'End Date & Time' , group='Date Range' , inline='End Period')
endPeriodTime = input(timestamp('31 Dec 2222') , '' , group='Date Range' , inline='End Period')
enableHighlight = input.bool(false , 'Highlight' , group='Date Range' , inline='Highlight')
highlightType = input.string('Anchors' , '' , group='Date Range' , inline='Highlight' , options=['Anchors', 'Background'])
highlightColor = input.color(color.white , '' , group='Date Range' , inline='Highlight')
start = useStartPeriodTime ? startPeriodTime >= time : false
end = useEndPeriodTime ? endPeriodTime <= time : false
calcPeriod = true
// var line startAnchor = line.new(na, na, na, na, xloc.bar_time, extend.both, highlightColor, width=2)
// var line endAnchor = line.new(na, na, na, na, xloc.bar_time, extend.both, highlightColor, width=2)
// useBgcolor = false
// if enableHighlight
// if highlightType == 'Anchors'
// if useStartPeriodTime
// line.set_xy1(startAnchor, startPeriodTime, low)
// line.set_xy2(startAnchor, startPeriodTime, high)
// if useEndPeriodTime
// line.set_xy1(endAnchor, calcPeriod ? time : line.get_x1(endAnchor), low)
// line.set_xy2(endAnchor, calcPeriod ? time : line.get_x1(endAnchor), high)
// if highlightType == 'Background'
// useBgcolor := true
// useBgcolor
// bgcolor(useBgcolor and calcPeriod ? color.new(highlightColor,90) : na, editable=false)
//**Backtest Date eof
src =input(close , 'Source' , group='Support')
showEMA = input(true , 'Show EMA' , group='Support')
//**Stochastic RSI sof
smoothK = input.int(6 , "K" , group='Stochastic RSI' , minval=1)
smoothD = input.int(6 , "D" , group='Stochastic RSI' , minval=1)
lengthRSI = input.int(28 , "RSI Length" , group='Stochastic RSI' , minval=1)
lengthStoch = input.int(28 , "Stoch Length" , group='Stochastic RSI' , minval=1)
rsi1 = ta.rsi(src, lengthRSI)
k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = ta.sma(k, smoothD)
//**STochastic RSI eof
//** EMA sof
emain01 = input.int(50 , "EMAma Girang" , group='Moving Average Exponential' , minval=1)
emain02 = input.int(100 , "EMAma Muda" , group='Moving Average Exponential' , minval=1)
emain03 = input.int(200 , "EMAma Tua" , group='Moving Average Exponential' , minval=1)
ema01 = ta.ema(src, emain01)
ema02 = ta.ema(src, emain02)
ema03 = ta.ema(src, emain03)
plot(showEMA ? ema01 : na, 'EMAma Girang' , color = color.new(color.orange, 0))
plot(showEMA ? ema02 : na, 'EMAma Muda' , color = color.new(color.blue, 0))
plot(showEMA ? ema03 : na, 'EMAma Tua' , color = color.new(color.red, 0))
//** EMA eof
//**Condition sof
emaLong = ema01 > ema02 and ema02 > ema03 and low > ema03
emaShort = ema01 < ema02 and ema02 < ema03 and high < ema03
longCond = ta.crossover(k,d) and k <= 23 and emaLong
shortCond = ta.crossunder(k,d) and k >= 77 and emaShort
longClose = ta.crossunder(k,d) and k <= 77
shortClose = ta.crossover(k,d) and k >= 23
longCross = ta.crossover(ema01, ema02)
shortCross = ta.crossunder(ema01, ema02)
//**Condition eof
//**Strategy sof
if calcPeriod and longCond
strategy.entry('long', strategy.long, when=longCond, comment='EN Long')
strategy.close('long', when=shortClose, comment='EX Long')
strategy.close('long', when=shortCross, comment='MD Short')
if calcPeriod and shortCond
strategy.entry('short', strategy.short, when=shortCond, comment='EN Short')
strategy.close('short', when=longClose, comment='EX Short')
strategy.close('short', when=longCross, comment='MD Long')
if calcPeriod == false and ta.crossover(ema01, ema02) or ta.crossunder(ema01, ema02)
strategy.cancel('long')
strategy.cancel('short')
//**Strategy eof
//**Label sof
entryText = str.tostring(strategy.position_avg_price, '##.###')
longText = 'Long Entry : ' + entryText
shortText = 'Short Entry : ' + entryText
noTrade = 'Sleeping Mode'
LongTrade = strategy.position_size > 0
ShortTrade = strategy.position_size < 0
Tekslabel = LongTrade ? longText : ShortTrade ? shortText : noTrade
xPosition = timenow + math.round(ta.change(time)*1)
yPosition = ta.highest(1)
labelColor = LongTrade ? color.new(color.aqua, 0) : ShortTrade ? color.new(color.red, 0) : color.new(color.gray, 0)
textColor = LongTrade ? color.new(color.black, 0) : ShortTrade ? color.new(color.white, 0) : color.new(color.white, 0)
// lab_l = label.new(
// xPosition, yPosition, Tekslabel,
// color=labelColor,
// textcolor=textColor,
// style = label.style_label_left,
// textalign=text.align_left,
// xloc=xloc.bar_time, yloc = yloc.price)
// label.delete(lab_l[1])
//**Strategy eof