
이 전략은 세 가지 주요 지표에 기반을 두고 있습니다. 트렌드 지표, 켈트너 통로, DM 지표입니다.
트렌드 지표는 SMA와 EMA로 구성된다. EMA가 SMA를 통과하면 트렌드에 들어간다는 것이 확인된다. 켈트너 통로는 캔들 개시 및 종결 가격을 판단하는 데 사용됩니다. DM 지표는 다공간 방향을 판단하는 데 사용됩니다.
다음의 조건들을 충족하면 더 많은 일을 할 수 있습니다.
두 개의 스톱 포스트와 한 개의 스톱 손실을 설정하는 전략. 추적 스톱 포스트를 사용하여 더 많은 이익을 얻는 것을 고려 할 수 있습니다.
EMA와 SMA의 황금 叉死叉을 통해 트렌드 방향을 판단한다. EMA 파라미터는 46이며, SMA 파라미터는 46이다. EMA 상에 SMA를 통과하면 상승 트렌드에 들어간다는 것을 의미한다.
켈트너 통로는 세 개의 선으로 구성되어 있다. 중선, 상단선, 하단선. 중선은 종전 가격인 SMA이며, 길이는 81이다. 상단선과 하단선은 각각 중선 위에 그리고 아래에 지정된 배수의 실제 진동량을 갖는다. 여기서는 중선 위에 2.5배의 진동량을 갖는다.
Keltner 통로는 주로 가격이 통로 안에 있는지, 그리고 통로를 가로지르는 상황을 판단하는 데 사용됩니다.
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")