
Strategi silang silang purata bergerak dinamik adalah strategi perdagangan komposit yang mengintegrasikan beberapa petunjuk teknikal dan pengesanan peringkat pasaran. Ia secara dinamik mengira turun naik pasaran, menilai turun naik pasaran berdasarkan jarak dan turun naik harga dari purata bergerak jangka panjang dalam tiga peringkat: goyah, trend, dan menyusun.
Menggunakan ATR (Average True Rate of Volatility) untuk mengira turun naik dalam pasaran dalam masa 14 hari terakhir. Kemudian, dengan 100 hari Simple Moving Average, turun naik rata-rata diperoleh.
Hitung jarak harga berbanding purata bergerak sederhana 200 hari. Jika jarak melebihi 1.5 kali turun naik purata, dan arahnya jelas, maka ia dianggap sebagai trend. Jika turun naik semasa melebihi 1.5 kali turun naik purata, maka ia dianggap sebagai turun naik.
EMA pantas mempunyai kitaran 10 hari dan SMA perlahan mempunyai kitaran 30 hari. Apabila EMA pantas melintasi SMA perlahan, ia menghasilkan isyarat beli.
Hitung parameter 12, 26, 9 MACD. Isyarat beli dihasilkan apabila lajur MACD menjadi positif.
Hitung perbezaan standard dalam 20 hari Channel 。 Jika lebar saluran kurang daripada 20 hari SMA sendiri, maka ia dianggap sebagai tempoh penyusunan 。
Tempoh goyah: Garis melintas dengan cepat atau tiang MACD berubah, dan harga penutupan berada di dalam Bollinger Bands, masuk lebih banyak.
Tempoh trend: Garis silang atau MACD bertukar menjadi lebih banyak.
Tempoh penyusunan: Garis melintas dengan pantas, dan harga penutupan lebih tinggi daripada Band Rendah.
Keadaan berikut adalah syarat untuk keluar dari kedudukan kosong: MACD dua baris K berturut-turut negatif, dan harga penutupan turun dua hari berturut-turut.
Tempoh goyah: Jika RSI saham memasuki zon overbought, ia akan muncul.
Tempoh penyusunan: Bermain apabila harga lebih rendah daripada Upper Band.
Ini adalah strategi perdagangan pintar yang digabungkan dengan penilaian keadaan pasaran dan mempunyai kelebihan berikut:
Pengendalian sistematik, pengurangan campur tangan subjektif.
Berpasangan dengan parameter strategi penyesuaian kepada keadaan pasaran, lebih bersesuaian.
Kombinasi pelbagai indikator untuk meningkatkan kepastian isyarat.
Bollinger Bands menghentikan kerugian secara automatik untuk mengurangkan risiko.
Penghakiman keadaan menyeluruh, penapisan isyarat palsu.
Dinamika Stop Loss Stop Stop, Mengesan Trend dan Menjana Keuntungan
Risiko utama ialah:
Tetapan parameter yang tidak betul boleh menyebabkan kegagalan strategi. Disyorkan untuk mengoptimumkan kombinasi parameter.
Kejadian yang tidak dijangka menyebabkan model tidak berfungsi.
Kompresi kos dagangan untuk mendapatkan keuntungan. Disarankan untuk memilih broker dengan bayaran rendah.
Kombinasi pelbagai indikator meningkatkan kerumitan strategi. Ia disyorkan untuk memilih indikator teras.
Ia boleh terus dioptimumkan dari beberapa dimensi:
Mengoptimumkan kriteria penilaian persekitaran pasaran, meningkatkan ketepatan.
Menambah modul pembelajaran mesin untuk menyesuaikan parameter.
Pengurusan teks untuk menilai risiko insiden besar
Kajian semula pelbagai pasaran untuk mencari kombinasi yang terbaik.
Menambah strategi trailing stop untuk menghentikan penghentian.
Strategi gabungan silang rata-rata bergerak dinamik adalah strategi perdagangan pintar berbilang indikator. Ia dapat menggabungkan parameter penyesuaian keadaan pasaran, untuk mencapai perdagangan sistematik berdasarkan penilaian syarat. Ia mempunyai kebolehan adaptasi dan kepastian yang kuat. Tetapi penyetempatan parameter dan modul tambahan perlu berhati-hati untuk mengelakkan menambah kerumitan strategi. Secara keseluruhan, ini adalah strategi kuantitatif yang sangat berkesan.
/*backtest
start: 2024-01-28 00:00:00
end: 2024-02-04 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Improved Custom Strategy", shorttitle="ICS", overlay=true)
// Volatility
volatility = ta.atr(14)
avg_volatility_sma = ta.sma(volatility, 100)
avg_volatility = na(avg_volatility_sma) ? 0 : avg_volatility_sma
// Market Phase detection
long_term_ma = ta.sma(close, 200)
distance_from_long_term_ma = close - long_term_ma
var bool isTrending = math.abs(distance_from_long_term_ma) > 1.5 * avg_volatility and not na(distance_from_long_term_ma)
var bool isVolatile = volatility > 1.5 * avg_volatility
// EMA/MA Crossover
fast_length = 10
slow_length = 30
fast_ma = ta.ema(close, fast_length)
slow_ma = ta.sma(close, slow_length)
crossover_signal = ta.crossover(fast_ma, slow_ma)
// MACD
[macdLine, signalLine, macdHistogram] = ta.macd(close, 12, 26, 9)
macd_signal = crossover_signal or (macdHistogram > 0)
// Bollinger Bands
source = close
basis = ta.sma(source, 20)
upper = basis + 2 * ta.stdev(source, 20)
lower = basis - 2 * ta.stdev(source, 20)
isConsolidating = (upper - lower) < ta.sma(upper - lower, 20)
// StockRSI
length = 14
K = 100 * (close - ta.lowest(close, length)) / (ta.highest(close, length) - ta.lowest(close, length))
D = ta.sma(K, 3)
overbought = 75
oversold = 25
var float potential_SL = na
var float potential_TP = na
var bool buy_condition = na
var bool sell_condition = na
// Buy and Sell Control Variables
var bool hasBought = false
var bool hasSold = true
// Previous values tracking
prev_macdHistogram = macdHistogram[1]
prev_close = close[1]
// Modify sell_condition with the new criteria
if isVolatile
buy_condition := not hasBought and crossover_signal or macd_signal and (close > lower) and (close < upper)
sell_condition := hasBought and (macdHistogram < 0 and prev_macdHistogram < 0) and (close < prev_close and prev_close < close[2])
potential_SL := close - 0.5 * volatility
potential_TP := close + volatility
if isTrending
buy_condition := not hasBought and crossover_signal or macd_signal
sell_condition := hasBought and (macdHistogram < 0 and prev_macdHistogram < 0) and (close < prev_close and prev_close < close[2])
potential_SL := close - volatility
potential_TP := close + 2 * volatility
if isConsolidating
buy_condition := not hasBought and crossover_signal and (close > lower)
sell_condition := hasBought and (close < upper) and (macdHistogram < 0 and prev_macdHistogram < 0) and (close < prev_close and prev_close < close[2])
potential_SL := close - 0.5 * volatility
potential_TP := close + volatility
// Update the hasBought and hasSold flags
if buy_condition
hasBought := true
hasSold := false
if sell_condition
hasBought := false
hasSold := true
// Strategy Entry and Exit
if buy_condition
strategy.entry("BUY", strategy.long, stop=potential_SL, limit=potential_TP)
strategy.exit("SELL_TS", from_entry="BUY", trail_price=close, trail_offset=close * 0.05)
if sell_condition
strategy.close("BUY")
// Visualization
plotshape(series=buy_condition, style=shape.labelup, location=location.belowbar, color=color.green, text="BUY", size=size.small)
plotshape(series=sell_condition, style=shape.labeldown, location=location.abovebar, color=color.red, text="SELL", size=size.small)
plot(long_term_ma, color=color.gray, title="200-Day MA", linewidth=1)
plot(potential_SL, title="SL Level", color=color.red, linewidth=1, style=plot.style_linebr)
plot(potential_TP, title="TP Level", color=color.green, linewidth=1, style=plot.style_linebr)
bgcolor(isVolatile ? color.new(color.purple, 90) : isTrending ? color.new(color.blue, 90) : isConsolidating ? color.new(color.orange, 90) : na)