Strategi Indikator Sentimen Pasar Momentum

Penulis:ChaoZhang, Tanggal: 2023-11-13 17:51:20
Tag:

img

Gambaran umum

Strategi ini mengungkapkan sentimen pasar dengan membandingkan perubahan harga dengan volume, dan menyajikannya dalam format MACD untuk menghasilkan sinyal perdagangan.

Logika Strategi

Strategi ini terutama menggunakan metode berikut untuk mengungkapkan sentimen pasar:

  1. Perubahan harga per volume dari setiap bar. Ini langsung menunjukkan kekuatan daya beli dan jual.

  2. Menerapkan rata-rata bergerak eksponensial pada perubahan harga dan volume secara terpisah, kemudian membagi EMA perubahan harga dengan EMA volume. Ini menyaring beberapa kebisingan dan menghasilkan kurva sentimen pasar yang lebih halus.

  3. Aplikasi EMA cepat dan lambat pada sentimen pasar untuk mendapatkan garis seperti MACD. Garis MACD menunjukkan arah momentum dan kekuatan, garis sinyal adalah rata-rata bergerak, dan histogram menunjukkan perbedaan mereka, mewakili perubahan momentum.

Histogram yang melintasi di atas 0 menandakan meningkatnya sentimen bullish, sementara melintasi di bawah 0 menandakan meningkatnya sentimen bearish.

Analisis Keuntungan

Strategi ini memiliki keuntungan berikut:

  1. Menggunakan informasi volume untuk menilai sentimen pasar, lebih meyakinkan.

  2. Bentuk MACD intuitif dan mudah digunakan.

  3. Parameter yang dapat disesuaikan untuk produk dan jangka waktu yang berbeda.

  4. Dapat mendeteksi perbedaan pada histogram untuk menemukan potensi pembalikan tren.

  5. Struktur kode yang jelas, mudah dipahami dan dioptimalkan.

Analisis Risiko

Strategi ini juga memiliki risiko berikut:

  1. Volume mencerminkan sentimen tetapi tidak menjamin sinyal yang benar.

  2. Pengaturan parameter MACD yang tidak benar dapat menyebabkan sinyal yang terlewatkan atau salah. Parameter perlu dioptimalkan untuk produk dan kerangka waktu tertentu.

  3. Perbedaan mungkin sinyal palsu, tidak dapat mengkonfirmasi pembalikan tren, sehingga perlu ditafsirkan dengan hati-hati.

  4. Risiko masuk terlambat dan terjebak. Dapat menunggu stop loss atau memvalidasi dengan tren dan produk terkait.

Arahan Optimasi

Strategi dapat dioptimalkan dalam aspek berikut:

  1. Uji kombinasi parameter pada produk dan kerangka waktu yang berbeda untuk menemukan parameter optimal.

  2. Tambahkan stop loss untuk mengurangi risiko kerugian.

  3. Gabungkan dengan tren harga produk terkait untuk memvalidasi sinyal.

  4. Gunakan pembelajaran mesin untuk mengoptimalkan parameter secara dinamis.

  5. Tambahkan filter untuk mengurangi sinyal palsu, misalnya tren jangka waktu yang lebih tinggi, volatilitas, dll.

Kesimpulan

Strategi ini menilai sentimen pasar dengan membandingkan perubahan harga dan volume, dan menghasilkan sinyal dalam format MACD. Mempertimbangkan volume selain hanya harga dapat lebih akurat menentukan kekuatan pembeli dan penjual. Parameter dapat dioptimalkan untuk produk dan kerangka waktu yang berbeda, dengan potensi pengoptimalan lebih lanjut. Secara keseluruhan, strategi ini memiliki ide baru, mudah digunakan, secara efektif menangkap momentum pasar, dan layak untuk pengembangan lebih lanjut.


/*backtest
start: 2023-10-13 00:00:00
end: 2023-11-12 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_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/
// © dannylimardi

//@version=4
strategy("Sentiment Oscillator", "Sentiment", overlay=false, initial_capital=100, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.08)


//Inputs
msLen = input(49, type=input.integer, title="Market Sentiment Lookback Length")
emaLen1 = input(40, type=input.integer, title="Fast EMA Length")
emaLen2 = input(204, type=input.integer, title="Slow EMA Length")
signalLen = input(20, type=input.integer, title="Signal Length")
showMs = input(false, type=input.bool, title="Show Market Sentiment?")
showHist = input(true, type=input.bool, title="Show Momentum?")
showMacd = input(false, type=input.bool, title="Show MACD Line?")
showSignal = input(false, type=input.bool, title="Show Signal Line?")
showCpv = input(false, type=input.bool, title="(Show Change/Volume for Each Bar?)")
showEma1 = input(false, type=input.bool, title="(Show Fast EMA?)")
showEma2 = input(false, type=input.bool, title="(Show Slow EMA?)")

//Calculations
priceChange = close - close[1]
changePerVolume = (priceChange/volume) * 10000000  // (The 1000000 doesn't have any significance, it's just to avoid color-change errors when the values are too emall.)
priceChangeEma = ema(priceChange, msLen)
volumeEma = ema(volume, msLen)
marketSentiment = priceChangeEma/volumeEma * 100000000
msEma1 = ema(marketSentiment, emaLen1)
msEma2 = ema(marketSentiment, emaLen2)
macd = msEma1-msEma2
signal = ema(macd, signalLen)
hist = macd-signal

//Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

//Drawings
plot(showHist ? hist : na, title="Histogram", style=plot.style_area, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below)), transp=0 )
plot(showMacd ? macd : na, title="MACD", color=col_macd, transp=0)
plot(showSignal ? signal : na, title="Signal", color=col_signal, transp=0)
plot(showCpv ? changePerVolume : na, color=changePerVolume > changePerVolume[1] ? color.teal : color.red)
plot(0, color=color.white, transp=80)
plot(showEma1 ? msEma1 : na, color=color.aqua)
plot(showEma2 ? msEma2 : na, color=color.yellow)
plot(showMs ? marketSentiment : na, color=color.lime)

//Strategy
strategy.entry("Buy", strategy.long, when=crossover(hist, 0))
strategy.close("Buy", when=crossunder(hist, 0))

Lebih banyak