모멘텀 매끄러운 이동 평균 선과 이동 평균 선 교차 전략

저자:차오장, 날짜: 2023-11-27 17:35:09
태그:

img

전반적인 설명

이 전략은 거래 신호를 생성하기 위해 모멘텀 부드러운 이동 평균 라인 (ALMA) 과 다른 매개 변수 설정을 가진 두 가지 기하급수적인 이동 평균 라인 (EMA) 의 크로스오버를 사용합니다. 동시에 전략은 과도한 구매 및 판매를 피하기 위해 스토카스틱 RSI를 통합합니다.

전략 원칙

모멘텀 ALMA 라인

이 전략은 ALMA를 가격 트렌드를 판단하는 주요 지표로 사용합니다. ALMA는 가격 데이터를 매끄럽게하는 기능을 가지고 있으며 가격의 무작위 변동을 필터링할 수 있습니다. ALMA의 기간, 오프셋 값 및 시그마 매개 변수를 조정함으로써 더 민감하거나 안정적으로 만들 수 있습니다. 가격이 상승하면 ALMA가 녹색을 표시하고 가격이 떨어지면 ALMA가 빨간색을 표시합니다.

빠르고 느린 EMA 크로스오버

이 전략은 서로 다른 길이를 가진 두 개의 EMA 라인을 사용합니다. 빠른 EMA 라인이 느린 EMA 라인의 위를 넘을 때 구매 신호가 생성됩니다. 빠른 EMA 라인이 느린 EMA 아래를 넘을 때 판매 신호가 생성됩니다. EMA 크로스오버는 좋은 트렌드 판단 능력을 가지고 있습니다. 빠른 EMA와 느린 EMA의 기간은 다른 거래 품종과 주기에 적응하기 위해 매개 변수를 통해 조정 할 수 있습니다.

스토카스틱 RSI

스토카스틱 RSI 지표의 역할은 과잉 구매 및 과잉 판매 영역에서 거래 신호를 발행하는 것을 피하는 것입니다. 그것은 RSI 및 스토카스틱 지표의 장점을 결합하고 최고 및 최저 영역을 더 잘 결정할 수 있습니다. 스토카스틱 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)


더 많은