
Strategi ini mengungkapkan sentimen para peserta pasar dengan membandingkan pergerakan harga dan volume transaksi, yang ditampilkan dalam bentuk MACD dan mengirimkan sinyal perdagangan.
Strategi ini digunakan untuk mendeteksi sentimen pasar melalui beberapa perhitungan:
Pergeseran harga per K-line dibagi dengan volume transaksi.
Untuk perubahan harga dan volume transaksi masing-masing menggunakan rata-rata bergerak indeks yang halus, kemudian EMA dari perubahan harga dibagi dengan EMA dari volume transaksi. Dengan demikian, sebagian dari kebisingan dapat disaring dan mendapatkan kurva sentimen pasar yang lebih halus.
EMA dihitung dengan cepat dan perlahan pada pivot market sentiment pivot, dan menghasilkan kurva yang mirip dengan MACD. Di mana garis MACD menunjukkan arah dan intensitas momentum, garis sinyal adalah rata-rata bergerak, dan grafik kolom menunjukkan perbedaan antara dua kurva, yang mewakili perubahan momentum.
Ketika pilar 0 di atas menunjukkan sinyal peningkatan sentimen pasar multihead, dan di bawah menunjukkan sinyal peningkatan sentimen pasar kosong. Anda juga dapat mengamati fenomena pergeseran dari pilar.
Strategi ini memiliki keuntungan sebagai berikut:
Menggunakan informasi volume transaksi untuk menilai sentimen peserta pasar, lebih meyakinkan.
Format MACD intuitif dan mudah digunakan.
Parameter dapat disesuaikan untuk varietas dan periode yang berbeda.
Untuk mendeteksi pola yang menyimpang, kita dapat menemukan titik-titik perubahan tren potensial.
Kode yang dibuat jelas, mudah dipahami dan dioptimalkan.
Strategi ini juga memiliki risiko sebagai berikut:
Volume transaksi dapat mencerminkan sentimen pasar, tetapi tidak menjamin sinyal perdagangan yang benar.
Setting parameter MACD yang tidak tepat dapat menyebabkan sinyal yang salah atau menghasilkan sinyal palsu. Parameter harus dioptimalkan untuk varietas dan periode.
Perbedaan sinyal mungkin merupakan sinyal palsu, dan tidak dapat menentukan perubahan tren, perlu diperhatikan dengan hati-hati.
Ada risiko terselubung untuk masuk akhir. Anda dapat menunggu untuk menelusuri stop loss, atau untuk verifikasi yang wajar dengan tren dan varietas terkait.
Strategi ini dapat dioptimalkan dengan:
testing kombinasi parameter dari berbagai varietas dan siklus, mencari parameter yang optimal.
Bergabunglah dengan strategi stop loss untuk mengurangi risiko kerugian.
Perbandingan dengan tren harga varietas yang relevan untuk memverifikasi sinyal perdagangan.
Parameter optimasi dinamis menggunakan metode pembelajaran mesin.
Meningkatkan kondisi penyaringan, mengurangi sinyal palsu. Misalnya, tren skala besar, fluktuasi, dll.
Strategi ini menggunakan perubahan harga dengan rasio nilai volume transaksi untuk menilai sentimen pasar dan menghasilkan sinyal perdagangan dalam bentuk MACD. Dibandingkan dengan hanya melihat informasi harga, volume transaksi dapat lebih akurat dalam menentukan kontras kekuatan dan panas pasar.
/*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))