Динамический прорыв линии тренда падающего клина. Количественная торговая стратегия

Pivot SL TP Trend
Дата создания: 2025-02-21 13:12:56 Последнее изменение: 2025-07-15 09:58:16
Копировать: 1 Количество просмотров: 411
2
Подписаться
319
Подписчики

Динамический прорыв линии тренда падающего клина. Количественная торговая стратегия Динамический прорыв линии тренда падающего клина. Количественная торговая стратегия

Обзор

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

Стратегический принцип

Основная логика стратегии включает в себя следующие ключевые шаги:

  1. Динамически идентифицируйте высокие и низкие точки в ценовом движении с помощью метода Pivot
  2. Запись и сохранение двух последних максимумов и минимумов и их соответствующих временных индексов
  3. На основе этих точек рассчитывается наклон линии тренда вверх и вниз
  4. Определить, образуется ли понижающая кривая: требуется два понижения высоты и два понижения низки, и наклон верхней линии тренда меньше, чем наклон нижней линии тренда
  5. Когда цена пересекает линию тренда, запускается сигнал покупки
  6. Установка стоп-лосса на основе процентной доли цены входа

Стратегические преимущества

  1. Динамическое распознавание структуры рынка: стратегия может автоматически идентифицировать ключевые точки в структуре цен без необходимости вмешательства человека
  2. Поиск обратного тренда: сосредоточение внимания на потенциальном обратном тренде, который обычно является более рискованным, чем выгодным.
  3. Точное генерирование сигнала: точное расчетное расположение трендовой линии и точки прорыва с помощью математических методов
  4. Управление рисками: включает в себя предустановленный механизм остановки и уменьшения убытков, позволяющий эффективно контролировать риск каждой сделки
  5. Систематическая операция: полная систематизация логики стратегии, избежание искусственного эмоционального вмешательства

Стратегический риск

  1. Риск ложного прорыва: рынок может столкнуться с ложными прорывами, что приведет к ошибочным сигналам
  2. Чувствительность параметров: Эффект стратегии чувствителен к настройкам параметров, и различные рыночные условия могут потребовать корректировки параметров.
  3. Зависимость от рыночных условий: стратегии могут создавать слишком много ошибочных сигналов на колеблющихся рынках
  4. Риск остановки: быстрая динамика может привести к фактическому спаду цены остановки
  5. Влияние на стоимость транзакций: частые транзакции могут привести к более высоким транзакционным затратам

Направление оптимизации стратегии

  1. Механизм подтверждения сигнала: можно добавить такие показатели, как объем перевода, мощность, в качестве подтверждения прорыва
  2. Оптимизация динамических параметров: внедрение адаптивных механизмов для корректировки параметров в зависимости от рыночных колебаний
  3. Многочасовая проверка: добавление многочасового механизма подтверждения, повышение надежности сигнала
  4. Улучшение тормозной остановки: можно использовать динамическую тормозную остановку, такую как следящая остановка
  5. Фильтрация рыночных условий: добавление фильтрации тенденций для торговли в подходящих рыночных условиях

Подвести итог

Это рационально разработанная стратегия торговли трендами, реализующая традиционные методы технического анализа в программированном виде. Преимущество стратегии заключается в том, что она позволяет автоматически идентифицировать структуру рынка и улавливать потенциальные возможности для изменения тенденции. Но также следует обратить внимание на такие вопросы, как ложные прорывы и оптимизация параметров.

Исходный код стратегии
/*backtest
start: 2025-04-11 00:00:00
end: 2025-07-10 00:00:00
period: 10m
basePeriod: 10m
exchanges: [{"eid":"Binance","currency":"BTC_USDT","balance":200000}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/

//@version=6
strategy("Falling Wedge Strategy by Nitin", overlay=true)

// Input parameters
leftBars = input.int(5, "Left Bars for Pivot", minval=1, maxval=20)
rightBars = input.int(5, "Right Bars for Pivot", minval=1, maxval=20)
takeProfitPercent = input.float(6, "Take Profit %", minval=0.1, maxval=100)/100
stopLossPercent = input.float(2, "Stop Loss %", minval=0.1, maxval=100)/100

// Global variables
var float buyPrice = na

// Detect pivot highs and lows
ph = ta.pivothigh(leftBars, rightBars)
pl = ta.pivotlow(leftBars, rightBars)

// Track last two pivot highs
var float[] highs = array.new_float()
var int[] highIndices = array.new_int()
if not na(ph)
    array.unshift(highs, ph)
    array.unshift(highIndices, bar_index[rightBars])
    if array.size(highs) > 2
        array.pop(highs)
        array.pop(highIndices)

// Track last two pivot lows
var float[] lows = array.new_float()
var int[] lowIndices = array.new_int()
if not na(pl)
    array.unshift(lows, pl)
    array.unshift(lowIndices, bar_index[rightBars])
    if array.size(lows) > 2
        array.pop(lows)
        array.pop(lowIndices)



// Calculate trendlines and detect falling wedge pattern
isFallingWedge = false
var float currentUpper = na
var float currentLower = na

if array.size(highs) >= 2 and array.size(lows) >= 2
    h1 = array.get(highs, 0)
    h2 = array.get(highs, 1)
    i1 = array.get(highIndices, 0)
    i2 = array.get(highIndices, 1)
    
    l1 = array.get(lows, 0)
    l2 = array.get(lows, 1)
    j1 = array.get(lowIndices, 0)
    j2 = array.get(lowIndices, 1)
    
    m_upper = (h1 - h2) / (i1 - i2)
    m_lower = (l1 - l2) / (j1 - j2)
    
    currentUpper := h2 + m_upper * (bar_index - i2)
    currentLower := l2 + m_lower * (bar_index - j2)
    
    // Falling wedge pattern condition
    isFallingWedge := h1 < h2 and l1 < l2 and m_upper < m_lower and m_upper < 0 and m_lower < 0

// Trading strategy execution
if isFallingWedge and ta.crossover(close, currentUpper) and strategy.position_size == 0
    strategy.entry("Buy", strategy.long)
    buyPrice := close
    strategy.exit("Take Profit/Stop Loss", "Buy", stop=buyPrice * (1 - stopLossPercent), limit=buyPrice * (1 + takeProfitPercent))

// Plotting
plot(strategy.position_size > 0 ? buyPrice * (1 - stopLossPercent) : na, "Stop Loss", color=color.red, linewidth=2)
plot(strategy.position_size > 0 ? buyPrice * (1 + takeProfitPercent) : na, "Take Profit", color=color.green, linewidth=2)