これは,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 を使って偽のブレイクをフィルタリングします.
この戦略の主な利点は以下の通りです.
成熟した信頼性の高いICHIMOKUシステムを使用して 傾向の方向と転換点を決定します
ADX を使って弱気市場をフィルタリングし 統合の失敗を回避します
1時間の時間枠は市場の騒音をフィルターし 中長期の傾向のみを把握します
この論理は トレンドトレーダーにとって シンプルで 簡単に理解できます
ETH/BTCのような高市場キャップのコインでは 安定したバックテスト結果が出ています
この戦略に注意すべきリスクは:
イチモクパラメータは敏感で 異なるペアに合わせる必要があります
ADXが遅れてしまい 入力が失敗する可能性があります
ストップ・ロスは頻繁に行われる市場では 業績が低下しています
性能は異なるペアと時間枠で大きく異なります
ポジションを長期に保持することはリスクがあり,適切なストップ・ロスト/テイク・プロフィートが必要である.
最適化は ADX パラメータ調整,誤信号を減らす MACD のようなフィルターを追加,または強度のためのパラメータの動的調整を通じて行えます.
戦略の改善のためのいくつかの主要な方向性:
より良い適応のためにTENKANとKIJUNパラメータのダイナミック最適化
ADXを代替したり組み合わせたりする より良い傾向指標を探しています
リスク/リターン比を制御するためにストップ・ロスト/テイク・プロフィートを追加する.
安定性を向上させるため,補完的な指標とモデルを組み合わせる.
パラメータを複数のペアで調節するためのモジュール化と柔軟性
量的なリスク管理,例えば極端な動きに対する最大引き上げ制御.
結論として,これはシンプルで実用的なトレンドトラッキング戦略であり,主に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()