Импульс Стратегия перекрестки гладкой скользящей средней линии и скользящей средней линии

Автор:Чао Чжан, Дата: 2023-11-27 17:35:09
Тэги:

img

Обзор

Эта стратегия использует перекрестное соединение Momentum Smooth Moving Average Line (ALMA) и двух экспоненциальных скользящих средних линий (EMA) с различными параметрами для генерации торговых сигналов.

Принцип стратегии

Импульсная линия ALMA

Стратегия использует ALMA в качестве основного индикатора для оценки ценовой тенденции. ALMA имеет функцию сглаживания ценовых данных и может отфильтровывать случайные колебания цен.

Быстрый и медленный перекресток EMA

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

Стохастический показатель RSI

Роль стохастического индикатора RSI заключается в том, чтобы избежать выпуска торговых сигналов в перекупленных и перепроданных зонах. Он сочетает в себе преимущества как RSI, так и стохастических индикаторов и может лучше определять пиковые и понижающие зоны. Когда индикатор Stochastic RSI перекуплен или перепродан, стратегия отменяет существующие длинные или короткие ордера.

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

Торговля по тенденциям

Стратегия в полной мере использует кроссовер EMA для определения направления ценовой тенденции в сочетании с индикатором ALMA для определения основных длинных и коротких возможностей для реализации трендовой торговли.

Регулируемые параметры

Периоды параметров EMA и ALMA обеспечивают регулируемое пространство. Пользователи могут оптимизировать параметры в соответствии со своими потребностями, чтобы стратегия лучше адаптировалась к различным рыночным условиям.

Механизм остановки потерь и получения прибыли

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

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

Ошибочное суждение о тенденции

На сложных рынках линии EMA и ALMA могут выдавать неверные сигналы.

Неправильные параметры

Если параметры установлены неправильно, линии EMA и ALMA не могут работать правильно, что увеличит риски торговли.

Оптимизация стратегии

  1. Испытать и оптимизировать параметры EMA и ALMA для выбора оптимальных параметров.

  2. Включите другие индикаторы для фильтрации сигналов и избегайте потерь, вызванных неправильными сигналами, такими как MACD, KDJ и т. Д.

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

  4. Испытать различные сорта и параметры цикла для применения стратегии на большем количестве рынков.

Резюме

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


/*backtest
start: 2022-11-20 00:00:00
end: 2023-11-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5

////Arranged by @ClassicScott
//Strategy Created by @CheatCode1


strategy('ALMA/EMA Strategy', shorttitle='ALMA/EMA Strategy', overlay=true )



////Source Selection & ALMA Variables

//Dominant Momentum ALMA
dsource = input.source(close, title='Source', group='Dominant ALMA')
dperiod = input.int(title='Period', defval=130, group='Dominant ALMA')
doffset = input.float(title='Offset', step=0.025, defval=0.775, group='Dominant ALMA')
dsigma = input.float(title='Sigma', step=0.5, defval=4.5, group='Dominant ALMA')

dalma = ta.alma(dsource, dperiod, doffset, dsigma)

dalma_up_color = input.color(#66bb6a, 'Going Up!', group='Dominant ALMA', inline = '1')
dalma_down_color = input.color(#ef5350, 'Going Down :(', group='Dominant ALMA', inline = '1')
dcolor = close[1] > dalma ? dalma_up_color : dalma_down_color

////ALMA Plots
plot(dalma, color=dcolor, style=plot.style_stepline, linewidth=2, title='Dominant Momentum MA')



//Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1

//Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1

cheatcode = input.bool(true, '-----------CHEATC0DE1------------', group = 'Strategy Inputs', confirm = true)

//Variable Declerations/Plot Assingments

inp1 = input.int(49, 'Slow Ema Length', 1, 100, group = 'Strategy Inputs', confirm = true)
inp2 = input.int(9, 'Fast Ema Length', 1, 200, group = 'Strategy Inputs', confirm = true)
inp3 = int(200)
sma1 = ta.sma(close, inp3)
ema1 = ta.ema(close, inp1)
ema2 = ta.ema(close, inp2)

eplot1 = plot(ema1, 'Slow Ema', color.aqua, 1,  plot.style_linebr)
eplot2 = plot(ema2, 'Fast Ema', color.yellow, 1,  plot.style_linebr)
splot1 = plot(sma1, 'Long MA', close[1] < sma1 ? color.red:color.green, 1, plot.style_line, display = display.none)

cross1 = ta.crossover(ema1, ema2)
cross2 = ta.crossunder(ema1, ema2)

plotchar(cross1, '', '↑', location.belowbar,  close[1] > dalma and dalma > sma1 ? na:color.green, size = size.normal, editable = false)
plotchar(cross2, '', '↓', location.abovebar, close[1] < dalma and dalma < sma1 ? na:color.red, size = size.normal, editable = false)
bgcolor(cross1 and close[1] > dalma ? color.new(color.green, 80):cross2 and close[1] < dalma ? color.new(color.red, 80):na)

valueL = ta.valuewhen(cross1 and close[1] > dalma, close, 0)
valueS = ta.valuewhen(cross2 and close[1] < dalma, close, 0)

//Entries

if cross1 and close[2] > dalma[2] and close[1] > dalma[1]
    strategy.entry('Long', strategy.long)
if cross2 and close[2] < dalma[2] and close[1] < dalma[1]
    strategy.entry('Short', strategy.short)
    
//StochRsi
    
smoothK = input.int(3, "K", minval=1)
smoothD = input.int(15, "D", minval=1)
lengthRSI = input.int(14, "RSI Length", minval=1)
lengthStoch = input.int(8, "Stochastic Length", minval=1)
src = input(close, title="RSI Source")
rsi1 = ta.rsi(src, lengthRSI)
k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = ta.sma(k, smoothD)

//Cancellations

if k > 75
    strategy.cancel('Long')
if k < 25
    strategy.cancel('Short')
    
//Closures

if ta.crossunder(k, d) and k > 92
    strategy.close('Long')
if ta.crossover(k,d) and k < 8
    strategy.close('Short')

//Exit Percents

takeP = input.float(3, title='Take Profit', group = 'Take Profit and Stop Loss') / 100
stopL = input.float(5.49, title = 'Stop Loss', group = 'Take Profit and Stop Loss')/100
// Pre Directionality

Stop_L = strategy.position_avg_price * (1 - stopL)

Stop_S = strategy.position_avg_price * (1 + stopL)

Take_S= strategy.position_avg_price * (1 - takeP)

Take_L = strategy.position_avg_price * (1 + takeP)
     
     
//Post Excecution
if strategy.position_size > 0
    strategy.exit("Flat", limit=Take_L, stop = Stop_L)

if strategy.position_size < 0
    strategy.exit("Flat", limit=Take_S, stop = Stop_S)


Больше