이 전략은 극심한 시장 침체의 통계적 특성에 기반합니다. 극심한 시장 변동성을 측정하기 위해 마감량을 통계적으로 분석하고 표준편차를 사용하여 시장 침체가 정상 범위를 초과 할 때 구매 지위를 시작합니다. 핵심 아이디어는 시장 공황으로 인한 과판 기회를 포착하고 시장 비합리성에서 발생하는 수학적 통계적 방법을 통해 투자 기회를 식별하는 것입니다.
이 전략은 가격 최대 유출과 그 통계적 특성을 계산하기 위해 롤링 시간 창을 사용합니다. 먼저 지난 50 기간 동안 가장 높은 가격을 계산하고, 그 다음 최고 가격에 비해 현재 종료 가격의 유출 비율을 계산합니다. 그 다음 유출의 평균과 표준편차를 계산하여 -1 표준편차를 트리거 문턱으로 설정합니다. 시장 유출이 평균 빼기 표준편차의 배수를 초과하면 잠재적 인 과판 조건을 나타내는 긴 포지션을 입력합니다. 포지션은 35 기간 후에 자동으로 종료됩니다. 전략은 또한 유출 곡선과 시장 과판 조건을 시각적으로 평가하기 위해 1, 2 및 3 표준편차 수준을 그래프합니다.
이 전략은 강력한 이론적 기초와 실용적 가치를 가진 통계적 방법을 통해 시장 과판 기회를 포착합니다. 전략 논리는 확장 및 최적화에 대한 기본 전략으로 적합하며 조정 가능한 매개 변수와 함께 간단하고 명확합니다. 기술 지표와 위험 관리 조치를 추가하여 전략 안정성과 수익성을 더욱 향상시킬 수 있습니다. 라이브 거래에서 적절한 위험 통제를 유지하면서 시장 조건과 거래 도구 특성을 고려하여 매개 변수를 신중하게 설정하십시오.
/*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")