1時間の転換基準クロスオーバーに基づくADXトレンドフォロー戦略


作成日: 2023-12-08 15:37:00 最終変更日: 2023-12-08 15:37:00
コピー: 0 クリック数: 782
1
フォロー
1621
フォロワー

1時間の転換基準クロスオーバーに基づくADXトレンドフォロー戦略

概要

この策略は,シンプルで利潤のあるトレンド追跡策略で,一時間枠のICHIMOKU識別システムのTENKAN線とKIJUN線の交差を基にトレンドの方向を判断し,ADX指標と組み合わせて,トレンドが弱い市場をフィルタリングして取引信号を発信する.この策略は,主にETH/BTCなどの大市販のアルトコインのBTC取引ペアに適用される.

戦略原則

この策略は,ICHIMOKU雲図のConversion Line (TENKAN線) とBase Line (KIJUN線) の交差を用い,市場トレンドの方向を判断する.その中で,TENKAN線計算方法は,過去18根のK線の最近の高点と最近の低点の平均値であり,急速な変換線を表す.KIJUN線計算方法は,過去58根のK線の最近の高点と最近の低点の平均値であり,標準的な変換線を表す.

急速転換線が下から標準転換線を貫くときは,看板信号;急速転換線が上から下から標準転換線を貫くときは,下落信号.こうして中期短期トレンドの転換を捉えることができる.

同時に,戦略はADX指標を組み合わせて市場トレンドの強さをフィルター調整する.ADX指標は,トレンドの強さを判断する.ADX値が20を超えると,現在のトレンドが強いことを示す.したがって,戦略はADXが20を超えるとのみ取引信号を発する.

総じて,この戦略は,TENKAN線とKIJUN線の交差判断により,ADX指標のフィルターによる偽の突破と連携して,実際のトレンドをロックして,中長期のトレンドを追跡する目的を達成します.

優位分析

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

  1. ICHIMOKUのクラウドグラフを使ってトレンドの方向性を判断する.この指標システムは,それ自体が成熟し,信頼性があり,トレンドの転換点を正確に判断できる.

  2. ADX指数フィルターによる調整強度の低い市場との組み合わせにより,清算時に頻繁に取引を避ける.

  3. 1時間線開発戦略により,短期市場騒音をフィルターし,中長期線トレンドのみを捉えます.

  4. 戦略はシンプルで直感的で,理解し,追跡しやすく,トレンドトラッカーが使うのに適しています.

  5. 戦略的反測は,特にETH/BTCなどの大市販通貨のペアでは良好な結果を示しています.

リスク分析

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

  1. ICHIMOKU雲図自体はパラメータに敏感で,異なる周期パラメータの効果は大きく異なるため,異なる通貨対に対して最適パラメータをカスタマイズする必要がある.

  2. ADX指標は,いくつかの状況で信号を遅らせ,最適な入場時間を逃す可能性があります.

  3. 中長線トレンドを追跡する戦略は,震動の状況でうまく機能せず,損なわれやすい.

  4. 異なる通貨ペアと異なる時間周期では,この戦略の効果は大きく異なっており,自分の優れている品種に応じて選択する必要があります.

  5. 長期にわたってポジションを保持することはリスクが高いため,適切な停止・停止条件を設定する必要があります.

この策略は,ADXパラメータを調整したり,MACDなどの他の指標を追加したりして,フィルタリング信号を補助して,仮想信号を軽減し,策略の安定性を向上させることができます.また,異なる状況タイプに適応するためにパラメータを動的に調整することで,よりよい頑丈性を得ることができます.

最適化の方向

この戦略には,以下の主な改善策があります.

  1. TENKAN線とKIJUN線のパラメータを動的に最適化して,リアルタイム状況と異なる通貨に適応させる.

  2. ADX指標を最適化したり,代替したりして,より敏感で効率的なトレンド判断手段を探し出す.

  3. ストップ・ストップ・ストップ・ストラテジーに加え,単一取引のリスク・リターン・レートをコントロールし,大きな損失を回避する.

  4. ポートフォリオを最適化し,相互補完的な指標を探し,統合戦略を策定し,安定性を高める.

  5. コード構造をモジュール化して,カスタムパラメータの柔軟性を高め,より多くの品種に対応する.

  6. 極端な状況のリスクを防ぐために,最大撤退,関連系数などの量化風力管理手段を追加します.

要約する

全体として,この戦略はシンプルで実用的なトレンド追跡戦略である.これは主にTENKAN KIJUNの交叉とADXの指標を組み合わせて中長線トレンドの方向を判断して取引信号を発信する.この戦略は反測効果が高く,特にETH/BTCなどの大市価通貨ペアで使用すると,比較的安定した利益を得ることができます.しかし,この戦略には一定のパラメータ依存性があり,異なる通貨種と状況タイプに最適化する必要があります.同時に,損失拡大を避けるために単一の取引リスクを制御する必要があります.全体的に,この戦略は,定量化トレーダーに価値のあるトレンド追跡戦略の参考を提供します.

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