Strategi ini menggunakan persilangan Garis Purata Moving Smooth Momentum (ALMA) dan dua Garis Purata Moving Exponential (EMA) dengan tetapan parameter yang berbeza untuk menjana isyarat perdagangan. Pada masa yang sama, strategi ini juga menggabungkan RSI Stochastic untuk mengelakkan pembelian dan penjualan yang berlebihan.
Strategi ini menggunakan ALMA sebagai penunjuk utama untuk menilai trend harga. ALMA mempunyai fungsi meluruskan data harga dan boleh menapis turun naik harga secara rawak. Dengan menyesuaikan tempoh, nilai offset dan parameter sigma ALMA, ia boleh dibuat lebih sensitif atau stabil. Apabila harga naik, ALMA akan menunjukkan hijau, dan apabila harga turun, ALMA akan menunjukkan merah.
Strategi ini menggunakan dua garis EMA dengan panjang yang berbeza. Apabila garis EMA pantas melintasi di atas garis EMA perlahan, isyarat beli dihasilkan. Apabila garis EMA pantas melintasi di bawah EMA perlahan, isyarat jual dihasilkan. Persalinan EMA mempunyai keupayaan penilaian trend yang baik. Tempoh EMA pantas dan perlahan boleh diselaraskan melalui parameter untuk menyesuaikan diri dengan pelbagai jenis perdagangan dan kitaran.
Peranan penunjuk RSI Stochastic adalah untuk mengelakkan mengeluarkan isyarat perdagangan di kawasan yang terlalu banyak dibeli dan terlalu banyak dijual. Ia menggabungkan kelebihan kedua-dua penunjuk RSI dan Stochastic, dan dapat menentukan kawasan puncak dan terendah dengan lebih baik. Apabila penunjuk RSI Stochastic terlalu banyak dibeli atau terlalu banyak dijual, strategi akan membatalkan pesanan panjang atau pendek yang ada.
Strategi ini menggunakan sepenuhnya persilangan EMA untuk menentukan arah trend harga, digabungkan dengan penunjuk ALMA untuk mencari peluang panjang dan pendek utama untuk melaksanakan perdagangan trend.
Tempoh parameter EMA dan ALMA menyediakan ruang yang boleh disesuaikan. Pengguna boleh mengoptimumkan parameter mengikut keperluan mereka untuk membuat strategi lebih sesuai dengan persekitaran pasaran yang berbeza.
Strategi ini mempunyai tetapan stop loss dan mengambil keuntungan yang terbina dalam. Menggunakan stop loss terapung dapat mengurangkan kebarangkalian stop loss dikejar; tetapan mengambil keuntungan dapat mengunci keuntungan dan mengelakkan mengeluarkan keuntungan.
Dalam pasaran yang kompleks, garis EMA dan ALMA boleh mengeluarkan isyarat yang salah.
Jika parameter ditetapkan dengan tidak betul, garis EMA dan ALMA tidak dapat berfungsi dengan betul, yang akan meningkatkan risiko perdagangan.
Uji dan optimumkan tetapan parameter EMA dan ALMA untuk memilih parameter yang optimum.
Masukkan penunjuk lain untuk menapis isyarat dan mengelakkan kerugian yang disebabkan oleh isyarat yang salah.
Mengoptimumkan besar stop loss untuk mencari keseimbangan antara kawalan risiko dan keuntungan.
Uji pelbagai jenis dan parameter kitaran untuk menerapkan strategi ke lebih banyak pasaran.
Secara keseluruhan, ini adalah strategi penjejakan trend yang mudah dan praktikal. Ia menggunakan persilangan EMA untuk menentukan arah trend, penunjuk ALMA untuk mencari titik tambahan, RSI Stochastic untuk mengelakkan risiko overbought dan oversold, sambil menetapkan stop loss dan mengambil keuntungan untuk mengawal risiko. Melalui penyesuaian parameter dan pengoptimuman penunjuk, strategi ini dapat mencapai hasil yang baik. Ia mudah difahami dan digunakan, dan juga mempunyai fleksibiliti tertentu.
/*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)