Стратегия выхода с помощью пирамиды

Автор:Чао Чжан, Дата: 2023-11-23 14:01:57
Тэги:

img

Обзор

Эта стратегия входит в длинные или короткие позиции на основе прорывов полос Боллинджера. Она длинная, когда цена проходит ниже нижней полосы, и короткая, когда цена проходит выше верхней полосы. После входа в позиции она продолжает пирамидирование и обновляет стоп-лосс в режиме реального времени.

Логика стратегии

Стратегия использует 3 линии полос Боллинджера - средние, верхние и нижние. Средняя линия - это движущаяся средняя за n дней. Верхняя линия - это средняя линия + k * n-дневный стандартный отклонение. Нижняя линия - это средняя линия - k * n-дневный стандартный отклонение. Обычно n = 20 и k = 2.

Когда цена выходит выше верхней линии, она сигнализирует о нисходящей тенденции и идет на короткий.

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

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

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

Преимущества этой стратегии включают:

  1. Используйте полосы Боллинджера, чтобы точно определить прорывы и изменения тренда.
  2. Введите позиции на золотом кресте и мертвом кресте систематически.
  3. Заработать больше прибыли с помощью пирамиды.
  4. Обновление стоп-лосса в режиме реального времени, чтобы избежать нокаута.

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

В этой стратегии также есть некоторые риски:

  1. Болинджерские полосы чувствительны к волатильности рынка и могут вызывать сбои.
  2. Пирамида увеличивает риск и увеличивает потенциальные потери.
  3. Стоп-лосс не гарантирован и все еще имеет вероятность остановки.

Некоторые методы борьбы с рисками:

  1. Оптимизировать параметры полос Боллинджера для различных циклов.
  2. Настройка пирамиды и частоты.
  3. Добавьте среднюю линию в качестве дополнительной линии стоп-лосса.

Руководство по оптимизации

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

  1. Оптимизировать параметры полос Боллинджера для адаптации большего количества рыночных режимов.
  2. Улучшить логику пирамиды, чтобы сбалансировать риск-вознаграждение.
  3. Добавьте больше линий стоп-лосса, как средняя линия.
  4. Разработать механизм получения прибыли для активного закрепления прибыли.
  5. Объедините другие показатели для фильтрации записей.
  6. Улучшить управление рисками для контроля потери на торговле.

Заключение

В заключение, это типичный тренд, следующий за стратегией. Он придерживается импульса, когда появляется тренд, и получает соответствующую прибыль. Между тем, он также содержит внутренние риски. Необходимы дальнейшие оптимизации для адаптации более рыночных условий и решения риска випса.


/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5

strategy(title='Bollinger Band strategy with split, limit, stop', shorttitle='bb strategy', overlay=true,commission_type = strategy.commission.percent, commission_value = 0.01, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, pyramiding = 4)



//Summary: Going Long or Short when Entering after Breaking the Bollinger Bands\
//At this time, the stop-loss, profit-taking price, and pyramiding standard\
// are determined from the difference between the position average price and the band price.

//After entering the position, if the price crosses the mid-band line, the stop loss is adjusted to the mid-band line.



//each trade, entry position size = 10% of total cash
//max pyramiding is 4
//commission = 0.01%





in_period = true


bb_length = input.int(20)
bb_mult = input.int(2)

[middle, upper, lower] = ta.bb(close,bb_length, bb_mult)
plot(middle, color=color.aqua)
plot(upper, color=color.orange)
plot(lower, color=color.orange)
long_cond = ta.crossover(close,lower)
short_cond = ta.crossunder(close,upper)

var saved_ph = 0.0
if strategy.opentrades>0 and strategy.opentrades[1]==0 and strategy.position_size > 0
    saved_ph := upper[1]
var saved_pl = 0.0
if strategy.opentrades>0 and strategy.opentrades[1]==0 and strategy.position_size < 0
    saved_pl := lower[1]

avg = strategy.position_avg_price

long_diff = saved_ph-avg
short_diff = saved_pl-avg

long_stoploss = avg - 1*long_diff
short_stoploss = avg - 1*short_diff

long_avgdown = avg - 0.5*long_diff
short_avgup = avg - 0.5*short_diff

long_profit_price = avg + 0.5*long_diff
short_profit_price = avg + 0.5*short_diff

var label _label = na
if in_period
    if long_cond and strategy.opentrades==0
        strategy.entry("Long",strategy.long)
    if long_cond and strategy.opentrades >0 and (close[1]<long_avgdown or close[2]<long_avgdown)
        strategy.entry("Long",strategy.long)

    if short_cond and strategy.opentrades==0
        strategy.entry("Short", strategy.short)
    if short_cond and strategy.opentrades>0 and (close[1]>short_avgup or close[2]>short_avgup)
        strategy.entry("Short",strategy.short)

plot(avg, style=plot.style_linebr)


plot(strategy.position_size > 0? long_profit_price: na,color=color.green, style=plot.style_linebr)
plot(strategy.position_size > 0? long_avgdown: na,color=color.yellow, style=plot.style_linebr)
plot(strategy.position_size > 0? long_stoploss: na,color=color.red, style=plot.style_linebr)

plot(strategy.position_size < 0? short_profit_price: na,color=color.green, style=plot.style_linebr)
plot(strategy.position_size < 0? short_avgup: na,color=color.yellow, style=plot.style_linebr)
plot(strategy.position_size < 0? short_stoploss: na,color=color.red, style=plot.style_linebr)

if strategy.position_size > 0
    if ta.crossover(close, middle)
        strategy.exit("Long Exit", "Long", limit=long_profit_price, stop=middle)
    else
        strategy.exit("Long Exit", "Long", limit=long_profit_price, stop=long_stoploss)
if strategy.position_size < 0
    if ta.crossunder(close, middle)
        strategy.exit("Short Exit", "Short", limit=short_profit_price, stop=middle)
    else
        strategy.exit("Short Exit", "Short", limit=short_profit_price, stop=short_stoploss)

Больше