Strategi ini mendedahkan sentimen pasaran dengan membandingkan perubahan harga dengan jumlah, dan membentangkannya dalam format MACD untuk menjana isyarat perdagangan.
Strategi ini terutamanya menggunakan kaedah berikut untuk mendedahkan sentimen pasaran:
Perubahan harga bagi setiap bar volume. ini secara langsung menunjukkan kekuatan kuasa beli dan jual.
Menggunakan purata bergerak eksponensial kepada perubahan harga dan jumlah secara berasingan, kemudian membahagikan EMA perubahan harga dengan EMA jumlah. Ini menapis beberapa bunyi bising dan menghasilkan kurva sentimen pasaran yang lebih lancar.
Menggunakan EMA pantas dan perlahan pada sentimen pasaran untuk mendapatkan garis seperti MACD. Garis MACD menunjukkan arah dan kekuatan momentum, garis isyarat adalah purata bergerak, dan histogram menunjukkan perbezaan mereka, mewakili perubahan momentum.
Histogram melintasi di atas 0 menandakan peningkatan sentimen bullish, sementara melintasi di bawah 0 menandakan peningkatan sentimen bearish.
Strategi ini mempunyai kelebihan berikut:
Menggunakan maklumat jumlah untuk menilai sentimen pasaran, lebih meyakinkan.
Bentuk MACD adalah intuitif dan mudah digunakan.
Parameter yang boleh disesuaikan untuk produk dan jangka masa yang berbeza.
Dapat mengesan perbezaan pada histogram untuk mencari potensi pembalikan trend.
Struktur kod yang jelas, mudah difahami dan dioptimumkan.
Strategi ini juga mempunyai risiko berikut:
Volume mencerminkan sentimen tetapi tidak menjamin isyarat yang betul.
Tetapan parameter MACD yang tidak betul boleh menyebabkan isyarat yang terlepas atau salah. Parameter perlu dioptimumkan untuk produk dan jangka masa tertentu.
Perbezaan mungkin isyarat palsu, tidak dapat mengesahkan pembalikan trend, jadi perlu ditafsirkan dengan teliti.
Risiko masuk lewat dan terperangkap. Boleh menunggu kerugian berhenti atau mengesahkan dengan trend dan produk yang berkaitan.
Strategi ini boleh dioptimumkan dalam aspek berikut:
Uji kombinasi parameter pada produk dan jangka masa yang berbeza untuk mencari parameter optimum.
Tambah stop loss untuk mengurangkan risiko kerugian.
Gabungkan dengan trend harga produk yang berkaitan untuk mengesahkan isyarat.
Gunakan pembelajaran mesin untuk mengoptimumkan parameter secara dinamik.
Tambah penapis untuk mengurangkan isyarat palsu, contohnya trend jangka masa yang lebih tinggi, turun naik, dll.
Strategi ini menilai sentimen pasaran dengan membandingkan perubahan harga dan jumlah, dan menjana isyarat dalam format MACD. Mempertimbangkan jumlah selain harga sahaja dapat menentukan kekuatan pembeli dan penjual dengan lebih tepat. Parameter boleh dioptimumkan untuk produk dan jangka masa yang berbeza, dengan potensi pengoptimuman lanjut. Secara keseluruhan, strategi ini mempunyai idea baru, mudah digunakan, berkesan menangkap momentum pasaran, dan bernilai pembangunan 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))