Криптовалютная стратегия обратной тенденции, основанная на высоких и низких точках

Автор:Чао Чжан, Дата: 2024-01-12 14:13:36
Тэги:

img

Обзор

Эта стратегия идентифицирует обратные тренды в криптоактивах на основе PIVOT swing high/low points и сигналов прорыва. Она относится к категории Breakout reversal strategy. Стратегия сначала рассчитывает последние самые высокие и самые низкие ценовые точки в качестве уровней PIVOT, а затем обнаруживает, если цена прорывается через эти ключевые уровни, сигнализируя о крупных изменениях тренда.

Как работает стратегия

  1. Вычислить ПИВОТ высокие/низкие точки

    Использует ta.pivothigh (() и ta.pivotlow (()) для поиска самых высоких и самых низких низких цен в течение пользовательского периода просмотра панели для выявления точек PIVOT.

  2. Определите сигналы прорыва

    Если цена превышает PIVOT-низкий уровень или превышает PIVOT-высокий уровень, стратегия рассматривает это как сигнал об изменения тренда.

  3. Установка условий фильтра

    Требует, чтобы цена пробивалась через уровни PIVOT на значительное расстояние, а цена закрытия пересекает цены закрытия 150 бар, чтобы избежать ударов.

  4. Входы и выходы

    Сигнал покупки при длинном положении, закрытие длинной позиции при условии выхода.

Преимущества

  1. ПИВОТные точки чувствительны к значительным сдвигам тенденций
  2. Избегает сбоев в консолидации с помощью фильтров
  3. Захватывает реверсию рано с высоким/низким прорывом

Риски

  1. Более крупные циклы могут привести к тому, что стратегия может быть нарушена.
  2. Ключевые точки и фильтры должны быть настроены для каждого актива
  3. Влияние валютных сборов на результаты, необходимость почти нулевой структуры сборов

Возможности для расширения

  1. Испытать различные периоды обратного просмотра PIVOT
  2. Добавление движущегося стоп-лосса к контрольному убытку на одну сделку
  3. Комбинировать с другими показателями для фильтра

Заключение

Стратегия является надежной в целом для захвата больших отклонений, но требует настраиваемых параметров для каждого актива и контроля рисков.


/*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)

Больше