Стратегия следования за трендом канала баланса импульса


Дата создания: 2023-12-12 18:07:31 Последнее изменение: 2023-12-12 18:07:31
Копировать: 0 Количество просмотров: 621
1
Подписаться
1621
Подписчики

Стратегия следования за трендом канала баланса импульса

Обзор

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

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

В этой стратегии используются два основных показателя:

  1. Динамический индикатор ((DMI): для определения свободного тренда рынка, индикатор больше, чем при установке порога, чтобы создать торговый сигнал.

  2. Равновесный канал (Keltner Channel): определяет зону тренда, когда цена прорывается вверх, это сигнал для покупки, а когда цена падает вниз, это сигнал для устранения позиции.

Конкретная логика торговли заключается в следующем: когда динамический показатель +DI больше, чем установленный порог ((по умолчанию 32), рассматривается как формирование многоглавого тренда, в этот момент цена прорывает равновесный канал на орбите, создавая сигнал покупки; затем используйте среднюю орбиту равновесного канала в качестве линии остановки, отслеживая остановку, чтобы обеспечить защиту прибыли.

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

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

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

  2. Использование сбалансированных каналов для определения конкретных торговых зон позволяет эффективно блокировать прибыльные зоны.

  3. Индексные параметры и правила торговли строго обоснованы, данные обратной связи хорошо работают, эффективность проверяется на реальном диске.

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

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

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

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

  2. Показатель DMI отстает, не может определить подтверждение тренда, может быть, раннее вмешательство в тренд принесет убытки.

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

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

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

  1. Можно тестировать различные методы остановки, такие как остановка ATR, мобильная остановка и т. д. вместо фиксированной процентной остановки.

  2. Можно добавить дополнительные подтверждающие показатели, такие как увеличение объема сделок, чтобы обеспечить прием после подтверждения тенденции.

  3. Можно тестировать оптимизацию различных комбинаций параметров, чтобы найти оптимальную комбинацию параметров.

  4. Можно проверить стабильность параметров с помощью пошаговой оптимизации и плавающей обратной проверки.

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

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

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

//Original Idea by: @Wunderbit


//@version=4
strategy("Keltner Channel [LINKUSDT] 1H", overlay=true, initial_capital=3000,pyramiding = 0, currency="USD", default_qty_type=strategy.percent_of_equity, default_qty_value=100,  commission_type=strategy.commission.percent,commission_value=0.1)


/// TREND
trend_cond = input(true, title="Enable Ribbon Filter")
ribbon_period = input(30, "Ribbon Period", step=1)

leadLine1 = ema(close, ribbon_period)
leadLine2 = sma(close, ribbon_period)

// p3 = plot(leadLine1, color= #53b987, title="EMA", transp = 50, linewidth = 1)
// p4 = plot(leadLine2, color= #eb4d5c, title="SMA", transp = 50, linewidth = 1)
// fill(p3, p4, transp = 60, color = leadLine1 > leadLine2 ? #53b987 : #eb4d5c)

//Upward Trend
UT=leadLine2 < leadLine1
DT=leadLine2 > leadLine1

///////////////////////////////////////INDICATORS

// KELTNER //
source       = close
useTrueRange = input(true)
length       = input(80, "KELTNER Period", step=1, minval=1)
mult         = input(3.0,"KELTNER Multiple", step=0.1)

// Calculate Keltner Channel
ma      = ema(source, length)
range   = useTrueRange ? tr : high - low
rangema = ema(range, length)
upper = ma + rangema * mult
lower = ma - rangema * mult

plot(ma, title="Middle", color=color.orange)
p1=plot(upper, title="Upper", color=color.orange)
p2=plot(lower, title="Lower", color=color.orange)
fill(p1,p2)


// DMI INDICATOR //

lensig = input(14, title="ADX Smoothing", minval=1, maxval=50)
len = input(14, minval=1, title="DI Length")
up = change(high)
down = -change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
trur = rma(tr, len)
plus = fixnan(100 * rma(plusDM, len) / trur)
minus = fixnan(100 * rma(minusDM, len) / trur)
sum = plus + minus
adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), lensig)

trig_level=input(title="+DI Trigger Level", defval=32, minval=1,step=1)
//trig_level_adx=input(title="ADX Trigger Level", defval=30, minval=1,step=1)

//plot(adx, color=#FF006E, title="ADX")
//plot(plus, color=#0094FF, title="+DI")
//plot(minus, color=#FF6A00, title="-DI")
// plot(trig_level, color=color.white, title="Key Level")

///////////////////////////////////////////////////////////


////////////////////////////////////////////////////Component Code Start

testStartYear = input(2019, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2030, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
    
///// Component Code Stop //////////////////////////////////////////

//////////////// STRATEGY EXECUTION //////////////////////////

// STRATEGY CONDITION
// LONG

long = ((open > lower and open < upper) and close > upper) and plus > minus and plus > trig_level and volume[0] > volume[1]
entry_long = trend_cond ? long and UT : long
exit_long = (close < ma) //or low < SL_long

//LONG SET UP
// Take Profit / Stop Loss

entry_price_long=valuewhen(entry_long,close,0)
//SL_long = entry_price_long * (1 - long_sl_inp)

long_tp1_inp = input(8, title='Long Take Profit 1 Target %', step=0.1)/100
long_tp1_qty = input(20, title="Long Take Profit 1 Qty %", step=1)

long_tp2_inp = input(16, title='Long Take Profit 2 Target %', step=0.1)/100
long_tp2_qty = input(30, title="Long Take Profit 2 Qty %", step=1)

long_take_level_1 = strategy.position_avg_price * (1 + long_tp1_inp)
long_take_level_2 = strategy.position_avg_price * (1 + long_tp2_inp)

//long_sl_inp = input(4, title='Long Stop Loss %', step=0.1)/100
//long_stop_level = strategy.position_avg_price * (1 - long_sl_inp)


// STRATEGY EXECUTION
if testPeriod()

    // LONG
    
    strategy.entry(id="Long", long=true, when=entry_long, comment = "INSERT ENTRY LONG COMMAND")
    strategy.exit("TP1","Long", qty_percent=long_tp1_qty, limit=long_take_level_1) // PLACE TAKE PROFIT IN WBT BOT SETTINGS 
    strategy.exit("TP2","Long", qty_percent=long_tp2_qty, limit=long_take_level_2) // PLACE TAKE PROFIT IN WBT BOT SETTINGS
    strategy.close(id="Long", when=exit_long, comment= "INSERT EXIT LONG COMMAND")


//PLOT FIXED SLTP LINE
// LONG POSITION
plot(strategy.position_size > 0 ? long_take_level_1 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="1st Long Take Profit")
plot(strategy.position_size > 0 ? long_take_level_2 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="2nd Long Take Profit")
//plot(strategy.position_size > 0 ? long_stop_level : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Stop Loss")