
Strategi pergerakan rata-rata bergerak adalah sistem perdagangan kuantitatif yang didasarkan pada hubungan harga dengan rata-rata bergerak. Strategi ini menentukan sinyal perdagangan dengan menilai arah dan harga rata-rata bergerak. Strategi ini memiliki mekanisme stop-loss yang dinamis.
Strategi ini didasarkan pada prinsip-prinsip inti berikut:
Mekanisme penilaian tren dinamisStrategi: Menggunakan perubahan arah rata-rata bergerak (SMA, EMA, atau VWMA) untuk menentukan tren pasar. Ketika rata-rata bergerak naik di atas batas yang ditetapkan (default 0.25%), itu adalah tren naik; Ketika turun di atas batas yang sama, itu adalah tren turun.
Persyaratan masuk yang tepat:
Mekanisme multi-level:
Filter waktuStrategi ini mengintegrasikan fitur pemfilteran waktu perdagangan, dengan perdagangan hanya dilakukan antara 9:30 dan 15:15 secara default, untuk menghindari dampak fluktuasi pada waktu non-perdagangan.
Jangka waktu deteksi: Pengguna dapat menyesuaikan tanggal mulai dan akhir pengamatan kembali untuk membantu menilai kinerja strategi dalam berbagai kondisi pasar.
Analisis mendalam menunjukkan bahwa strategi ini memiliki beberapa keuntungan yang signifikan:
Adaptasi terhadap kondisi pasarStrategi ini dapat secara otomatis menyesuaikan arah perdagangan sesuai dengan tren pasar dan beradaptasi dengan lingkungan pasar yang berbeda.
Pengendalian RisikoStrategi ini dirancang dengan mekanisme pengendalian risiko bertingkat-tingkat, termasuk penyaringan tren, penarikan keluar, perpindahan rata-rata melewati keluar, dan penghentian keras, yang efektif mencegah kerugian besar.
Sensitivitas respon dapat disesuaikanDengan menyesuaikan jenis rata-rata bergerak (SMA/EMA/VWMA), basis perhitungan (harga close out/OHLC/4, dll.) dan parameter durasi, pengguna dapat mengoptimalkan sensitivitas respons strategi terhadap pergerakan pasar.
Berbagai kesempatan masukStrategi ini tidak hanya memberikan sinyal penembusan utama, tetapi juga menyertakan mekanisme penarikan kembali untuk meningkatkan peluang perdagangan dan mengoptimalkan harga masuk rata-rata.
Memvisualisasikan status transaksi: Kode yang terintegrasi dengan status perdagangan dan masuk dan keluar, menampilkan kinerja strategi secara intuitif untuk analisis dan optimasi.
Sistem peringatan lengkap: Fungsi peringatan sinyal perdagangan built-in, mendukung pemantauan dan peringatan real-time, meningkatkan efisiensi pelaksanaan strategi.
Meskipun strategi ini dirancang secara menyeluruh, ada risiko potensial sebagai berikut:
Sinyal palsu di pasar yang bergoyang: Dalam pasar yang bergolak, arah rata-rata bergerak dapat sering berubah, menyebabkan perdagangan berlebihan dan kerugian. Solusinya adalah menambahkan ambang konfirmasi arah atau mengintegrasikan sinyal penyaring indikator lain.
Parameter SensitivitasKinerja strategi sangat bergantung pada pengaturan parameter, seperti panjang rata-rata bergerak dan berbagai persentase penurunan. Varietas perdagangan yang berbeda mungkin memerlukan pengaturan parameter yang berbeda, yang memerlukan optimasi parameter yang memadai.
Kurangnya konfirmasi pengirimanStrategi saat ini didasarkan pada hubungan antara harga dan rata-rata bergerak, tanpa mempertimbangkan faktor volume transaksi yang dapat menghasilkan sinyal yang menyesatkan dalam lingkungan volume transaksi yang rendah.
Risiko celah karena pembatasan waktu perdaganganStrategi yang terbatas pada perdagangan pada waktu tertentu mungkin tidak dapat menanggapi perubahan besar dalam pasar pada malam hari atau di luar waktu perdagangan, terutama jika harga melonjak.
Reaksi Lagging di Balik TrenMeskipun ada mekanisme penilaian tren yang dinamis, reaksi terhadap pembalikan tren yang drastis yang tiba-tiba dapat tertunda, yang dapat menyebabkan penurunan yang lebih besar dalam pasar yang berbalik dengan cepat.
Berdasarkan analisis kode, strategi ini dapat dioptimalkan dengan cara berikut:
Indikator Mobilitas Terpadu: Mengintegrasikan indikator dinamika seperti RSI, MACD ke dalam sistem konfirmasi sinyal, meningkatkan akurasi penilaian tren, mengurangi sinyal palsu. Hal ini dilakukan karena terobosan harga murni kadang-kadang dapat menyebabkan kesalahan penilaian, sedangkan indikator dinamika dapat memberikan konfirmasi tambahan.
Menambahkan Komponen Tingkat Volatilitas Adaptif: Mengatur ambang batas masuk dan stop loss sesuai dengan dinamika tingkat fluktuasi pasar, meningkatkan persyaratan ambang batas di lingkungan fluktuasi tinggi, mengurangi frekuensi pemicu; menurunkan ambang batas di lingkungan fluktuasi rendah, meningkatkan sensitivitas.
Tambahkan filter volume transaksi: Memperkenalkan mekanisme konfirmasi volume transaksi, yang mengharuskan harga terobosan disertai dengan peningkatan volume transaksi, memfilter sinyal terobosan lemah dalam lingkungan volume transaksi rendah.
Pengelolaan dana yang optimal: Ubah ukuran posisi sesuai dengan kinerja perdagangan, amplitudo penarikan dan dinamika tingkat kemenangan, meningkatkan posisi saat sinyal kepastian tinggi, mengurangi posisi saat ketidakpastian tinggi.
Rangka waktu sintesisSinyal yang menggabungkan beberapa kerangka waktu, misalnya, yang meminta perdagangan dilakukan hanya ketika garis waktu dan garis waktu berlawanan, meningkatkan stabilitas sistem.
Strategi Pembangunan Batch dan Pemberhentian: Mengimplementasikan mekanisme masuk dan keluar secara batch, menghindari risiko masuk satu titik, sekaligus mendapatkan keuntungan melalui perlindungan keuntungan.
Strategi pelacakan dan pembalikan tren silang rata-rata bergerak dinamis adalah sistem perdagangan yang dirancang dengan cermat, yang menyediakan alat bagi pedagang untuk menanggapi fluktuasi pasar secara sistematis melalui penilaian tren dinamis, persyaratan masuk yang fleksibel, dan manajemen risiko multi-tingkat. Karakteristik utamanya adalah menggabungkan keuntungan dari pelacakan tren dan pembalikan masuk, mengendalikan risiko melalui titik masuk yang tepat sambil menghormati tren besar.
Strategi ini sangat cocok untuk pasar dengan volatilitas jangka menengah dan panjang. Pedagang dapat mengoptimalkan strategi dengan menyesuaikan jenis rata-rata bergerak, panjang, dan berbagai parameter penurunan. Meskipun ada risiko seperti sensitivitas parameter dan sinyal palsu pasar yang bergoyang, orientasi optimasi yang disarankan, seperti pengintegrasian indikator momentum, penyesuaian volatilitas, dan konfirmasi multi-frame waktu, dapat meningkatkan lebih lanjut kehandalan dan kemampuan adaptasi strategi.
Secara keseluruhan, strategi ini memberikan trader kerangka kerja perdagangan kuantitatif yang terstruktur, dengan potensi untuk mendapatkan pengembalian yang disesuaikan dengan risiko yang lebih baik daripada membeli dan memegang secara tradisional, dengan konfigurasi parameter yang tepat dan manajemen risiko yang tepat.
/*backtest
start: 2024-04-29 00:00:00
end: 2024-07-27 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
// @ipuneetg
strategy("PG MA Crossover Buy and Sell Options Special", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// === INPUTS ===
maType = input.string("SMA", title="Select MA Type", options=["SMA", "EMA", "VWMA"])
calcBasis = input.string("close", title="Calculation Basis", options=["close", "OHLC/4", "HLC/3", "HLCC/4"])
maLength = input.int(21, title="Moving Average Length")
reversalThresholdPercent = input.float(0.25, title="Reversal Threshold (%)", step=0.01)
percentBelowTop = input.float(1.0, title="Exit % Below Top (%)", step=0.1, minval=0.1)
shortProfitPercent = input.float(0.5, title="Short Profit Protection (%)", minval=0.1, step=0.1)
stopLossPercent = input.float(1.5, title="Stop Loss % Above Entry (for Shorts)", step=0.1, minval=0.1)
allowShorts = input.bool(true, title="Allow Short Trades?")
// === SESSION SETTINGS ===
startHour = input.int(9, title="Trade Start Hour")
startMinute = input.int(30, title="Start Minute")
endHour = input.int(15, title="Trade End Hour")
endMinute = input.int(15, title="End Minute")
tradeSession = str.tostring(startHour, "00") + str.tostring(startMinute, "00") + "-" + str.tostring(endHour, "00") + str.tostring(endMinute, "00")
sessionActive = not na(time(timeframe.period, tradeSession))
// === PRICE BASIS ===
basis = switch calcBasis
"OHLC/4" => (open + high + low + close) / 4
"HLC/3" => (high + low + close) / 3
"HLCC/4" => (high + low + close + close) / 4
=> close
// === MOVING AVERAGE ===
ma = switch maType
"SMA" => ta.sma(basis, maLength)
"EMA" => ta.ema(basis, maLength)
"VWMA" => ta.vwma(basis, maLength)
// === DYNAMIC REVERSAL DETECTION ===
var float lastReversal = na
var bool isRising = true
thresholdValue = ma * reversalThresholdPercent / 100
if na(lastReversal)
lastReversal := ma
if ma > lastReversal + thresholdValue
isRising := true
lastReversal := ma
else if ma < lastReversal - thresholdValue
isRising := false
lastReversal := ma
maColor = isRising ? color.green : color.red
// === TRADE VARIABLES ===
var float tradeHigh = na
var float tradeLow = na
var float shortEntryPrice = na
var bool inLong = false
var bool inShort = false
// === LONG & SHORT CONDITIONS ===
longEntry = sessionActive and isRising and close >= ma * (1 + reversalThresholdPercent / 100)
longReEntry = sessionActive and isRising and not inLong and close <= ma * 1.01
shortEntry = sessionActive and not isRising and close <= ma * (1 - reversalThresholdPercent / 100)
shortReEntry = sessionActive and not inShort and close >= ma * 0.998
// === EXIT CONDITIONS ===
exitLongBelowTop = close < tradeHigh * (1 - percentBelowTop / 100)
exitLongBelowMA = close < ma
exitShortAboveTop = close > tradeHigh * (1 + percentBelowTop / 100)
exitShortAboveMA = close > ma
// === EXECUTE TRADES ===
// === LONG SIDE ===
if not inLong and (longEntry or longReEntry)
strategy.entry("Long", strategy.long)
tradeHigh := close
inLong := true
if inLong
tradeHigh := math.max(tradeHigh, high)
if exitLongBelowTop or exitLongBelowMA
strategy.close("Long")
reason = exitLongBelowTop ? "Exit Long (Below Top)" : "Exit Long (Below MA)"
inLong := false
// === SHORT SIDE ===
if allowShorts
if not inShort and (shortEntry or shortReEntry)
if close >= ma * 0.996 and close <= ma * 1.002
strategy.entry("Short", strategy.short)
tradeHigh := close
tradeLow := close
shortEntryPrice := close
inShort := true
if inShort
// Update tradeLow dynamically
tradeLow := na(tradeLow) ? close : math.min(tradeLow, close)
// Calculate Stop Levels
hardStopLossPrice = shortEntryPrice * (1 + stopLossPercent / 100)
hardStopLossTriggered = high >= hardStopLossPrice
normalExitPrice1 = tradeLow * (1 + shortProfitPercent / 100)
normalExitTriggered = close > normalExitPrice1 or close > ma
// Exit Conditions
if hardStopLossTriggered
strategy.close("Short", comment="Hard Stop Loss")
inShort := false
tradeLow := na
else
if normalExitTriggered
reason = close > normalExitPrice1 ? "Exit Short (Above Profit %)" : "Exit Short (Above MA)"
strategy.close("Short", comment=reason)
inShort := false
tradeLow := na
// === PLOT MA ===
plot(ma, color=maColor, title="Dynamic Moving Average", linewidth=2)
// === TRADE STATUS BOX ===
var label tradeStatusLabel = na
var color statusColor = color.blue
var string statusText = "No Open Trade"
if inLong
statusColor := color.green
statusText := "Long Trade Open"
else if inShort
statusColor := color.red
statusText := "Short Trade Open"
if not na(tradeStatusLabel)
label.delete(tradeStatusLabel)