Strategi Indikator Sentimen Pasaran Momentum

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

img

Ringkasan

Strategi ini mendedahkan sentimen pasaran dengan membandingkan perubahan harga dengan jumlah, dan membentangkannya dalam format MACD untuk menjana isyarat perdagangan.

Logika Strategi

Strategi ini terutamanya menggunakan kaedah berikut untuk mendedahkan sentimen pasaran:

  1. Perubahan harga bagi setiap bar volume. ini secara langsung menunjukkan kekuatan kuasa beli dan jual.

  2. 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.

  3. 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.

Analisis Kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Menggunakan maklumat jumlah untuk menilai sentimen pasaran, lebih meyakinkan.

  2. Bentuk MACD adalah intuitif dan mudah digunakan.

  3. Parameter yang boleh disesuaikan untuk produk dan jangka masa yang berbeza.

  4. Dapat mengesan perbezaan pada histogram untuk mencari potensi pembalikan trend.

  5. Struktur kod yang jelas, mudah difahami dan dioptimumkan.

Analisis Risiko

Strategi ini juga mempunyai risiko berikut:

  1. Volume mencerminkan sentimen tetapi tidak menjamin isyarat yang betul.

  2. Tetapan parameter MACD yang tidak betul boleh menyebabkan isyarat yang terlepas atau salah. Parameter perlu dioptimumkan untuk produk dan jangka masa tertentu.

  3. Perbezaan mungkin isyarat palsu, tidak dapat mengesahkan pembalikan trend, jadi perlu ditafsirkan dengan teliti.

  4. Risiko masuk lewat dan terperangkap. Boleh menunggu kerugian berhenti atau mengesahkan dengan trend dan produk yang berkaitan.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dalam aspek berikut:

  1. Uji kombinasi parameter pada produk dan jangka masa yang berbeza untuk mencari parameter optimum.

  2. Tambah stop loss untuk mengurangkan risiko kerugian.

  3. Gabungkan dengan trend harga produk yang berkaitan untuk mengesahkan isyarat.

  4. Gunakan pembelajaran mesin untuk mengoptimumkan parameter secara dinamik.

  5. Tambah penapis untuk mengurangkan isyarat palsu, contohnya trend jangka masa yang lebih tinggi, turun naik, dll.

Kesimpulan

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))

Lebih lanjut