Strategi ini mengungkapkan sentimen pasar dengan membandingkan perubahan harga dengan volume, dan menyajikannya dalam format MACD untuk menghasilkan sinyal perdagangan.
Strategi ini terutama menggunakan metode berikut untuk mengungkapkan sentimen pasar:
Perubahan harga per volume dari setiap bar. Ini langsung menunjukkan kekuatan daya beli dan jual.
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.
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.
Strategi ini memiliki keuntungan berikut:
Menggunakan informasi volume untuk menilai sentimen pasar, lebih meyakinkan.
Bentuk MACD intuitif dan mudah digunakan.
Parameter yang dapat disesuaikan untuk produk dan jangka waktu yang berbeda.
Dapat mendeteksi perbedaan pada histogram untuk menemukan potensi pembalikan tren.
Struktur kode yang jelas, mudah dipahami dan dioptimalkan.
Strategi ini juga memiliki risiko berikut:
Volume mencerminkan sentimen tetapi tidak menjamin sinyal yang benar.
Pengaturan parameter MACD yang tidak benar dapat menyebabkan sinyal yang terlewatkan atau salah. Parameter perlu dioptimalkan untuk produk dan kerangka waktu tertentu.
Perbedaan mungkin sinyal palsu, tidak dapat mengkonfirmasi pembalikan tren, sehingga perlu ditafsirkan dengan hati-hati.
Risiko masuk terlambat dan terjebak. Dapat menunggu stop loss atau memvalidasi dengan tren dan produk terkait.
Strategi dapat dioptimalkan dalam aspek berikut:
Uji kombinasi parameter pada produk dan kerangka waktu yang berbeda untuk menemukan parameter optimal.
Tambahkan stop loss untuk mengurangi risiko kerugian.
Gabungkan dengan tren harga produk terkait untuk memvalidasi sinyal.
Gunakan pembelajaran mesin untuk mengoptimalkan parameter secara dinamis.
Tambahkan filter untuk mengurangi sinyal palsu, misalnya tren jangka waktu yang lebih tinggi, volatilitas, dll.
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))