多因子主導のトレンド・トレーディング戦略

作者: リン・ハーンチャオチャン開催日:2024年01月17日 (火) 14:02:22
タグ:

img

概要

この戦略は,動向平均収束差異 (MACD) 指標とストコスタスティック相対強度指数 (Stoch RSI) 指標を組み合わせて,トレンドが上昇するときにロング,トレンドがダウンするときにショートで,市場のトレンド方向性を決定します.これはトレンド取引戦略カテゴリーに属します.

戦略の論理

この戦略は,市場傾向の方向性を決定するためにMACDおよびストックRSI指標を使用します.

MACDインジケーターは,短期の移動平均値と長期間の移動平均値の収束と離散を反映する,速いEMA線,遅いEMA線,その間の差で構成される.速い線がスローラインを越えると,それは購入信号である.速い線がスローラインを下回ると,それは販売信号である.

ストックRSIインジケーターは,RSIとストックインジケーターの両方の強みを組み合わせて,市場の過買いと過売値を示します.ストックRSIがストックRSI信号線よりも大きいとき,それは購入信号です.信号線よりも低いとき,それは販売信号です.

この戦略は,市場動向を決定するために,毎日と4時間のタイムフレームでMACDとストックRSIを使用する.両方の指標が日々のチャートと4時間のチャートで購入信号を生成すると,ロングに行く.両方の信号が販売信号を生成すると,ショートに行く.これは誤った信号を効果的にフィルタリングし,信頼性を向上させる.

利点

  1. 市場の動きを判断する双重要素を組み合わせることで 誤った信号を効果的にフィルターし,信号の精度を向上させることができます

  2. 高低時間枠 (毎日と4時間) で信号の検証は,鞭打ちされるのを避ける

  3. 動向を踏まえて 市場が不安定になるのを防ぐ

  4. シンプルで明快な戦略論理,理解し実行しやすい

リスク と 解決策

  1. トレンド逆転ポイントを効果的に決定できない場合,ストップ損失が引き起こす可能性があります.
  • パラメータを最適化するか,判断するために他の指標を追加
  1. 単一の契約は,市場における体系的なリスクを多様化させることはできない
  • 他の契約や株式を多元化するために増やす
  1. 突然の大事件の影響を判断できません
  • リスク認識を高めるために基礎分析を組み合わせる

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

  1. 入口と出口点を最適化するためにMACDとストックRSIパラメータを調整する

  2. 利潤をロックするために後続停止戦略を追加

  3. 取引リスクごとにコントロールにポジションサイズを追加する

  4. 信号の正確性を向上させるために判断するより多くの要素を追加します

  5. パラメータをダイナミックに最適化するために機械学習方法を使用する

概要

この戦略は,デュアルファクターモデルを通じてトレンド方向を決定し,タイムフレーム全体でシグナルを検証する.これは,一定のリスク管理能力とエラーの余地のある,比較的安定した信頼性の高いトレンドフォロー戦略である.パラメータ最適化,ストップ損失,ポジションサイズ化および他のモジュールを追加することで,そのパフォーマンスをさらに向上させることができる.


/*backtest
start: 2024-01-09 00:00:00
end: 2024-01-16 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title='[RS]Khizon (UGAZ) Strategy V0', shorttitle='K', overlay=false, pyramiding=0, initial_capital=100000, currency=currency.USD)
//  ||  Inputs:
macd_src = input(title='MACD Source:',  defval=close)
macd_fast = input(title='MACD Fast Length:',  defval=12)
macd_slow = input(title='MACD Slow Length:',  defval=26)
macd_signal_smooth = input(title='MACD Signal Smoothing:',  defval=9)
srsi_src = input(title='SRSI Source:',  defval=close)
srsi_rsi_length = input(title='SRSI RSI Length:',  defval=14)
srsi_stoch_length = input(title='SRSI Stoch Length:',  defval=14)
srsi_smooth = input(title='SRSI Smoothing:',  defval=3)
srsi_signal_smooth = input(title='SRSI Signal Smoothing:',  defval=3)
//  ||  Strategy Inputs:
trade_size = input(title='Trade Size in USD:', type=float, defval=1)
buy_trade = input(title='Perform buy trading?', type=bool, defval=true)
sel_trade = input(title='Perform sell trading?', type=bool, defval=true)
//  ||  MACD(close, 12, 26, 9):     ||---------------------------------------------||
f_macd_trigger(_src, _fast, _slow, _signal_smooth)=>
    _macd = ema(_src, _fast) - ema(_src, _slow)
    _signal = sma(_macd, _signal_smooth)
    _return_trigger = _macd >= _signal ? true : false
//  ||  Stoch RSI(close, 14, 14, 3, 3)  ||-----------------------------------------||
f_srsi_trigger(_src, _rsi_length, _stoch_length, _smooth, _signal_smooth)=>
    _rsi = rsi(_src, _rsi_length)
    _stoch = sma(stoch(_rsi, _rsi, _rsi, _stoch_length), _smooth)
    _signal = sma(_stoch, _signal_smooth)
    _return_trigger = _stoch >= _signal ? true : false
//  ||-----------------------------------------------------------------------------||
//  ||-----------------------------------------------------------------------------||
//  ||  Check Directional Bias from daily timeframe:
daily_trigger = security('NGAS', 'D', f_macd_trigger(macd_src, macd_fast, macd_slow, macd_signal_smooth) and f_srsi_trigger(srsi_src, srsi_rsi_length, srsi_stoch_length, srsi_smooth, srsi_signal_smooth))
h4_trigger = security('NGAS', '240', f_macd_trigger(macd_src, macd_fast, macd_slow, macd_signal_smooth) and f_srsi_trigger(srsi_src, srsi_rsi_length, srsi_stoch_length, srsi_smooth, srsi_signal_smooth))

plot(title='D1T', series=daily_trigger?0:na, style=circles, color=blue, linewidth=4, transp=65)
plot(title='H4T', series=h4_trigger?0:na, style=circles, color=navy, linewidth=2, transp=0)

sel_open = sel_trade and not daily_trigger and not h4_trigger
buy_open = buy_trade and daily_trigger and h4_trigger
sel_close = not buy_trade and daily_trigger and h4_trigger
buy_close = not sel_trade and not daily_trigger and not h4_trigger
strategy.entry('sel', long=false, qty=trade_size, comment='sel', when=sel_open)
strategy.close('sel', when=sel_close)
strategy.entry('buy', long=true, qty=trade_size, comment='buy', when=buy_open)
strategy.close('buy', when=buy_close)


もっと