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

Автор:Чао Чжан, Дата: 2023-11-13 16:44:58
Тэги:

img

Обзор

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

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

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

  1. Индикатор ROC: Этот индикатор рассчитывает процентную ставку изменения цены за определенный период, чтобы определить динамику цен. Когда ROC положительный, это означает, что цены растут. Когда ROC отрицательный, это означает, что цены падают. Стратегия использует индикатор ROC для определения направления ценовой тенденции.

  2. Индикатор силы быков и силы медведей: Этот индикатор отражает сравнение силы между быками и медведями. Сила быков > 0 указывает на то, что сила быков больше силы медведей, и цены растут. Стратегия использует этот индикатор для прогнозирования направления цен путем сравнения силы быка и медведя.

  3. Дивергенция: данный показатель определяет изменение тренда путем расчета дивергенции цены и объема.

  4. Канал Дончиана: Этот индикатор строит канал с использованием самых высоких и самых низких цен, а границы канала могут служить поддержкой и сопротивлением.

  5. Движущийся средний: этот показатель сглаживает колебания цен для определения общего направления тренда.

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

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

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

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

  2. Использование дивергенций показателей позволяет точно фиксировать точки переворота тренда.

  3. Объединение каналов и скользящих средних помогает определить общую тенденцию.

  4. Установка стоп-прибыли и стоп-потери обеспечивает своевременную прибыль и избегает увеличения вывода.

  5. Настройка параметров позволяет адаптировать стратегию к различным периодам и продуктам.

  6. Ясная логика способствует дальнейшей оптимизации.

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

Потенциальные риски этой стратегии включают:

  1. Многочисленные индикаторы могут увеличить вероятность ошибочного сигнала.

  2. Стоп-лосс-точки, установленные слишком мало, могут увеличить вероятность стоп-лосса, в то время как слишком широкие могут расширить снижение.

  3. Слепое применение в различные периоды рынка может привести к неприспособленности.

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

  5. Существуют риски чрезмерной адаптации к обратному тесту.

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

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

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

  2. Внедрить алгоритмы машинного обучения для автоматического поиска оптимальных параметров.

  3. Внедрить адаптивные механизмы остановки потери на основе рыночных условий.

  4. Включите высокочастотные факторы и фундаментальные факторы для улучшения альфы.

  5. Разработка автоматизированных рамок тестирования для оптимизации параметров и проверки производительности.

  6. Внедрение модулей управления рисками для контроля размеров позиций и сокращения выводов.

  7. Добавьте моделированную и живую торговлю и тестирование для улучшения стабильности.

Заключение

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


/*backtest
start: 2023-11-05 00:00:00
end: 2023-11-09 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mbagheri746

//@version=4
strategy("Bagheri IG Ether v2", overlay=true, margin_long=100, margin_short=100)

TP = input(3000, minval = 1 , title ="Take Profit")
SL = input(2200, minval = 1 , title ="Stop Loss")


//_________________ RoC Definition _________________


rocLength = input(title="ROC Length", type=input.integer, minval=1, defval=186)
smoothingLength = input(title="Smoothing Length", type=input.integer, minval=1, defval=50)
src = input(title="Source", type=input.source, defval=close)

ma = ema(src, smoothingLength)
mom = change(ma, rocLength)

sroc = nz(ma[rocLength]) == 0
     ? 100
     : mom == 0
         ? 0
         : 100 * mom / ma[rocLength]

//srocColor = sroc >= 0 ? #0ebb23 : color.red
//plot(sroc, title="SROC", linewidth=2, color=srocColor, transp=0)
//hline(0, title="Zero Level", linestyle=hline.style_dotted, color=#989898)


//_________________ Donchian Channel _________________

length1 = input(53, minval=1, title="Upper Channel")
length2 = input(53, minval=1, title="Lower Channel")
offset_bar = input(91,minval=0, title ="Offset Bars")

upper = highest(length1)
lower = lowest(length2)

basis = avg(upper, lower)


DC_UP_Band = upper[offset_bar]
DC_LW_Band = lower[offset_bar]

l = plot(DC_LW_Band, style=plot.style_line, linewidth=1, color=color.red)
u = plot(DC_UP_Band, style=plot.style_line, linewidth=1, color=color.aqua)

fill(l,u,color = color.new(color.aqua,transp = 90))

//_________________ Bears Power _________________


wmaBP_period = input(65,minval=1,title="BearsP WMA Period")
line_wma = ema(close, wmaBP_period)

BP = low - line_wma


//_________________ Balance of Power _________________

ES_BoP=input(15, title="BoP Exponential Smoothing")
BOP=(close - open) / (high - low)

SBOP = rma(BOP, ES_BoP)

//_________________ Alligator _________________

//_________________ CCI _________________

//_________________ Moving Average _________________

sma_period = input(74, minval = 1 , title = "SMA Period")
sma_shift = input(37, minval = 1 , title = "SMA Shift")

sma_primary = sma(close,sma_period)

SMA_sh = sma_primary[sma_shift]

plot(SMA_sh, style=plot.style_line, linewidth=2, color=color.yellow)

//_________________ Long Entry Conditions _________________//

MA_Lcnd = SMA_sh > low and SMA_sh < high

ROC_Lcnd = sroc < 0

DC_Lcnd = open < DC_LW_Band

BP_Lcnd = BP[1] < BP[0] and BP[1] < BP[2]

BOP_Lcnd = SBOP[1] < SBOP[0]

//_________________ Short Entry Conditions _________________//

MA_Scnd = SMA_sh > low and SMA_sh < high

ROC_Scnd = sroc > 0

DC_Scnd = open > DC_UP_Band

BP_Scnd = BP[1] > BP[0] and BP[1] > BP[2]

BOP_Scnd = SBOP[1] > SBOP[0]

//_________________ OPEN POSITION __________________//

if strategy.position_size  == 0
    strategy.entry(id = "BUY", long = true , when = MA_Lcnd and ROC_Lcnd and DC_Lcnd and BP_Lcnd and BOP_Lcnd)
    strategy.entry(id = "SELL", long = false , when = MA_Scnd and ROC_Scnd and DC_Scnd and BP_Scnd and BOP_Scnd)

//_________________ CLOSE POSITION __________________//

strategy.exit(id = "CLOSE BUY", from_entry = "BUY", profit = TP , loss = SL)

strategy.exit(id = "CLOSE SELL", from_entry = "SELL" , profit = TP , loss = SL)

//_________________ TP and SL Plot __________________//

currentPL= strategy.openprofit
pos_price = strategy.position_avg_price
open_pos = strategy.position_size

TP_line = (strategy.position_size  > 0) ? (pos_price + TP/100) : strategy.position_size < 0 ? (pos_price - TP/100) : 0.0
SL_line = (strategy.position_size  > 0) ? (pos_price - SL/100) : strategy.position_size < 0 ? (pos_price + SL/100) : 0.0

// hline(TP_line, title = "Take Profit", color = color.green , linestyle = hline.style_dotted, editable = false)
// hline(SL_line, title = "Stop Loss", color = color.red , linestyle = hline.style_dotted, editable = false)


Tline = plot(TP_line != 0.0 ? TP_line : na , title="Take Profit", color=color.green, trackprice = true, show_last = 1)
Sline = plot(SL_line != 0.0 ? SL_line : na, title="Stop Loss", color=color.red, trackprice = true, show_last = 1)
Pline = plot(pos_price != 0.0 ? pos_price : na, title="Stop Loss", color=color.gray, trackprice = true, show_last = 1)


fill(Tline , Pline, color = color.new(color.green,transp = 90))
fill(Sline , Pline, color = color.new(color.red,transp = 90))

//_________________ Alert __________________//

//alertcondition(condition = , title = "Position Alerts", message = "Bagheri IG Ether\n Symbol: {{ticker}}\n Type: {{strategy.order.id}}")

//_________________ Label __________________//


inMyPrice           = input(title="My Price", type=input.float, defval=0)
inLabelStyle        = input(title="Label Style", options=["Upper Right", "Lower Right"], defval="Lower Right")

posColor = color.new(color.green, 25)
negColor = color.new(color.red, 25)
dftColor = color.new(color.aqua, 25)
posPnL   = (strategy.position_size != 0) ? (close * 100 / strategy.position_avg_price - 100) : 0.0
posDir   = (strategy.position_size  > 0) ? "long" : strategy.position_size < 0 ? "short" : "flat"
posCol   = (strategy.openprofit > 0) ? posColor : (strategy.openprofit < 0) ? negColor : dftColor
myPnL    = (inMyPrice != 0) ? (close * 100 / inMyPrice - 100) : 0.0

var label lb = na
label.delete(lb)
lb := label.new(bar_index, close,
   color=posCol,
   style=inLabelStyle=="Lower Right"?label.style_label_upper_left:label.style_label_lower_left,
   text=
      "╔═══════╗" +"\n" + 
      "Pos: "  +posDir +"\n" +
      "Pos Price: "+tostring(strategy.position_avg_price) +"\n" +
      "Pos PnL: "  +tostring(posPnL, "0.00") + "%" +"\n" +
      "Profit: "  +tostring(strategy.openprofit, "0.00") + "$" +"\n" +
      "TP: "  +tostring(TP_line, "0.00") +"\n" +
      "SL: "  +tostring(SL_line, "0.00") +"\n" +
      "╚═══════╝")






Больше