マルチEMAとRSIトレンドフォロー戦略

作者: リン・ハーンチャオチャン,日付: 2024-03-01 13:26:24
タグ:

img

概要

この記事では,主に複数の指数関数移動平均値 (EMA) と相対強度指数 (RSI) をベースに Ravikant_sharma が開発した定量的な取引戦略を分析しています.この戦略は価格動向を特定し,異なるサイクルとRSIの値を持つ EMA を横断してエントリーと出口点を決定します.

戦略原則

インディケーター計算

この戦略は,9日,21日,51日,100日および200日線を含む異なる期間の5つのEMAを使用する.コードでは最初の4つのEMAのみがグラフ化されている.RSIパラメータは14に設定されている.

入国条件

購入前に次の条件の1つを満たす必要があります.

  1. 9日間のEMAは21日間のEMAを上回る
  2. 9日間のEMAは51日間のEMAを上回る
  3. 51日間のEMAは100日間のEMAを下回る

同時に,RSIは65以上で 強い上昇傾向を示します

出口条件

ポジションを閉じる前に,次の条件の1つを満たす必要があります.

  1. 9日間のEMAは51日間のEMAを下回り,トレンド逆転を示唆する
  2. 閉じる価格は入場価格の125%を超え,利益目標に達
  3. RSIは40を下回る 逆転を警告する
  4. 閉じる価格が入場価格の98%を下回る

利点分析

典型的な傾向であり,次の強みを持つ戦略をたどる.

  1. EMAのクロスオーバーを使用して,効果的なトレンド追跡のためにトレンド方向を決定する
  2. 異なる期間の EMA を組み合わせることで,より信頼性の高いトレンド信号が特定されます.
  3. RSIフィルターは,レンジ・バインド市場における偽信号を回避する.
  4. 利益とストップ・ロスの設定は利益と管理リスクを固定します

リスク と 解決策

リスクはあります

  1. 範囲限定市場では不確実なシグナルが頻繁に発生し,過剰取引を引き起こす可能性があります. EMA期間の調整やRSIフィルター条件が適用できます.
  2. EMAクロスオーバー信号は急激な逆転時に遅れ,間に合わずに終了することがあります.他の指標は,長/短信号強度を決定するために追加することができます.
  3. 不適切な利益目標とストップ損失設定は,早期ストップ損失または利益を間に合わない状態につながります.パラメータは,異なる製品と市場環境に応じて最適化する必要があります.

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

この戦略は,次の方法でさらに最適化できます.

  1. 異なる製品に対するパラメータ最適化
  2. 多要素モデルを構築するために他の技術指標を追加する
  3. 信号品質を判断するための機械学習アルゴリズムを組み込む
  4. 感情 の 罠 を 避ける ため に 感情 分析 を 組み合わせる
  5. 利回り/ストップ・ロスの戦略をテストし,最適な方法を見つける

結論

結論として,これは全体的に信頼性があり,実行が容易なトレンドフォロー戦略です.トレンド方向のEMAクロスオーバーと偽信号のRSIフィルターにより,良いバックテスト結果は,安定した利益を得るためにさらなるパラメータとモデル最適化のための堅固な基盤を提供します.しかし,トレーダーは依然としてリスクをもたらす急激な逆転や不適切なパラメータに注意する必要があります.


/*backtest
start: 2024-01-30 00:00:00
end: 2024-02-29 00:00:00
period: 3h
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/
// © Ravikant_sharma

//@version=5

strategy('new', overlay=true)

start = timestamp(1990, 1, 1, 0, 0)
end = timestamp(2043, 12, 12, 23, 59)
ema0 = ta.ema(close, 9)
ema1 = ta.ema(close, 21)
ema2 = ta.ema(close, 51)
ema3 = ta.ema(close, 100)
ema4 = ta.ema(close, 200)

rsi2=ta.rsi(ta.sma(close,14),14)
plot(ema0, '9', color.new(color.green, 0))
plot(ema1, '21', color.new(color.black, 0))
plot(ema2, '51', color.new(color.red, 0))
plot(ema3, '200', color.new(color.blue, 0))   

//plot(ema4, '100', color.new(color.gray, 0)) 


//LongEntry = (  ta.crossover(ema0,ema3)  or  ta.crossover(ema0,ema2) or  ta.crossunder(ema2,ema3) ) // ta.crossover(ema0,ema1) //
LongEntry=false
if ta.crossover(ema0,ema1) 
    if rsi2>65
        LongEntry:=true
if ta.crossover(ema1,ema2)
    if rsi2>65
        LongEntry:=true
        
LongExit =  ta.crossunder(ema0,ema2) or close >(strategy.position_avg_price*1.25) or rsi2 <40 or close < (strategy.position_avg_price*0.98)



if time >= start and time <= end 
    if(LongEntry and rsi2>60)
        strategy.entry('Long', strategy.long, 1)
    if(LongExit)
        strategy.close('Long') 



もっと