アルファトレンドクロス・ペリオド戦略

作者: リン・ハーンチャオチャン, 日時: 2023-09-28 11:05:27
タグ:

概要

この戦略は,RSIとMFIの利点を組み合わせたAlphaTrend指標に基づい,上昇傾向と下落傾向の両方の市場で良い結果を達成することができる.この戦略は主に価格がAlphaTrend曲線を突破するかどうかを判断する傾向の方向を判断する.

戦略の論理

  1. 市場変動を測定するためのATR指標を計算する
  2. 市場指数を使用し,市場指数データがない場合,市場指数を使用し,市場指数データがある場合,MFIを使用します.
  3. ATRと市場方向に基づいて上部および下部帯を計算する
  4. 動的上部と下部帯を含むアルファトレンド曲線を計算する
  5. 価格がアルファトレンド曲線以上または以下を横断したときの購入・売却信号を生成する

この戦略は,価格傾向の方向性を決定するために主にアルファトレンド曲線に依存する.ATR,RSI/MFIを考慮し,トレンドを効果的に追跡することができる.価格が曲線に浸透すると,トレンドの変化をシグナル化し,エントリーポイントを形成する.

利点

  1. アルファトレンドは,RSIとMFIの強みを組み合わせ,牛と熊の両方の市場に適応できる
  2. 動的上位帯と下位帯は,市場の変動に基づいて自動的に調整されます.
  3. 誤った信号を避けるため,価格と量の両方の情報を含みます
  4. ブレイクアウトアプローチは,トレンドの方向性を明らかにします.
  5. シンプルで理解しやすい論理

要約すると この戦略は,上昇市場と下落市場の両方に有効であり, 市場のノイズを効果的にフィルタリングし, 傾向を正確に識別し, 効率的なトレンドフォロー戦略です.

リスク

  1. アルファトレンド曲線は誤ったブレイクがあり,他の指標からの確認が必要です.
  2. 市場の整合中に多くの誤った信号が発生する可能性があります.
  3. パラメータの調節が不十分であるため,効果のない結果
  4. ストップ・ロスはピーク時に行われ,大きな損失が発生する可能性があります.

リスクに対処するために,ストップ・ロスは単一の取引損失を制御し,誤った信号を避けるために他の指標と組み合わせ,異なる市場に基づいてパラメータを調整することができます.

増進 の 機会

  1. 設定を最適化するために異なるパラメータ組み合わせをテストする
  2. 確認条件を形成するために他の指標を組み込む
  3. リスク制御のために動的または後続ストップ損失を使用する
  4. 市場状況に基づいて異なる時間枠 (5m,15m,その他) で取引
  5. より正確なエントリーのために,エントリータイムリングシステムを改良

戦略がより多くの市場条件に適応できるように,異なる市場やパラメータでテストすることで,さらなる最適化を行うことができます.

結論

AlphaTrendの戦略は,単純で効率的なトレンドフォローシステムである.ブイッシュとベアッシュ市場に適応するために価格とボリュームの両方の情報を組み込む.ブレイクアウトメカニズムは明確なエントリーシグナルを提供します.適切なリスク制御により,良い結果を達成することができます.さらなるテストと強化は,より多くの市場状況において収益性を安定させるのに役立ちます.


/*backtest
start: 2023-09-20 00:00:00
end: 2023-09-26 00:00:00
period: 30m
basePeriod: 15m
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/
// author © KivancOzbilgic
// developer © KivancOzbilgic
// pv additions, simplification and strategy conversion @ treigen
//@version=5
strategy('AlphaTrend For ProfitView', overlay=true, calc_on_every_tick=true, process_orders_on_close=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1, initial_capital=1000)
coeff = input.float(1.5, 'Multiplier', step=0.1)
AP = input(15, 'Common Period')
ATR = ta.sma(ta.tr, AP)
novolumedata = input(title='Change calculation (no volume data)?', defval=false)

i_startTime = input(defval = timestamp("01 Jan 2014 00:00 +0000"), title = "Backtesting Start Time", inline="timestart", group='Backtesting')
i_endTime = input(defval = timestamp("01 Jan 2100 23:59 +0000"), title = "Backtesting End Time", inline="timeend", group='Backtesting')
timeCond = true

pv_ex = input.string('', title='Exchange', tooltip='Leave empty to use the chart ticker instead (Warning: May differ from actual market name in some instances)', group='PV Settings')
pv_sym = input.string('', title='Symbol', tooltip='Leave empty to use the chart ticker instead (Warning: May differ from actual market name in some instances)', group='PV Settings')
pv_acc = input.string("", title="Account", group='PV Settings')
pv_alert_long = input.string("", title="PV Alert Name Longs", group='PV Settings')
pv_alert_short = input.string("", title="PV Alert Name Shorts", group='PV Settings')
pv_alert_test = input.bool(false, title="Test Alerts", tooltip="Will immediately execute the alerts, so you may see what it sends. The first line on these test alerts will be excluded from any real alert triggers" ,group='PV Settings')

upT = low - ATR * coeff
downT = high + ATR * coeff
AlphaTrend = 0.0
AlphaTrend := (novolumedata ? ta.rsi(close, AP) >= 50 : ta.mfi(hlc3, AP) >= 50) ? upT < nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : upT : downT > nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : downT


k1 = plot(AlphaTrend, color=color.new(#0022FC, 0), linewidth=3)
k2 = plot(AlphaTrend[2], color=color.new(#FC0400, 0), linewidth=3)

buySignalk = ta.crossover(AlphaTrend, AlphaTrend[2])
sellSignalk = ta.crossunder(AlphaTrend, AlphaTrend[2])

var exsym = ""
if barstate.isfirst
    exsym := pv_ex == "" ? "" : "ex=" + pv_ex + ","
    exsym := pv_sym == "" ? exsym : exsym + "sym=" + pv_sym + ","


if barstate.isconfirmed and timeCond 
    if strategy.position_size <= 0 and buySignalk
        strategy.entry("Buy", strategy.long)
        alert(pv_alert_long + "(" + exsym + "acc=" + pv_acc + ")", alert.freq_once_per_bar_close)
    if strategy.position_size >= 0 and sellSignalk
        strategy.entry("Sell", strategy.short)
        alert(pv_alert_short + "(" + exsym + "acc=" + pv_acc + ")", alert.freq_once_per_bar_close)


//  Only used for testing/debugging alert messages
if pv_alert_test
    alert("<![Alert Test]!>\n" + pv_alert_long + "(" + exsym + "acc=" + pv_acc + ")", alert.freq_once_per_bar)
    alert("<![Alert Test]!>\n" + pv_alert_short + "(" + exsym + "acc=" + pv_acc + ")", alert.freq_once_per_bar)


もっと