
Strategi ini menggabungkan persilangan rata-rata bergerak, indeks relatif kuat (RSI) dan penilaian volume perdagangan yang sangat besar, melakukan posisi shorting tambahan ketika harga menangkap penurunan proporsional setelah volume perdagangan yang tinggi, dan menyiapkan tiga stop order progresif untuk mengunci keuntungan dalam proporsi yang berbeda. Strategi ini juga memiliki fitur stop loss yang dapat dipilih untuk menangkap peluang harga untuk terus bergerak menguntungkan.
Sebuah persilangan emas antara rata-rata bergerak cepat dan rata-rata bergerak lambat memberikan sinyal awal untuk menentukan perubahan mulai tren. RSI digunakan untuk menilai keadaan overbought dan oversold, membantu untuk menghindari sinyal masuk di bawah skenario ini untuk memastikan stabilitas sinyal. Ketika volume perdagangan secara signifikan melebihi rata-rata, menunjukkan bahwa perhatian pasar dipengaruhi oleh perubahan harga potensial.
Prinsip pengambilan dan penundaan keluar dari sinyal kosong mirip dengan melakukan banyak, yang tidak akan dibahas di sini. Perlu dicatat bahwa strategi ini memiliki kemampuan melakukan banyak dan kosong.
Strategi ini memiliki beberapa keuntungan utama:
Perbandingan antara garis rata-rata dan RSI membentuk penilaian waktu masuk yang kuat, menghindari posisi di zona overbought dan oversold, meningkatkan probabilitas keuntungan.
Menggunakan lonjakan volume transaksi sebagai penilaian tambahan, pastikan untuk memilih interupsi yang lebih besar dari fluktuasi harga, meningkatkan kekuatan sinyal.
Strategi untuk membangun posisi dengan harga dan volume trading yang menurun dalam persentase tertentu, meningkatkan ketepatan waktu untuk masuk ke pasar, dan peluang untuk berbalik atau naik.
Dengan tiga stop order berturut-turut, investor dapat memilih beberapa stop order sesuai dengan risiko yang mereka tanggung.
Opsional fitur tracking stop loss, memungkinkan investor untuk memilih apakah akan diaktifkan atau tidak sesuai dengan fluktuasi pasar, dan juga dapat memperoleh keuntungan yang lebih besar dengan jaminan.
Hal ini juga berlaku untuk perdagangan multihead dan headless, yang menghasilkan keuntungan ketika pasar naik dan turun, meningkatkan kepraktisan strategi.
Meskipun strategi ini dirancang dengan baik, ada risiko yang harus diperhatikan ketika berdagang dengan produk keuangan apa pun:
Perseberan rata-rata yang cepat dan lambat tidak selalu akurat dalam menilai tren pasar, dan sinyal yang salah juga akan muncul jika parameter rata-rata yang digunakan tidak tepat.
Parameter RSI yang tidak tepat juga dapat menyebabkan kebocoran ke zona overbought dan oversold. Parameter RSI harus disesuaikan dengan siklus pasar.
Sebuah lonjakan volume transaksi tidak sepenuhnya sama dengan perubahan besar dalam harga, dan kriteria referensi volume transaksi dapat disesuaikan sesuai.
Harga dan volume transaksi yang terlalu besar atau terlalu kecil akan mempengaruhi waktu masuk ke pasar, faktor yang juga perlu disesuaikan dengan pasar.
Tidak ada jaminan bahwa stop loss akan terjual penuh dengan stop loss yang ditetapkan, dan perubahan pasar yang tiba-tiba dapat menyebabkan slippage.
Pelacakan Stop Loss Jika Anda menetapkan terlalu banyak, Anda juga dapat keluar dari Stop Loss terlalu cepat dan kehilangan keuntungan yang lebih besar.
Untuk menghadapi risiko di atas, diperlukan strategi yang stabil dan dapat diandalkan melalui optimasi kode, penyesuaian parameter, dan pengujian ulang yang ketat.
Strategi ini masih bisa dioptimalkan lebih jauh:
Menambahkan penilaian indikator lain untuk membantu keputusan posisi, seperti penggunaan kombinasi indikator seperti pita Brin, KD dan lain-lain dapat meningkatkan akurasi sinyal lebih lanjut.
Menggabungkan metode pembelajaran mesin seperti LSTM untuk membangun rata-rata bergerak yang dinamis, parameter rata-rata dapat disesuaikan secara otomatis sesuai dengan situasi pasar terkini, meningkatkan kemampuan untuk menilai tren.
Menambahkan fitur stop/stop loss based on market volatility, sehingga strategi dapat secara otomatis menyesuaikan stop loss berdasarkan volatilitas pasar saat ini.
Menggunakan pendekatan dinamis untuk mengoptimalkan faktor rebound secara real-time berdasarkan hubungan antara penurunan dan penurunan secara keseluruhan dan saham individu, sehingga memilih waktu terbaik untuk membangun posisi.
Menggunakan model multi-faktor, kombinasi analisis emosi, analisis aturan hubungan dan pilihan untuk menerapkan strategi yang memiliki keterkaitan harga terkuat dan perubahan volume transaksi, dapat meningkatkan efektivitas strategi secara signifikan.
Secara keseluruhan, strategi ini sangat cocok untuk digunakan oleh investor menengah dan menengah. Fungsi strategi yang dioptimalkan akan menjadi lebih baik dan lebih cerdas, dengan nilai aplikasi nyata yang lebih tinggi. Sebagai strategi perdagangan kuantitatif yang proaktif, strategi ini menawarkan pengembalian investasi yang baik, tetapi juga berusaha untuk mengurangi risiko, dan benar-benar melakukan pertarungan yang stabil.
/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-11 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Advanced Strategy with Volume and Price Retracement and Multi-Take Profit (USDT)", overlay=true)
// Parametreler
fastLength = input(12, minval=1, title="Fast Moving Average")
slowLength = input(26, minval=1, title="Slow Moving Average")
rsiPeriod = input(14, minval=1, title="RSI Period")
volLength = input(20, minval=1, title="Volume MA Length")
volMultiplier = input(2.0, title="Volume Spike Multiplier")
trailOffset = input(1, title="Trailing Offset (%)")
usdtPerTrade = input(50000, title="USDT per Trade")
retraceFactor = input(0.8, title="Retracement Factor for Entry")
takeProfit1 = input(1, title="Take Profit 1 (%)")
takeProfit2 = input(2, title="Take Profit 2 (%)")
takeProfit3 = input(3, title="Take Profit 3 (%)")
trailForTP = input(true, title="Use Trailing Stop for Take Profits")
// Hesaplamalar
fastMA = sma(close, fastLength)
slowMA = sma(close, slowLength)
rsi = rsi(close, rsiPeriod)
volMA = sma(volume, volLength)
volumeSpike = volume > volMA * volMultiplier
// Durum Değişkenleri ve Saklanan Değerler
var float spikeVolume = na
var float spikePrice = na
var int direction = 0
// Alım/Satım Sinyalleri
longCondition = crossover(fastMA, slowMA) and rsi < 70
shortCondition = crossunder(fastMA, slowMA) and rsi > 30
// Hacim Spike ve Fiyat Hareketinin Saklanması
if (longCondition and volumeSpike)
spikeVolume := volume
spikePrice := close
direction := 1
else if (shortCondition and volumeSpike)
spikeVolume := volume
spikePrice := close
direction := -1
// Retracement Kontrolü ve Giriş Emirleri
if (direction == 1 and volume < spikeVolume * retraceFactor and close < spikePrice * (1 - trailOffset / 100))
strategy.entry("Long", strategy.long, qty=usdtPerTrade / close)
spikeVolume := na
direction := 0
else if (direction == -1 and volume < spikeVolume * retraceFactor and close > spikePrice * (1 + trailOffset / 100))
strategy.entry("Short", strategy.short, qty=usdtPerTrade / close)
spikeVolume := na
direction := 0
// Take Profit Emirleri
if strategy.position_size > 0
strategy.exit("TP1", "Long", limit=strategy.position_avg_price * (1 + takeProfit1 / 100), qty_percent=33, trail_offset=trailForTP ? atr(14) / 2 : na)
strategy.exit("TP2", "Long", limit=strategy.position_avg_price * (1 + takeProfit2 / 100), qty_percent=33, trail_offset=trailForTP ? atr(14) : na)
strategy.exit("TP3", "Long", limit=strategy.position_avg_price * (1 + takeProfit3 / 100), qty_percent=34, trail_offset=trailForTP ? atr(14) * 1.5 : na)
if strategy.position_size < 0
strategy.exit("TP1", "Short", limit=strategy.position_avg_price * (1 - takeProfit1 / 100), qty_percent=33, trail_offset=trailForTP ? atr(14) / 2 : na)
strategy.exit("TP2", "Short", limit=strategy.position_avg_price * (1 - takeProfit2 / 100), qty_percent=33, trail_offset=trailForTP ? atr(14) : na)
strategy.exit("TP3", "Short", limit=strategy.position_avg_price * (1 - takeProfit3 / 100), qty_percent=34, trail_offset=trailForTP ? atr(14) * 1.5 : na)
// Pozisyon çıkışları
strategy.close("Long", when=shortCondition)
strategy.close("Short", when=longCondition)