原油ADXの動向 戦略をフォローする

作者: リン・ハーンチャオチャン開催日:2024年01月25日 (日) 15:18:15
タグ:

img

概要

この戦略は,ケヴィン・デイヴィのフリー・フューチャー・トレード・ストラテジーから改訂されたもので,ADX指標を使用して原油市場のトレンドを決定し,価格ブレイク原則と組み合わせて,原油のシンプルで実用的な自動取引戦略を実装する.

戦略原則

  1. 14 期間の ADX 指標を計算する
  2. ADX > 10 の場合,市場は傾向があると考えられる.
  3. 65バー前の閉盤価格より高い場合,これは価格のブレイクとロング信号を示します.
  4. 65バー前の閉値より低い場合,これは価格のブレイクとショート信号を示します.
  5. ストップ・ロスを設定し,ポジションに入ってから利益を取ります.

この戦略は主にADX指標をベースに傾向を決定し,傾向条件下で固定サイクル価格ブレイクに基づいて取引信号を生成する. 全体の戦略論理は非常にシンプルで明確である.

利点分析

  • ADX を使ってトレンドを特定し,トレンドの機会を逃さないようにする
  • 固定サイクル価格ブレイクは,バックテストの結果が良い信号を生成します
  • 直感的でシンプルなコードで,理解し,変更が簡単です
  • ケヴィン・デイビーの長年のライブ・トレーディング検証 曲線不適合

リスク分析

  • 主な指標として,ADXはパラメータ選択とブレイクサイクル選択に敏感です.
  • 固定周期のブレイクが 機会を逃すかもしれない
  • 誤ったストップ・ロースと/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または/または
  • ライブ取引とバックテストの結果には違いがある可能性があります.

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

  • ADX パラメータとブレイクアウトサイクルを最適化
  • ポジションサイズを動的に調整する
  • バックテスト結果とライブ取引の検証に基づいて戦略を継続的に修正し改善する
  • 戦略最適化のための機械学習とディープラーニング技術を導入する

概要

総じてこれは非常に実用的な原油取引戦略である. ADX指標を使用してトレンドを非常に合理的に決定する. 価格ブレイクアウト原則は,バックテスト結果が良好でシンプルで有効である. 同時に,ケビン・デイヴィの公開無料戦略として,実際の戦闘で非常に強力な信頼性があります. 戦略にはまだ改善の余地があるものの,初心者や小資本トレーダーが開始し練習するのに非常に適した選択です.


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

// Strategy idea coded from EasyLanguage to Pinescript
//@version=5
strategy("Kevin Davey Crude free crude oil strategy", shorttitle="CO Fut", format=format.price, precision=2, overlay = true, calc_on_every_tick = true)
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
	up = ta.change(high)
	down = -ta.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 = ta.rma(ta.tr, len)
	plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
	minus = fixnan(100 * ta.rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
plot(sig, color=color.red, title="ADX")

buy = sig > 10 and (close - close[65]) > 0 and (close - close[65])[1] < 0
sell = sig > 10 and (close - close[65]) < 0 and (close - close[65])[1] > 0

plotshape(buy, style = shape.arrowup, location = location.belowbar,size = size.huge)
plotshape(sell, style = shape.arrowdown, location = location.abovebar,size = size.huge)

if buy
	strategy.entry("long", strategy.long)
if sell
	strategy.entry("short", strategy.short)

if strategy.position_size != 0
	strategy.exit("long", profit = 450, loss = 300)
	strategy.exit("short", profit = 450, loss = 300)


// GetTickValue() returns the currency value of the instrument's
// smallest possible price movement.
GetTickValue() =>
    syminfo.mintick * syminfo.pointvalue

// On the last historical bar, make a label to display the
// instrument's tick value
if barstate.islastconfirmedhistory
    label.new(x=bar_index + 1, y=close, style=label.style_label_left,
         color=color.black, textcolor=color.white, size=size.large, 
         text=syminfo.ticker + " has a tick value of:\n" + 
             syminfo.currency + " " + str.tostring(GetTickValue()))

もっと