Purata Pergerakan Dwi dan Strategi Arah Aliran Super


Tarikh penciptaan: 2023-09-28 15:12:50 Akhirnya diubah suai: 2023-09-28 15:12:50
Salin: 0 Bilangan klik: 923
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

Strategi ini adalah strategi untuk menghasilkan isyarat beli dan jual berdasarkan persilangan garis rata-rata bergerak pada 21 dan 55 hari, sambil menggabungkan indikator supertrend untuk menyaring isyarat palsu.

Prinsip Strategi

Kod ini mula-mula menentukan garis rata-rata bergerak antara garis 21 ((EMA1)) dan garis 55 ((EMA2). Apabila EMA1 melintasi EMA2, ia menghasilkan isyarat beli; apabila EMA1 melintasi EMA2, ia menghasilkan isyarat jual.

Untuk menyaring isyarat palsu, kod dimasukkan ke dalam penunjuk super trend. Indikator super trend berdasarkan purata gelombang sebenar ATR, yang menggabungkan harga tinggi dan rendah terkini untuk menentukan arah trend. Kod ditetapkan sebagai tren naik di atas tren atas, dan tren turun di bawah tren bawah.

Dengan cara ini, isyarat beli dihasilkan hanya apabila EMA1 melintasi EMA2 apabila trend meningkat; isyarat jual dihasilkan hanya apabila EMA1 melintasi EMA2 apabila trend menurun. Dengan penapisan indikator super trend, isyarat palsu yang dihasilkan apabila trend berubah dapat dielakkan.

Selain itu, kod ini menambah garis 200 dan 233 untuk menilai trend jangka panjang, dan hanya menghasilkan isyarat perdagangan apabila arah trend jangka panjang sama.

Kelebihan Strategik

  1. Garis purata bergerak berganda digabungkan dengan penunjuk trend super, dapat mengenal pasti arah trend dengan berkesan, menapis isyarat palsu.

  2. Dengan menyesuaikan parameter rata-rata bergerak, anda boleh menyesuaikan sensitiviti strategi untuk menyesuaikan diri dengan keadaan pasaran yang berbeza.

  3. Menambah penghakiman rata-rata jangka panjang dapat mengelakkan risiko ketidakselarasan trend jangka pendek.

  4. Peraturan jelas dan mudah difahami, parameter mudah disesuaikan, sesuai untuk transaksi kuantitatif.

  5. Isyarat beli dan jual yang dapat dilihat, operasi yang jelas.

Risiko Strategik

  1. Strategi Garis Rata Bergerak Ganda mudah menghasilkan isyarat salah pada titik perubahan trend. Perlu berhati-hati untuk mengenal pasti perubahan yang berpotensi.

  2. Tetapan parameter moving average line yang tidak betul boleh kehilangan trend atau menghasilkan terlalu banyak isyarat yang salah. Parameter perlu disesuaikan untuk pasaran yang berbeza.

  3. Frekuensi transaksi mungkin lebih tinggi, dan perlu mengawal kos transaksi.

  4. Parameter penunjuk trend super perlu dioptimumkan, jika tidak, ia mungkin menapis isyarat yang betul atau menyimpan isyarat yang salah.

  5. Penghakiman garis rata-rata jangka panjang mungkin akan memberi isyarat ketinggalan, dan anda perlu memahami masa perubahan trend.

Pengoptimuman Strategi

  1. Uji pelbagai kombinasi garis rata-rata bergerak untuk mencari parameter terbaik.

  2. Mengoptimumkan parameter untuk penunjuk trend super, mengimbangi kesan penapisan dan kelewatan.

  3. Tambah petunjuk tambahan, seperti petunjuk jumlah transaksi, untuk mengesahkan isyarat lebih lanjut.

  4. Ia juga boleh digunakan untuk menilai titik perubahan yang berpotensi, termasuk faktor-faktor seperti sentimen, berita, dan sebagainya.

  5. Menggunakan kaedah pembelajaran mesin untuk mengoptimumkan parameter dinamik.

ringkaskan

Strategi ini mengintegrasikan kelebihan indikator pergerakan purata dan super trend, yang dapat menggali trend dan menyaring isyarat yang salah. Kesan strategi dapat terus diperbaiki melalui penyesuaian parameter dan pengesahan indikator tambahan. Walaupun terdapat risiko tertentu, ia dapat dikawal melalui kaedah pengurusan risiko.

Kod sumber strategi
/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © bhavikmota

//@version=4
strategy("EMA & Supertrend", overlay = true)

//length = input(9, minval=1)
//ema1 = ema(close, length)
//ema2 = ema(ema1, length)
//ema3 = ema(ema2, length)

//shortest = ema(close, 20)
//short = ema(close, 50)
//longer = ema(close, 100)
//longest = ema(close, 200)


//for Ema1
len1 = input(21, minval=1)
//src1 = input(close)
ema1 = ema(close,len1)
plot(ema1, color=color.red, linewidth=1)

//for Ema2
len2 = input(55, minval=1)
//src2 = input(close)
ema2 = ema(close,len2)
plot(ema2, color=color.green, linewidth=1)

//for Ema3
len3 = input(200, minval=1)
//src3 = input(close)
ema3 = ema(close,len3)
plot(ema3, color=color.blue, linewidth=1)

//for Ema4
len4 = input(233, minval=1)
//src4 = input(close)
ema4 = ema(close,len4)
plot(ema4, color=color.black, linewidth=1)


Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=true)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor)
alertcondition(buySignal, title="SuperTrend Buy", message="SuperTrend Buy!")
alertcondition(sellSignal, title="SuperTrend Sell", message="SuperTrend Sell!")
changeCond = trend != trend[1]
alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!")


//Trading logic

Enterlong = crossover(ema1,ema2) or (close>ema1 and close>ema2 and ema1>ema2) and close>ema4// positive ema crossover
Exitlong = crossunder(close,ema2) // candle closes below supertrend

Entershort = crossunder(ema1,ema2) or (close<ema1 and close<ema2 and ema2<ema1) and close<ema4// negative ema crossover
Exitshort = crossover(close,ema2) // candle closes above supertrend

//Execution Logic - Placing Order

start = timestamp(2008,1,1,0,0)

if time>= start
    strategy.entry("long", strategy.long, when=Enterlong)
    strategy.close("long",when=Exitlong)
//strategy.entry("short",strategy.short,100,when=Entershort)
//strategy.close("short",when=Exitshort)