ADXベースの1時間TENKAN KIJUNクロストレンド追跡戦略

作者: リン・ハーンチャオチャン開催日:2023年8月12日15時37分
タグ:

img

概要

これは,ICHIMOKUシステムにおける1時間のタイムフレームTENKANとKIJUNの交差をベースとしたシンプルで収益性の高いトレンド追跡戦略で,ADXインジケーターと組み合わせて,弱いトレンド市場をフィルタリングして取引シグナルを生成します.ETH/BTCのような大きな市場キャップ altcoin BTCペアで最もうまく機能します.

戦略の論理

この戦略は,市場傾向の方向を決定するために,イチモクシステムにおける変換線 (TENKAN) とベースライン (KIJUN) の交差を使用する.TENKAN線は,過去18個のキャンドルの最高高値と最低低値の平均に基づいて計算され,急速な変換線を表す.KIJUN線は,標準変換線を表す58個のキャンドル周期に基づいている.

TENKAN が KIJUN の上を横切ると,それは上昇信号である. TENKAN が KIJUN の下を横切ると,それは下落信号である.これは中期トレンド逆転を捕捉することを目的としている.

ADX インディケーターは,トレンドの強さを測定するために使用されます. ADX が強烈なトレンドを示す20を超える場合にのみ,シグナルが起動します.

要するに,この戦略は TENKAN と KIJUN の交差経由で中期トレンド方向を特定し,長期トレンドを追跡するために ADX を使って偽のブレイクをフィルタリングします.

利点分析

この戦略の主な利点は以下の通りです.

  1. 成熟した信頼性の高いICHIMOKUシステムを使用して 傾向の方向と転換点を決定します

  2. ADX を使って弱気市場をフィルタリングし 統合の失敗を回避します

  3. 1時間の時間枠は市場の騒音をフィルターし 中長期の傾向のみを把握します

  4. この論理は トレンドトレーダーにとって シンプルで 簡単に理解できます

  5. ETH/BTCのような高市場キャップのコインでは 安定したバックテスト結果が出ています

リスク分析

この戦略に注意すべきリスクは:

  1. イチモクパラメータは敏感で 異なるペアに合わせる必要があります

  2. ADXが遅れてしまい 入力が失敗する可能性があります

  3. ストップ・ロスは頻繁に行われる市場では 業績が低下しています

  4. 性能は異なるペアと時間枠で大きく異なります

  5. ポジションを長期に保持することはリスクがあり,適切なストップ・ロスト/テイク・プロフィートが必要である.

最適化は ADX パラメータ調整,誤信号を減らす MACD のようなフィルターを追加,または強度のためのパラメータの動的調整を通じて行えます.

オプティマイゼーションの方向性

戦略の改善のためのいくつかの主要な方向性:

  1. より良い適応のためにTENKANとKIJUNパラメータのダイナミック最適化

  2. ADXを代替したり組み合わせたりする より良い傾向指標を探しています

  3. リスク/リターン比を制御するためにストップ・ロスト/テイク・プロフィートを追加する.

  4. 安定性を向上させるため,補完的な指標とモデルを組み合わせる.

  5. パラメータを複数のペアで調節するためのモジュール化と柔軟性

  6. 量的なリスク管理,例えば極端な動きに対する最大引き上げ制御.

結論

結論として,これはシンプルで実用的なトレンドトラッキング戦略であり,主にTENKAN/KIJUNクロスとADXをベースに,中期から長期間のトレンドを特定し,シグナルを生成する.特にETH/BTCのような高市場キャップのBTCペアで,比較的安定した収益性のある,ポジティブなバックテスト結果を示している.しかし,パラメータチューニングにも依存し,ペア最適化が必要です.トレンドが逆転するときに損失を制限するために,トレードごとにリスク制御も必要です.全体的には,これはalgoroトレーダーにとって価値のあるトレンドフォロー戦略の参照を提供します.


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

//@version=2
strategy(title="Odin's Kraken (TK Cross Strategy)", shorttitle="Odin's Kraken", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

src = input(close, title="Source")

// define tk in ichimoku

conversionPeriods = input(18, minval=1, title="Conversion Line Periods (Tenkan)"),
basePeriods = input(58, minval=1, title="Base Line Periods (Kijun)")

donchian(len) => avg(lowest(len), highest(len))

conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)

TK_Uptrend = crossover(conversionLine,baseLine)
TK_Downtrend = crossunder(conversionLine,baseLine)

plot(conversionLine, color=lime, title="Tenkan", linewidth=3)
plot(baseLine, color=red, title="Kijun", linewidth=3)

// define ADX

adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
th = input(title="threshold", defval=20)
dirmov(len) =>
	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)
	truerange = rma(tr, len)
	
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, 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)
	
[plus, minus] = dirmov(dilen)
sig = adx(dilen, adxlen)

// backtesting range

// From Date Inputs
fromDay = input(defval = 3, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2018, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 3, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 9, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2019, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true

// open long and short

longCondition = TK_Uptrend
if (longCondition and sig > 12 and time_cond)
    strategy.entry("LONG", strategy.long)

shortCondition = TK_Downtrend
if (shortCondition and sig > 12 and time_cond)
    strategy.entry("SHORT", strategy.short)

// close trade if backtesting criteria not met

if (not time_cond)
    strategy.close_all()




もっと