
この戦略は,市場が極端に下落した時の統計的特性をベースに取引する. 撤回に対する統計的分析により,標準差を利用して市場の変動の極端度を測定し,市場が通常の範囲を超えた下落が発生したときに購入する. 戦略の核心思想は,市場のパニック感情によって引き起こされる超下落の機会を捕捉し,数学的統計的方法によって市場の非合理的な行動から生じる投資機会を識別することである.
策略は,価格の最大反転と反転の統計特性を,ローリング時間ウィンドウで計算する.まずは,過去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")