Стратегия идентификации прорыва импульса


Дата создания: 2023-11-02 14:39:22 Последнее изменение: 2023-11-02 14:39:22
Копировать: 0 Количество просмотров: 554
1
Подписаться
1617
Подписчики

Стратегия идентификации прорыва импульса

Обзор

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

Принципы

Стратегия основана на двух показателях:

  1. Быстрый RSI: для определения динамики цены, рассчитывая изменения вверх и вниз на последних 3 K-линиях. Когда быстрый RSI ниже 10, считается, что акция находится в сверхниз.

  2. Главный фильтр: рассчитывается средний размер объекта по последним 20 K-линиям, когда ценовой объект в 2,5 раза больше среднего объекта, считается эффективным прорывом.

Открыть позицию, когда быстрый RSI ниже 10 и действует физическая фильтрация. Затем установить фиксированную точку остановки 20% при превышении цены открытия позиции.*(1+ коэффициент остановки) - это коэффициент остановки.

Преимущество этой стратегии заключается в том, что она позволяет ловить возможности для прорыва в начале тренда, определяет нижние районы с помощью быстрого RSI, а также использует фиксированный стоп-модель для блокирования каждой прибыли.

Анализ преимуществ

Эта стратегия имеет следующие преимущества:

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

  2. Главный фильтрующий механизм может предотвратить ложные прорывы, вызванные толчками.

  3. Применение фиксированной процентной ставки позволяет получать постоянную прибыль и отслеживать тенденции.

  4. Стратегическая логика проста, понятна и легко понятна.

  5. Элегантная и расширяемая структура кода, позволяющая оптимизировать стратегию.

  6. В течение периода отсчета стратегия получала стабильный положительный доход и имела высокий коэффициент успешности.

Анализ рисков

В этой стратегии также есть некоторые риски, о которых следует помнить:

  1. Стратегия не имеет механизма остановки убытков, существует риск увеличения убытков в одиночку.

  2. Неправильная настройка фиксированной точки остановки может привести к преждевременной остановке или слишком глубокой остановке.

  3. В условиях нестабильности может возникнуть непрерывный небольшой убыток.

  4. Прибыль в реальном времени будет уменьшена, если не учитывать стоимость финансирования.

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

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

Эта стратегия может быть оптимизирована в следующих аспектах:

  1. Дополнительная система сдерживания убытков, которая позволяет контролировать убытки в одиночку.

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

  3. Оптимизация критериев прорыва и повышение точности вступления.

  4. Добавление модуля управления позициями, оптимизация занятия позиций.

  5. Добавление модуля оптимизации параметров разновидности, автоматическая оптимизация параметров разных разновидностей.

  6. Повышение фильтрующих условий, чтобы избежать убытков при чрезмерном колебании.

  7. Подумайте о том, чтобы включить модуль управления средней стоимостью позиции.

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

В целом, эта стратегия является очень простой и элегантной стратегией отслеживания тенденций. Она использует быстрые RSI для определения перепадов, физические фильтры для определения эффективных прорывов и фиксированных точек остановки для получения стабильной прибыли. Хотя есть некоторые возможности для оптимизации, стратегия реагирует на быстрые изменения и подходит для быстрого изменения ситуации.

Исходный код стратегии
/*backtest
start: 2022-10-26 00:00:00
end: 2023-11-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// this is based on https://www.tradingview.com/v/PbQW4mRn/
strategy(title = "ONLY LONG V4 v1", overlay = true, initial_capital = 1000, pyramiding = 1000,
   calc_on_order_fills = false, calc_on_every_tick = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 50, commission_value = 0.075)

//study(title = "ONLY LONG V4 v1", overlay = true)

//Fast RSI
src = close
fastup = rma(max(change(src), 0), 3)
fastdown = rma(-min(change(src), 0), 3)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//Body Filter
body = abs(close - open)
abody = sma(body, 20)

mac = sma(close, 20)
len = abs(close - mac)
sma = sma(len, 100)
max = max(open, close)
min = min(open, close)
up = close < open and len > sma * 2 and min < min[1] and fastrsi < 10 and body > abody * 2.5

// Strategy
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

var bool longCondition = na

longCondition := up == 1 ? 1 : na

// Get the price of the last opened long

var float last_open_longCondition = na

last_open_longCondition := longCondition ? close : nz(last_open_longCondition[1])

// Get the bar time of the last opened long

var int last_longCondition = 0

last_longCondition := longCondition ? time : nz(last_longCondition[1])

// Take profit
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

tp = input(20, "TAKE PROFIT %", type = input.float, minval = 0, step = 0.5)

long_tp = crossover(high, (1+(tp/100))*last_open_longCondition) and not longCondition

// Get the time of the last tp close

var int last_long_tp = na

last_long_tp := long_tp ? time : nz(last_long_tp[1])

Final_Long_tp = long_tp and last_longCondition > nz(last_long_tp[1])

// Count your long conditions

var int sectionLongs = 0

sectionLongs := nz(sectionLongs[1])

var int sectionTPs = 0

sectionTPs := nz(sectionTPs[1])

// Longs Counter

if longCondition
    sectionLongs := sectionLongs + 1
    sectionTPs := 0

if Final_Long_tp
    sectionLongs := 0
    sectionTPs := sectionTPs + 1
    
// Signals
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

// Long

// label.new(
//    x = longCondition[1] ? time : na, 
//    y = na, 
//    text = 'LONG'+tostring(sectionLongs), 
//    color=color.lime, 
//    textcolor=color.black,  
//    style = label.style_labelup, 
//    xloc = xloc.bar_time, 
//    yloc = yloc.belowbar,
//    size = size.tiny)
   
// Tp

// label.new(
//    x = Final_Long_tp ? time : na, 
//    y = na, 
//    text = 'PROFIT '+tostring(tp)+'%', 
//    color=color.orange, 
//    textcolor=color.black,  
//    style = label.style_labeldown, 
//    xloc = xloc.bar_time, 
//    yloc = yloc.abovebar,
//    size = size.tiny) 

ltp = iff(Final_Long_tp, (last_open_longCondition*(1+(tp/100))), na), plot(ltp, style=plot.style_cross, linewidth=3, color = color.white, editable = false)

// Backtesting
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

testStartYear = input(2019, "BACKTEST START YEAR", minval = 1, maxval = 2222) 
testStartMonth = input(01, "BACKTEST START MONTH", minval = 1, maxval = 12)
testStartDay = input(01, "BACKTEST START DAY", minval = 1, maxval = 31)
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

strategy.entry("long", strategy.long, when = longCondition and (time >= testPeriodStart))
strategy.exit("TP", "long", limit = (last_open_longCondition*(1+(tp/100))))

// Alerts
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

alertcondition(longCondition[1], title="Long Alert", message = "LONG")
alertcondition(Final_Long_tp, title="Long TP Alert", message = "LONG TP")