改善されたRSIMACD移動平均戦略

作者: リン・ハーンチャオチャン, 日付: 2024-01-05 16:11:23
タグ:

img

概要

これは,RSI,MACDおよび移動平均を活用した組み合わせ戦略である.入口点を決定する際に,RSIからの過剰購入/過剰販売の信号,MACDの感度,移動平均の指標効果を組み込む.

戦略の論理

戦略は主に次の4つの条件を考慮し,長期入国を決定する.

  1. MACDヒストグラムは,設定されたロングエントリーレベルより大きい.
  2. RSIが50を超えると 過剰購入状態を示します
  3. 短期EMAは長期EMAを横断し,黄金十字を形成する.
  4. 閉じる価格は長期EMAを突破し,長期EMAとATRストップ損失範囲を上回る.

次の2つの出口条件が満たされた場合,ストップロスのために戦略はポジションを閉じる.

  1. MACDヒストグラムが設定されたストップ・ロスのレベルより小さい場合
  2. 短期EMAは長期EMAを下回り,死十字を形成する.

この戦略は,損失を及ばせて止めて,利益を得たり 引き下げたりする際の大きな損失を回避します.

利点分析

この戦略の最大の利点は,各指標のメリットを最大限に活用する指標の組み合わせにあります.

  1. RSIの適用は,レンジ・バインド市場での繰り返しポジション開設による取引手数料損失を回避する.

  2. MACDヒストグラム指標の感度により,曲線点のタイミングが把握できます.

  3. 移動平均は短期的な市場騒音をフィルタリングし,指標効果を完全に発揮します.

リスク と 解決策

この戦略の主なリスクは以下のとおりです.

  1. 高回転リスク.トレンドフォロー戦略のような移動平均の最大のリスクは,トレンド逆転によって引き起こされる大きな引き下げです.これはポジションサイズ化,ストップ損失などによって積極的に制御できます.

  2. パラメータ最適化における困難.マルチインジケーター組み合わせ戦略は,パラメータ設定と最適化においてより困難である.ウォークフォワード,遺伝アルゴリズムなどの方法が最適化されたパラメータに採用される.

強化の方向性

この戦略は,次の側面においてさらに最適化することができる.

  1. 誤った信号をさらに避けるために追加のフィルターを増やす.例えば,ボリューム,波動性指標などと組み合わせる.

  2. テストパラメータの違いにより多くの製品に適合します.より多くの品種に適応するためにパラメータを調整します.

  3. 移動平均パラメータの設定を最適化する.様々な長度パラメータの違いをテストする.

  4. アダプティブ・ムービング・メアダを調査し 市場体制に基づいて 異なるパラメータセットを切り替える

結論

結論として,この戦略は,平行平均とトレンドフォロー戦略の典型的な最適化されたバージョンである.これは,タイムエントリーとストップ損失の側面においてMACDとRSIのような主流指標の強みを吸収する.次のステップは,パラメータ最適化やリスク管理などの観点から改善して,戦略をより堅牢にし,より多くの製品に適応できるようにし,その結果,より高い安定性をもたらす可能性がある.


/*backtest
start: 2022-12-29 00:00:00
end: 2024-01-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Improved RSI MACD Strategy with Moving Averages", overlay=true)

// Inputs
src = input(close, title="RSI Source")

// RSI Settings
lengthRSI = input.int(14, minval=1)

// Stop Loss Settings
stopLossPct = input.float(0.09, title="Stop Loss Percentage")
takeProfitPct = input.float(0.15, title="Take Profit Percentage")

// MACD Settings
fastlen = input(12)
slowlen = input(26)
siglen = input(9)

// Strategy Settings
longEntry = input(0, title="Long Entry Level")
exitLevel = input(0, title="Exit Level")

// EMA Settings
emaShortLength = input(8, title="Short EMA Length")
emaLongLength = input(21, title="Long EMA Length")

atrMultiplier = input.float(2, title="atrMultiplier")
atrLength = input.int(20, title="atrLength")

// Indicators
rsi1 = ta.rsi(src, lengthRSI)
[macd, signal, hist] = ta.macd(src, fastlen, slowlen, siglen)

// Calculate EMAs
emaShort = ta.ema(src, emaShortLength)
emaLong = ta.ema(src, emaLongLength)

// Calculate ATR
atr = ta.atr(atrLength)

// Variables
var bool canEnterLong = na

// Strategy conditions
longCondition = hist > longEntry and rsi1 > 50 and emaShort > emaLong and close > emaLong + atrMultiplier * atr

// Entries and Exits
if hist < exitLevel and emaShort < emaLong
    canEnterLong := true
    strategy.close("Long")
    
// Store last entry price
var lastEntryPrice = float(na)
var lastEntryPrice2 = float(na)
if longCondition
    strategy.entry("Long", strategy.long)
    canEnterLong := false
    lastEntryPrice := close
if lastEntryPrice < close
    lastEntryPrice := close
// Calculate Stop Loss and Take Profit Levels based on last entry price
stopLossLevel = lastEntryPrice * (1 - stopLossPct)

// Check for stop loss and take profit levels and close position if triggered
if (strategy.position_size > 0)
    last_buy = strategy.opentrades[0]
    if (close < stopLossLevel)
        strategy.close("Long", comment="Stop Loss Triggered")
    if (close * (1 - takeProfitPct) > strategy.opentrades.entry_price(strategy.opentrades - 1) )
        strategy.close("Long", comment="Take Profit Triggered")

もっと