
この戦略は,平均真範囲指標 ((ATR) とトレンド指標 ((DMI)) の正向指標 ((DI+) と負向指標 ((DI-) の交差を基に,買入と売却のタイミングを判断する.この戦略は,トレンドフォロー戦略に属し,DI+とDI-の交差を基にトレンドの転換点を判断する.ATRは,ストップ損失とストップ価格を設定するために使用される.
ATR ((14)) を計算する:過去14日の最高値,最低値,閉店価格を利用して平均的な実際の波動範囲を計算する
DI+とDI−を計算する:
DI+ = 100 * RMA(MAX(UP,0),N) / ATNR
DI- = 100 * RMA(MAX(DOWN,0),N) / ATNR
UPは当日の最高値と昨日の閉店価格の差,DOWNは当日の最低値と昨日の閉店価格の差,Nはパラメータの長さで,デフォルトは14,ATNRは前回の計算から得られたATRです.
買ったり売ったりする際の判断:
購入信号はDI+とDI−の上で発生します.
販売信号はDI+がDI−を突破すると発生します.
ストップダストを設定する:
複数の単一のストップ・ローズを入場価格で減算し,ATRをストップ・ローズ倍数で掛けます.
多単一ストップの値上げは,入場価格とATRの倍数である.
空券のストップローズは入場価格とATRのストップローズ倍数
空券ストップ値上げは入場価格減算ATR掛けるストップ値上げ倍数
DI+とDI-の交差点を利用して,トレンドの転換点を判断し,新しいトレンドの方向をタイムリーに捉える
ATRは,市場変動に応じて合理的なストップポイントを設定できるダイナミックなストップポイント指標です.
戦略のパラメータが少なく,理解しやすく,実行できます.
この戦略はポジティブな収益因子を持ち,買い持策よりも優れていると反省データで示されています.
DIの交差は誤った取引のリスクを招く
止損停止点が近づいている
市場が動揺する傾向を 効率的に処理できない
リスクの撤回
移動平均などの指標を組み合わせてDIの交差信号をフィルタリングし,波動的な状況で誤った取引を避ける
ポジション管理機構の追加,固定シェア,マーティンゲルなどの方法,撤回を制御し,収益性を向上させる
ATRパラメータを最適化して,ストップ・ストップを異なる取引品種の波動範囲に適合させる
パラメータを最適化して,DI周期,ATR周期,ATR倍数などの最適なパラメータの組み合わせを見つける
夜盤と朝盤の取引判断論理を追加し,戦略を24時間稼働させる
この策略は,DIの交差によって,買い買いのタイミングを判断し,ATR動的にストップ・ストップを設定する.戦略のパラメータは少ない,テストや実況検証が容易で,最適化調整も便利である.しかし,DIの交差は,震動の判断に不十分な効果であり,これはこの策略の改善が必要な方向である.全体的に言えば,この策略は,安定したパフォーマンスを発揮し,日中のショートライン取引策として使用するのに適している.
/*backtest
start: 2022-11-06 00:00:00
end: 2023-11-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © TheHulkTrading
//@version=4
strategy("DI Crossing Daily Straregy HulkTrading", overlay=true)
// ATR Multiplier. Recommended values between 1..4
atr_multiplier = input(1, minval=1, title="ATR Multiplier")
//Length of DI. Recommended default value = 14
length = input(14, minval=1, title="Length di")
up = change(high)
down = -change(low)
range = rma(tr, 14)
//DI+ and DI- Calculations
di_plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, length) / range)
di_minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, length) / range)
//Long and short conditions
longCond = crossover(di_plus,di_minus)
shortCond = crossunder(di_plus,di_minus)
//Stop levels and take profits
stop_level_long = strategy.position_avg_price - atr_multiplier*atr(14)
take_level_long = strategy.position_avg_price + 2*atr_multiplier*atr(14)
stop_level_short = strategy.position_avg_price + atr_multiplier*atr(14)
take_level_short = strategy.position_avg_price - 2*atr_multiplier*atr(14)
//Entries and exits
strategy.entry("Long", strategy.long, when=longCond)
strategy.exit("Close Long","Long", stop=stop_level_long, limit = take_level_long)
strategy.entry("Short", strategy.short, when=shortCond)
strategy.exit("Close Short","Short", stop=stop_level_short, limit = take_level_short)