トレンドベースのケルトナーチャネル戦略


作成日: 2023-11-03 16:59:39 最終変更日: 2023-11-03 16:59:39
コピー: 0 クリック数: 791
1
フォロー
1617
フォロワー

トレンドベースのケルトナーチャネル戦略

概要

この戦略は,トレンド指標,ケルター・チャネル,DM指標の3つの主要な指標に基づいています.

トレンド指標はSMAとEMAで構成されている. SMAをEMAで通過すると,トレンドへの入りを確認する. ケルトナー通路は,Candleの開値と閉値を判断するために使用される. DM指標は多空方向を判断するために使用される.

資格の取得条件は以下の通りです.

  1. EMAはSMAを横断し,上昇傾向を確認した
  2. Candleの開いた価格は上方,閉じた価格は通路の内側
  3. DM指数は設定された基準線より大きい

戦略は2つのストップポイントと1つのストップポイントを設定します. 追跡ストップを使用してより多くの利益を得ることを検討することができます.

戦略原則

傾向を判断する

EMAとSMAの金叉死叉によってトレンドの方向を判断する。EMAのパラメータは46で,SMAのパラメータは46である。EMA上を横切るときは,上昇傾向に入ることを意味する。

ケルトナー通路

ケルター通路は3つの線で構成される. 中線,上線,下線. 中線は終盤価格のSMAで,長さは81である. 上線と下線は,それぞれ中線上下にある指定倍数の実際の振幅である. ここで中線上下2.5倍の振幅として設定されている.

ケルター・チャネルは,価格がチャネル内にあるか,またチャネルを横断しているかを判断するために使用されます.

DM指数

DM指数は3つの線で構成される:ADX,+DI,および-DI。+DIは上昇力を測定し,−DIは下落力を測定する。ADXは平均的なトレンド指数であり,トレンドの力を反映する。

ADXパラメータは10で,DIパラメータは19である. +DIラインで設定された基準線 ((デフォルト27) を穿くと,強気強さを表示し,多作業に適している.

優位分析

この戦略は,トレンド,チャネル,強弱指標を組み合わせて,価格の動きと多空方向を効果的に判断します.以下の利点があります:

  1. 傾向判断は比較的正確で,逆操作は避けられる.

  2. カーターナー通路は,支柱と圧力の位置を形成し,はっきりと見える.

  3. DM指数は多空力を測定し,多空方向を正しく確認する.

  4. 戦略条件は厳格で,高回落の偽突破を効果的にフィルターできます.

  5. ストップ・ストップ・ロスの設定は,利益の機会を把握するのに役立ちます.

リスク分析

この戦略にはいくつかのリスクがあります.

  1. トレンドは逆転し,EMAはSMAを下回る可能性があるので,早期退出を注意してください.

  2. 強い状況では,通路は機能しなくなる可能性があり,厳格な支柱圧位とは考えられない.

  3. DM指数は誤った信号を発する可能性があるため,価格動向と組み合わせて判断すべきである.

  4. 偽突破は入場を誘発する可能性があるが,すぐに再び落下し,合理的なストップダメージを設定すべきである.

  5. ストップ・ストラスト・ポイントは,市場の変化に対応するために常に最適化する必要があります.

最適化の方向

更に,以下の点で最適化できます.

  1. パラメータを調整し,異なるトレンド判断方法の効果をテストする.

  2. 経路のパラメータを最適化して,実際の波動範囲に近付く.

  3. 異なるDMパラメータの組み合わせをテストし,最適なパラメータを選択します.

  4. 異なる入場条件を設定します.例えば,取引量フィルターを組み合わせます.

  5. ストップ・ストップ・ストップ・ストラトジーを最適化します. 例えば,ストップ・ストラトジーを試して,より多くの利益を得ることができます.

  6. 異なる品種に対して別々にテストし,最適なパラメータの組み合わせを選びます.

要約する

この戦略は,トレンドの方向を判断する複数の指標を総合的に使用し,圧力レベルと多空力を支える.これはトレンドを効果的に捉え,リスクを制御することができます.しかし,リスクに注意を払い,市場の変化に適応するためにパラメータを最適化する必要があります.全体的に,この戦略は,強力な実用性を持っています.

ストラテジーソースコード
/*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")