Strategi ini didasarkan pada karakteristik statistik penurunan pasar yang ekstrem. Dengan menganalisis penarikan secara statistik dan menggunakan standar deviasi untuk mengukur volatilitas pasar yang ekstrem, ia memulai posisi pembelian ketika penurunan pasar melebihi kisaran normal.
Strategi ini menggunakan jendela waktu bergulir untuk menghitung penarikan harga maksimum dan karakteristik statistiknya. Pertama-tama menghitung harga tertinggi selama 50 periode terakhir, kemudian menghitung persentase penarikan harga penutupan saat ini relatif terhadap harga tertinggi. Kemudian menghitung rata-rata dan standar deviasi penarikan, menetapkan -1 standar deviasi sebagai ambang pemicu. Ketika penarikan pasar melebihi rata-rata dikurangi beberapa set standar deviasi, yang menunjukkan kondisi oversold potensial, posisi panjang dimasukkan. Posisi ditutup secara otomatis setelah 35 periode. Strategi juga memetakan kurva penarikan dan satu, dua, dan tiga tingkat standar deviasi untuk penilaian visual kondisi oversold pasar.
Strategi ini menangkap peluang oversold pasar melalui metode statistik, dengan dasar teoritis yang kuat dan nilai praktis. Logika strategi sederhana dan jelas dengan parameter yang dapat disesuaikan, cocok sebagai strategi dasar untuk ekspansi dan optimalisasi. Stabilitas dan profitabilitas strategi dapat ditingkatkan lebih lanjut dengan menambahkan indikator teknis dan langkah-langkah pengendalian risiko. Dalam perdagangan langsung, aturlah parameter dengan hati-hati dengan mempertimbangkan kondisi pasar dan karakteristik instrumen perdagangan, sambil menjaga kontrol risiko yang tepat.
/*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")