Momentum Gelas Garis Purata Bergerak dan Garis Purata Bergerak Strategi Crossover

Penulis:ChaoZhang, Tarikh: 2023-11-27 17:35:09
Tag:

img

Ringkasan

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.

Prinsip Strategi

Impulse ALMA Garis

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.

Perpindahan EMA Cepat dan Lambat

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.

RSI Stokastis

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.

Analisis Kelebihan

Perdagangan mengikut trend

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.

Parameter yang boleh diselaraskan

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.

Mekanisme Stop Loss dan Take Profit

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.

Analisis Risiko

Penghakiman trend yang salah

Dalam pasaran yang kompleks, garis EMA dan ALMA boleh mengeluarkan isyarat yang salah.

Tetapan parameter yang tidak betul

Jika parameter ditetapkan dengan tidak betul, garis EMA dan ALMA tidak dapat berfungsi dengan betul, yang akan meningkatkan risiko perdagangan.

Pengoptimuman Strategi

  1. Uji dan optimumkan tetapan parameter EMA dan ALMA untuk memilih parameter yang optimum.

  2. Masukkan penunjuk lain untuk menapis isyarat dan mengelakkan kerugian yang disebabkan oleh isyarat yang salah.

  3. Mengoptimumkan besar stop loss untuk mencari keseimbangan antara kawalan risiko dan keuntungan.

  4. Uji pelbagai jenis dan parameter kitaran untuk menerapkan strategi ke lebih banyak pasaran.

Ringkasan

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)


Lebih lanjut