Эта стратегия идентифицирует обратные тренды в криптоактивах на основе PIVOT swing high/low points и сигналов прорыва. Она относится к категории Breakout reversal strategy. Стратегия сначала рассчитывает последние самые высокие и самые низкие ценовые точки в качестве уровней PIVOT, а затем обнаруживает, если цена прорывается через эти ключевые уровни, сигнализируя о крупных изменениях тренда.
Вычислить ПИВОТ высокие/низкие точки
Использует ta.pivothigh (() и ta.pivotlow (()) для поиска самых высоких и самых низких низких цен в течение пользовательского периода просмотра панели для выявления точек PIVOT.
Определите сигналы прорыва
Если цена превышает PIVOT-низкий уровень или превышает PIVOT-высокий уровень, стратегия рассматривает это как сигнал об изменения тренда.
Установка условий фильтра
Требует, чтобы цена пробивалась через уровни PIVOT на значительное расстояние, а цена закрытия пересекает цены закрытия 150 бар, чтобы избежать ударов.
Входы и выходы
Сигнал покупки при длинном положении, закрытие длинной позиции при условии выхода.
Стратегия является надежной в целом для захвата больших отклонений, но требует настраиваемых параметров для каждого актива и контроля рисков.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © nkrastins95 //@version=5 strategy("Swing Hi Lo", overlay=true, margin_long=100, margin_short=100) //-----------------------------------------------------------------------------------------------------------------------// tf = input.timeframe(title="Timeframe", defval="") gr="LENGTH LEFT / RIGHT" leftLenH = input.int(title="Pivot High", defval=10, minval=1, inline="Pivot High",group=gr) rightLenH = input.int(title="/", defval=10, minval=1, inline="Pivot High",group=gr) colorH = input(title="", defval=color.red, inline="Pivot High",group=gr) leftLenL = input.int(title="Pivot Low", defval=10, minval=1, inline="Pivot Low", group=gr) rightLenL = input.int(title="/", defval=10, minval=1, inline="Pivot Low",group=gr) colorL = input(title="", defval=color.blue, inline="Pivot Low",group=gr) //-----------------------------------------------------------------------------------------------------------------------// pivotHigh(ll, rl) => maxLen = 1000 float ph = ta.pivothigh(ll, rl) int offset = 0 while offset < maxLen if not na(ph[offset]) break offset := offset + 1 ph[offset] pivotLow(ll, rl) => maxLen = 1000 float pl = ta.pivotlow(ll, rl) int offset = 0 while offset < maxLen if not na(pl[offset]) break offset := offset + 1 pl[offset] //-----------------------------------------------------------------------------------------------------------------------// ph = request.security(syminfo.tickerid, tf, pivotHigh(leftLenH, rightLenH), barmerge.gaps_off, barmerge.lookahead_on) pl = request.security(syminfo.tickerid, tf, pivotLow(leftLenL, rightLenL), barmerge.gaps_off, barmerge.lookahead_on) drawLabel(_offset, _pivot, _style, _color) => if not na(_pivot) label.new(bar_index[_offset], _pivot, str.tostring(_pivot, format.mintick), style=_style, color=_color, textcolor=#131722) //-----------------------------------------------------------------------------------------------------------------------// VWAP = ta.vwap(ohlc4) longcondition = ta.crossunder(close,pl) and close > close[150] exitcondition = close > ph shortcondition = ta.crossover(close,ph) and close < close[150] covercondition = close < pl strategy.entry("long", strategy.long, when = longcondition) strategy.close("long", when = exitcondition) strategy.entry("Short", strategy.short, when = shortcondition) strategy.close("Short", when = covercondition)