Эта стратегия представляет собой количественную торговую систему, основанную на двух классических моделях свечей: Hammer и Hanging Man. Она предсказывает потенциальные поворотные моменты рынка путем выявления этих обратных моделей. Система сочетает в себе несколько технических индикаторов для подтверждения действительности сигнала, включая отношение между телом свечи и тенями, направление тренда и другие элементы, достигая точного захвата точек обратного движения рынка.
Основная логика стратегии заключается в программировании двух ключевых моделей свечей: 1. Молот: появляется в нисходящих тенденциях, предполагая потенциальное восходящее изменение. Характеризуется небольшим телом, длинной нижней тенью (по крайней мере в два раза длиной тела) и минимальной или отсутствующей верхней тенью. 2. Висячий человек: появляется в восходящих тенденциях, предполагая потенциальное понижение.
Стратегия количественно определяет эти закономерности с помощью строгих параметров, включая: - Минимальная длина тела свечи множитель - Соотношение нижней тени к высоте свечи - Периоды хранения
Эта стратегия систематически реализует теорию классического технического анализа посредством количественного анализа, демонстрируя сильную практическую ценность. Благодаря оптимизации параметров и усовершенствованию механизма контроля рисков стратегия может поддерживать стабильную производительность в различных рыночных условиях. Модульная конструкция также обеспечивает прочную основу для последующей оптимизации.
/*backtest start: 2024-12-10 00:00:00 end: 2025-01-08 08:00:00 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ //@version=6 strategy("Hammer and Hanging Man Strategy", overlay=true) // Input parameters length = input.int(5, title="Minimum Candle Body Length (Multiplier)", minval=1) shadowRatio = input.float(1, title="Lower Shadow to Candle Height Ratio", minval=1.0) holdPeriods = input.int(26, title="Hold Periods (Bars)", minval=1) // Holding period in bars // Function to calculate the absolute value absValue(x) => x >= 0 ? x : -x // Function to check if it is a Hammer isHammer() => bodyLength = absValue(close - open) candleHeight = high - low lowerShadow = math.min(open, close) - low upperShadow = high - math.max(open, close) smallBody = bodyLength <= candleHeight / length longLowerShadow = lowerShadow >= bodyLength * shadowRatio shortUpperShadow = upperShadow <= bodyLength smallBody and longLowerShadow and shortUpperShadow and close > open // Function to check if it is a Hanging Man isHangingMan() => bodyLength = absValue(close - open) candleHeight = high - low lowerShadow = math.min(open, close) - low upperShadow = high - math.max(open, close) smallBody = bodyLength <= candleHeight / length longLowerShadow = lowerShadow >= bodyLength * shadowRatio shortUpperShadow = upperShadow <= bodyLength smallBody and longLowerShadow and shortUpperShadow and close < open // Detect the candles hammer = isHammer() hangingMan = isHangingMan() // Trading logic: Long on Hammer, Short on Hanging Man if hammer strategy.entry("Long", strategy.long) // Long entry on Hammer if hangingMan strategy.entry("Short", strategy.short) // Short entry on Hanging Man // Exit after X bars if strategy.position_size > 0 and bar_index - strategy.opentrades.entry_bar_index(0) >= holdPeriods strategy.close("Long") if strategy.position_size < 0 and bar_index - strategy.opentrades.entry_bar_index(0) >= holdPeriods strategy.close("Short") // Visualization of signals plotshape(hammer, title="Hammer", location=location.belowbar, color=color.green, style=shape.labelup, text="Hammer") plotshape(hangingMan, title="Hanging Man", location=location.abovebar, color=color.red, style=shape.labeldown, text="Hanging Man")