이 전략은 동적 평평한 이동 평균 ((ALMA) 과 두 가지 다른 변수 설정의 지수 이동 평균 ((EMA) 의 교차를 사용하여 거래 신호를 생성합니다. 동시에, 전략은 무작위 지수 평평한 이동 평균 ((Stochastic RSI) 을 결합하여 과도한 매매를 방지합니다.
전략은 ALMA를 가격 동향을 판단하는 주요 지표로 사용합니다. ALMA는 가격 데이터를 부드럽게하고 가격의 무작위적 변동을 필터링 할 수 있습니다. ALMA의 주기, 편향 값 및 시그마 파라미터를 조정하여 더 민감하거나 안정적으로 만들 수 있습니다.
이 전략은 두 개의 EMA 선의 길이를 사용한다. 빠른 EMA 선이 천천히 EMA 선을 상향으로 통과하면 구매 신호가 발생하고, 빠른 EMA 선이 천천히 EMA를 상향으로 통과하면 판매 신호가 발생한다.
스토카스틱 RSI 지표의 역할은 오버 바이 오버 셀 영역에서 거래 신호를 발산하는 것을 피하는 것입니다. RSI와 스토카스틱 두 지표의 장점을 결합하여 절정과 하계 영역을 더 잘 판단 할 수 있습니다. 스토카스틱 RSI 지표가 오버 바이 또는 오버 셀 할 때,이 전략은 원래의 다중 또는 공백 주문을 취소합니다.
전략은 EMA의 교차를 통해 가격 추세 방향을 결정하는 장점을 최대한 활용하고 ALMA 지표와 함께 주요 오버 헤드 및 오버 헤드 기회를 파악하여 우세한 거래를 수행합니다.
EMA 주기, ALMA 변수 등은 조정 가능한 공간을 제공하며, 사용자는 자신의 필요에 따라 변수를 최적화하여 전략을 다른 시장 환경에 더 잘 적응시킬 수 있습니다.
전략에 내장된 스톱로스 설정. 부동 스톱을 사용하면 스톱로스가 쫓겨나는 가능성을 줄일 수 있다. 이윤을 얻는 설정은 이윤을 잠금화하여 이윤을 배출하지 않도록 할 수 있다.
복잡한 상황에서는 EMA와 ALMA 라인이 잘못된 신호를 보낼 수 있다. 이때는 손실을 제어하기 위해 스톱로스에 의존해야 한다.
만약 변수가 잘못 설정되면, EMA와 ALMA 라인이 제대로 작동하지 않고 거래 위험을 증가시킨다. 최적의 변수 조합을 선택하기 위해 테스트와 최적화가 필요하다.
테스트는 EMA와 ALMA의 파라미터 설정을 최적화하여 최적의 파라미터를 선택한다.
다른 지표의 필터링 신호와 결합하여 잘못된 신호가 손실을 초래하지 않도록하십시오. 예를 들어 MACD, KDJ 등.
위험과 수익의 균형을 맞추기 위해 스톱 손실을 최적화하십시오.
다양한 품종과 주기적 매개 변수를 테스트하여 더 많은 시장에 적용할 수 있도록 합니다.
이 전략은 전체적으로 간단하고 실용적인 트렌드 추적 전략이다. 그것은 EMA의 교차로로 트렌드 방향을 결정하고, ALMA 지표의 위치가 부가 지점이며, Stochastic 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)