Momentum Melicinkan Moving Average dan Moving Average Crossover Strategy


Tarikh penciptaan: 2023-11-27 17:35:09 Akhirnya diubah suai: 2023-11-27 17:35:09
Salin: 0 Bilangan klik: 673
1
fokus pada
1617
Pengikut

Momentum Melicinkan Moving Average dan Moving Average Crossover Strategy

Gambaran keseluruhan

Strategi ini menggunakan pergerakan rata-rata bergerak bergerak ((ALMA) dengan dua parameter yang berbeza untuk menghasilkan isyarat perdagangan. Strategi ini juga menggabungkan indeks bergerak rata-rata bergerak ((Stochastic RSI) untuk mengelakkan pembelian dan penjualan yang berlebihan.

Prinsip Strategi

Aliran ALMA

Strategi menggunakan ALMA sebagai penunjuk utama untuk menentukan trend harga. ALMA mempunyai fungsi untuk meratakan data harga, yang boleh menyaring turun naik harga secara rawak. Dengan menyesuaikan kitaran ALMA, nilai perpindahan dan parameter sigma, ia boleh dibuat lebih sensitif atau stabil.

EMA melintasi laluan dengan perlahan

Strategi ini menggunakan dua garis EMA yang berbeza panjangnya. Apabila garis EMA cepat ke atas melintasi garis EMA perlahan, ia menghasilkan isyarat beli; Apabila garis EMA cepat ke bawah melintasi EMA perlahan, ia menghasilkan isyarat jual.

Stochastic RSI

Indeks RSI Stochastic berfungsi untuk mengelakkan isyarat dagangan di kawasan yang terlalu banyak dibeli dan dijual. Ia menggabungkan kelebihan RSI dan kedua-dua indikator Stochastic, yang lebih baik untuk menilai kawasan puncak dan lembah.

Analisis kelebihan strategi

Bergerak mengikut trend

Strategi memanfaatkan sepenuhnya kelebihan EMA untuk menentukan arah trend harga, bekerjasama dengan penunjuk ALMA untuk mengenal pasti peluang overhead dan overhead utama, untuk mencapai perdagangan yang lebih baik.

Parameter boleh laras, beradaptasi

Tempoh EMA, parameter ALMA dan sebagainya menyediakan ruang yang boleh disesuaikan, pengguna boleh mengoptimumkan parameter mengikut keperluan mereka sendiri, menjadikan strategi lebih sesuai dengan keadaan pasaran yang berbeza.

Mekanisme penangguhan faedah

Strategi ini mempunyai seting stop loss yang terbina dalam. Menggunakan stop loss floating dapat mengurangkan kebarangkalian stop loss yang dikejar; seting capaian keuntungan dapat mengunci keuntungan dan mengelakkan pengeluaran keuntungan.

Analisis risiko

Kesilapan dalam menilai trend

Dalam keadaan yang rumit, EMA dan ALMA boleh menghantar isyarat yang salah. Dalam kes ini, anda perlu bergantung pada stop loss untuk mengawal kerugian.

Parameter tidak betul

Jika parameter tidak ditetapkan dengan betul, EMA dan ALMA tidak dapat berfungsi dengan betul, meningkatkan risiko perdagangan. Perlu diuji dan dioptimumkan untuk memilih kombinasi parameter terbaik.

Arah pengoptimuman strategi

  1. Uji penyesuaian parameter EMA dan ALMA, pilih parameter yang paling sesuai.

  2. Gabungan dengan isyarat penapis indikator lain, mengelakkan isyarat salah yang membawa kerugian. Contohnya MACD, KDJ dan sebagainya.

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

  4. Uji varieti dan parameter kitaran yang berbeza untuk membolehkan strategi ini digunakan di lebih banyak pasaran.

ringkaskan

Strategi ini secara keseluruhannya adalah strategi pengesanan trend yang mudah dan praktikal. Ia menggunakan EMA silang untuk menentukan arah trend, ALMA untuk menentukan titik kenaikan, dan Stochastic RSI untuk mengelakkan risiko overbought dan oversold, sambil menetapkan hentian dan hentian untuk mengawal risiko. Dengan penyesuaian parameter dan pengoptimuman indikator, strategi ini dapat memperoleh kesan yang lebih baik.

Kod sumber strategi
/*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)