
Strategi ini didasarkan pada karakteristik statistik ketika pasar turun secara ekstrem. Dengan analisis statistik dari penarikan, mengukur tingkat ekstremitas volatilitas pasar dengan menggunakan standar deviasi, dan membeli ketika pasar turun di luar batas normal. Gagasan inti dari strategi ini adalah untuk menangkap peluang overshoot yang disebabkan oleh panik pasar dan mengidentifikasi peluang investasi yang disebabkan oleh perilaku pasar yang tidak rasional melalui metode statistik matematika.
Strategi ini menggunakan fitur statistik untuk menghitung harga paling banyak dan paling banyak ditarik dari jendela waktu bergulir. Pertama, menghitung harga tertinggi dalam 50 siklus terakhir, kemudian menghitung persentase penarikan dari harga tertinggi saat ini. Kemudian menghitung rata-rata dan standar deviasi penarikan, dan menetapkan standar deviasi 1 kali lipat sebagai trigger threshold.
Strategi ini menggunakan metode statistik untuk menangkap peluang overshoot pasar, memiliki dasar teoritis yang baik dan nilai praktis. Logika strategi sederhana dan jelas, parameter yang dapat disesuaikan, dan cocok untuk strategi dasar untuk diperluas dan dioptimalkan. Dengan menambahkan indikator teknis lainnya dan langkah-langkah pengendalian risiko, stabilitas dan profitabilitas strategi dapat ditingkatkan lebih lanjut. Dalam perdagangan langsung, disarankan untuk menggabungkan karakteristik lingkungan pasar dan jenis perdagangan, mengatur parameter dengan hati-hati, dan melakukan kontrol risiko yang baik.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-28 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Buy When There's Blood in the Streets Strategy", overlay=false, shorttitle="BloodInTheStreets")
//This strategy identifies opportunities to buy during extreme market drawdowns based on standard deviation thresholds.
//It calculates the maximum drawdown over a user-defined lookback period, identifies extreme deviations from the mean,
//and triggers long entries when specific conditions are met. The position is exited after a defined number of bars.
// User Inputs
lookbackPeriod = input.int(50, title="Lookback Period", minval=1, tooltip="Period to calculate the highest high for drawdown")
stdDevLength = input.int(50, title="Standard Deviation Length", minval=1, tooltip="Length of the period to calculate standard deviation")
stdDevThreshold = input.float(-1.0, title="Standard Deviation Threshold", tooltip="Trigger level for long entry based on deviations")
exitBars = input.int(35, title="Exit After (Bars)", minval=1, tooltip="Number of bars after which to exit the trade")
// Drawdown Calculation
peakHigh = ta.highest(high, lookbackPeriod)
drawdown = ((close - peakHigh) / peakHigh) * 100
// Standard Deviation Calculation
drawdownStdDev = ta.stdev(drawdown, stdDevLength)
meanDrawdown = ta.sma(drawdown, stdDevLength)
// Define Standard Deviation Levels
stdDev1 = meanDrawdown - drawdownStdDev
stdDev2 = meanDrawdown - 2 * drawdownStdDev
stdDev3 = meanDrawdown - 3 * drawdownStdDev
// Plot Drawdown and Levels
plot(drawdown, color=color.red, linewidth=2, title="Drawdown (%)")
plot(meanDrawdown, color=color.blue, linewidth=2, title="Mean Drawdown")
plot(stdDev1, color=color.green, linewidth=1, title="1st Std Dev")
plot(stdDev2, color=color.orange, linewidth=1, title="2nd Std Dev")
plot(stdDev3, color=color.purple, linewidth=1, title="3rd Std Dev")
// Entry Condition
var float entryBar = na
goLong = drawdown <= meanDrawdown + stdDevThreshold * drawdownStdDev
if (goLong and strategy.position_size == 0)
strategy.entry("Long", strategy.long)
entryBar := bar_index
// Exit Condition
if (strategy.position_size > 0 and not na(entryBar) and bar_index - entryBar >= exitBars)
strategy.close("Long")