
Стратегия основана на трех основных показателях: индикатор тренда, канал Келтнера и индикатор DM.
Тренд-индикатор состоит из SMA и EMA. Когда EMA пересекает SMA, она подтверждает вход в тренд. Келтнеров канал используется для определения цены открытия и закрытия Candle.
Вы можете сделать больше, если вы соответствуете следующим условиям:
Стратегия включает в себя два стопа и один стоп-лосс. Для получения дополнительной прибыли можно рассмотреть возможность использования стоп-лосса с отслеживанием.
Тенденционное направление определяется по золотому спиралю EMA и SMA. Параметр EMA - 46, параметр SMA - 46. Когда EMA пересекает SMA, это означает, что она входит в восходящую тенденцию.
Кельтерна включает в себя три линии: среднюю, верхнюю и нижнюю. Средняя линия представляет собой SMA с закрывающей ценой и имеет длину 81. Верхняя и нижняя линии соответственно расположены выше и ниже средней линии.
Кельтерна используется в основном для определения того, находятся ли цены внутри канала, а также для определения того, пересекают ли они его.
Индикатор DM содержит три линии: ADX, +DI и -DI. +DI измеряет силу подъема, -DI измеряет силу падения. ADX представляет собой средний индикатор тренда, отражающий силу тренда.
Здесь параметр ADX установлен как 10, а параметр DI - 19. Когда на +DI-линии наносится настроенная эталонная линия ((по умолчанию 27), это означает, что рыночная активность сильна и подходит для большего количества работ.
Эта стратегия, объединяющая тренды, каналы и сильные и слабые индикаторы, позволяет эффективно определять движение цены и направление множественного пространства. Она имеет следующие преимущества:
Тенденции определяются достаточно точно, чтобы избежать обратных операций.
Клетнерский проход четко виден, образуя опоры и точки давления.
Показатель DM позволяет измерить силу в воздухе и гарантировать правильное направление в воздухе.
При строгих стратегических условиях, можно эффективно отфильтровать ложные прорывы, вызванные скачками.
Установка стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп.
Однако эта стратегия несет в себе определенные риски:
Тенденция может измениться, EMA может пробиться ниже SMA, следует обратить внимание на своевременный выход.
В сильных условиях канал может не работать и не может рассматриваться как строго поддерживающий уровень давления.
Индекс DM может подавать ошибочные сигналы, которые следует оценивать в сочетании с ценовыми тенденциями.
Фальшивый прорыв может спровоцировать вход в игру, но вскоре он снова вернется, и следует установить разумный стоп-страх.
Стоп-стоп-потери должны быть постоянно оптимизированы, чтобы адаптироваться к изменениям на рынке.
В частности, можно сделать следующее:
Настройка параметров, проверка эффективности различных методов определения тенденций.
Оптимизация параметров канала, чтобы приблизить его к реальному диапазону колебаний.
Тестируйте различные комбинации параметров DM, чтобы выбрать оптимальный.
Установка различных условий входа, таких как фильтр объема транзакций.
Оптимизация стратегий стоп-стоп, например, попытка отслеживания стоп-стоп для получения большей прибыли.
Для различных сортов тестируют по отдельности, чтобы выбрать оптимальное сочетание параметров.
Стратегия использует множество показателей для определения направления тенденции, поддержки давления и многомерной силы, чтобы эффективно улавливать тенденции и контролировать риск. Однако следует учитывать риск и оптимизировать параметры для адаптации к изменениям рынка. В целом, стратегия имеет сильную практическую ценность.
/*backtest
start: 2022-10-27 00:00:00
end: 2023-11-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Original Idea by: Wunderbit Trading
//@version=4
strategy("Keltner Channel ETH/USDT 1H", overlay=true, initial_capital=1000,pyramiding = 0, currency="USD", default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent,commission_value=0.07)
/// TREND
ribbon_period = input(46, "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(81, step=1, minval=1)
mult = input(2.5, step=0.1)
// Calculate Keltner Channel
ma = sma(source, length)
range = useTrueRange ? tr : high - low
rangema = sma(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 //
adxlen = 10 // input(10, title="ADX Smoothing")
dilen = input(19, title="DI Length")
keyLevel = 23// input(23, title="key level for ADX")
dirmov(len) =>
up = change(high)
down = -change(low)
truerange = rma(tr, len)
plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange)
minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange)
[plus, minus]
adx(dilen, adxlen) =>
[plus, minus] = dirmov(dilen)
sum = plus + minus
adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
[adx, plus, minus]
[sig, up, down] = adx(dilen, adxlen)
benchmark=input(title="DMI Benchmark", defval=27, minval=1,step=1)
// plot(sig, color=color.red, title="ADX")
// plot(up, style=plot.style_histogram, color=color.green, title="+DI")
// plot(down, style=plot.style_histogram, color=color.red, title="-DI")
// plot(keyLevel, 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(9999, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
testPeriod() => true
///// Component Code Stop //////////////////////////////////////////
//////////////// STRATEGY EXECUTION //////////////////////////
//LONG SET UP
// Take Profit / Stop Loss
long_tp1_inp = input(4.5, title='Long Take Profit 1 %', step=0.1)/100
long_tp1_qty = input(15, title="Long Take Profit 1 Qty", step=1)
long_tp2_inp = input(20, title='Long Take Profit 2%', step=0.1)/100
long_tp2_qty = input(100, 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 CONDITION
// LONG
entry_long = ((open > lower and open < upper) and close > upper) and up > down and up > benchmark // and volume[0] > volume[1]
entry_price_long=valuewhen(entry_long,close,0)
SL_long = entry_price_long * (1 - long_sl_inp)
exit_long = (close < lower) or low < SL_long
// STRATEGY EXECUTION
if testPeriod()
// LONG
if UT
strategy.entry(id="Long", long=true, when=entry_long, comment = "INSERT ENTER 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")