
マドリッド帯状RSI強化型多時枠EMAトレンド戦略は,移動平均帯状システム ((Madrid Ribbon) と相対的に強い指標 ((RSI)) のフィルターを巧みに組み合わせた総合的な量化取引システムで,トレンドの識別と取引の実行のための二重確認の仕組みを提供します.この戦略の核心は,複数の周期で異なる指標移動平均 (((5から90) の監視によって形成された構造帯状のEMAであり,同時に偽の信号を効果的に減らすためにフィルター条件としてRSI指標を導入します.戦略には,自動取引機能が組み込まれています.
この戦略の核心原則は,複数のタイムフレームの移動平均のクラスターの分析とRSI指標のフィルタリング作用に基づいています.
多時間枠移動平均帯状システム策略: 5 から 90 周期の 18 つの移動平均を構築し, 100 周期の基準線と比較します. 各移動平均は,その変化の方向と基準線に対する位置に応じて,色で識別されます.
トレンドの強さを量化戦略:トレンドの強さを測定する方法は,緑の移動平均 (上昇) と赤の移動平均 (下降) を計算することです.
RSIフィルター偽信号を減らすために,RSI指標をフィルター条件として導入する戦略:
リスク管理機構ストップ・ストップ・ロスのパラメータは,%を基に設定されています.
資金管理: 策略は,ユーザが初期投資額を設定し,現在の価格に基づいてポジションの規模を自動的に計算することを可能にします.
複数の認証メカニズム: 移動平均線帯状システムとRSI指標を組み合わせることで,戦略は複数の確認メカニズムを提供し,誤ったシグナルの可能性を大幅に減少させる.移動平均群とRSIが同時に条件を満たす場合,シグナルの信頼性が大きく向上する.
トレンドの強さを量化: 単純な交差策略とは異なり,この策略は,異なる色の移動平均の数を計算してトレンドの強さを量化し,取引決定をより客観的でデータ主導にします.
ビジュアル取引シグナル戦略: 背景の色の変化と形状のマークによって,グラフにシグナルを明確に表示し,トレーダーが潜在的取引機会を直感的に識別できるようにする.
内部リスク管理: 戦略は,最大利益と損失の明確な設定と,リスクの穴を効果的に制御するストップ・ストップ・メカニズムをデフォルトで統合しています.
適応性が高い戦略は,ユーザーがEMAまたはSMAを使用する選択を許容し,異なる市場状況に応じて柔軟に調整することができます.EMAは最近の価格変動に敏感であり,SMAは,異なる市場条件に適した異なる設定で,より滑らかです.
市場状況の全面的な監視18の異なる周期の移動平均を監視することで,戦略は市場動向を完全に捉え,単一の時間枠分析がもたらす可能性のある盲点を減らすことができます.
トレンドの逆転が遅れた: 戦略は複数の移動平均に依存しているため,トレンドが急速に逆転すると,反応遅れが生じ,入場または出場のタイミングが理想的ではない. このリスクに対して,より短い周期の指標を追加したり,RSIパラメータを調整したりして,戦略の市場変化への感受性を高めることが考えられます.
フィルタリング条件が厳格で チャンスを逃す:RSIフィルター条件の設定はより厳格である ((<30と>70),いくつかの潜在的な取引機会を逃す可能性があります.ユーザーは,特定の市場の特徴に応じてRSIの値を適切に調整することができます.例えば,購入条件をRSI<40に緩和し,販売条件をRSI>60に緩和します.
固定ストップのストップ損失パーセントの限界戦略: 固定パーセントのストップ・ロスの設定を使用します.これは,異なる変動率の市場で柔軟性が不足している可能性があります. ストップ・ロスのレベルを,資産の平均実際の変動幅 (ATR) の動向に応じて調整することをお勧めします.
横軸リスク: 市場の横横整理段階では,移動平均は頻繁に交差し,シグナル混乱を引き起こす可能性があります. 追加の横横検出機構 (ADX指数など) を追加することで,低波動環境で過剰取引を避けることができます.
パラメータ感度策略性能は,パラメータ選択 (移動平均周期やRSI長さなど) に敏感であり,パラメータ選択が不適切である場合,策略の不良なパフォーマンスを引き起こす可能性があります.実用化する前に十分なパラメータ最適化と反テストを行うことが推奨されています.
ダイナミック・ストップ・ストップ・メカニズム固定パーセントのストップ・ストップ・損失設定をATR指標に置き換えて,市場の波動性変化によりよく適応できます.例えば,ストップ・損失を1.5に設定できます.*ATR 止まる 1*ATRはリスク管理の柔軟性や市場適応性を向上させるためのものです.
トレンド強度フィルターを追加:トレンドの強さを測定するためにADX指標を導入し,ADX>25の強いトレンド環境でのみ取引し,弱気や横断市場で過剰な偽信号を避ける.
RSIパラメータを最適化する:現在の戦略は,標準の14サイクルRSIを使用し,特定の資産特性と時間枠に応じてRSIサイクルを調整することを検討することができます.または,偽信号を減らすために二重RSIシステム (例えば,短周期と長周期RSIを同時にチェックする) を使用することができます.
交付量確認の導入:取引量分析の次元を追加し,信号が発生する時に十分な市場参加のサポートが確保され,取引信号の信頼性が向上する.例えば,買取信号が発生する時に取引量がN日平均より高いことを要求することができる.
ポジションの動的調整を実現する動的にトレンドの強さ (緑色または赤色の移動平均の数) に応じてポジションの規模を調整し,強度のトレンドでポジションを増やし,弱いトレンドでポジションを減らして,資金利用効率を最適化します.
市場環境のフィルターに: 波動率指標 (VIXやATRなど) を使って現在の市場環境を検知し,高度な波動性のある環境で戦略パラメータを調整するか,取引を一時停止し,極端な市場条件下でのリスクを低減する.
マドリード帯状RSI強化型多時間枠EMAトレンド戦略は,移動平均帯状構造とRSIフィルタリング機構を組み合わせて,トレーダーに強力なトレンド識別と取引実行ツールを提供する機能豊富な定量取引システムである.戦略の核心的な優点は,複数の確認機構とトレンドの強度測定能力であり,取引決定をより客観的でデータ主導にします.
策略はトレンド市場で良好なパフォーマンスを発揮していますが,横軸市場と急速な逆転環境では課題に直面することがあります. ダイナミックなストップ・ストップ・損失,トレンド強度フィルター,取引量確認などの最適化措置を導入することにより,策略の安定性と適応性をさらに向上させることができます.
この戦略は,合理的なパラメータ調整とリスク管理により,様々な市場環境で高確率の取引機会を見つけることができる中長期のトレンドトレーダーに特に適しています.しかし,いかなる取引戦略も,トレーダーのリスク好みと投資目標と一致する必要があります.
/*backtest
start: 2024-03-24 00:00:00
end: 2025-03-23 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BNB_USDT"}]
*/
//@version=5
strategy("Madrid Ribbon Strategy with Backtesting", shorttitle="Madrid Ribbon Strat", overlay=true, default_qty_type=strategy.cash, default_qty_value=100000)
// Inputs
i_exp = input.bool(true, title="Use Exponential MA")
wallet_balance = input.float(100000, title="Starting Wallet Balance", minval=1000)
// RSI Settings
rsi_length = input.int(14, title="RSI Length")
rsi = ta.rsi(close, rsi_length)
// Profit Target & Stop Loss (%)
long_take_profit_perc = input.float(0.5, title="Long Take Profit (%)") / 100 // 0.5%
long_stop_loss_perc = input.float(1.0, title="Long Stop Loss (%)") / 100 // 1%
short_take_profit_perc = input.float(0.5, title="Short Take Profit (%)") / 100 // 0.5%
short_stop_loss_perc = input.float(1.0, title="Short Stop Loss (%)") / 100 // 1%
// Source
src = close
// Compute Moving Averages
ma05 = i_exp ? ta.ema(src, 5) : ta.sma(src, 5)
ma10 = i_exp ? ta.ema(src, 10) : ta.sma(src, 10)
ma15 = i_exp ? ta.ema(src, 15) : ta.sma(src, 15)
ma20 = i_exp ? ta.ema(src, 20) : ta.sma(src, 20)
ma25 = i_exp ? ta.ema(src, 25) : ta.sma(src, 25)
ma30 = i_exp ? ta.ema(src, 30) : ta.sma(src, 30)
ma35 = i_exp ? ta.ema(src, 35) : ta.sma(src, 35)
ma40 = i_exp ? ta.ema(src, 40) : ta.sma(src, 40)
ma45 = i_exp ? ta.ema(src, 45) : ta.sma(src, 45)
ma50 = i_exp ? ta.ema(src, 50) : ta.sma(src, 50)
ma55 = i_exp ? ta.ema(src, 55) : ta.sma(src, 55)
ma60 = i_exp ? ta.ema(src, 60) : ta.sma(src, 60)
ma65 = i_exp ? ta.ema(src, 65) : ta.sma(src, 65)
ma70 = i_exp ? ta.ema(src, 70) : ta.sma(src, 70)
ma75 = i_exp ? ta.ema(src, 75) : ta.sma(src, 75)
ma80 = i_exp ? ta.ema(src, 80) : ta.sma(src, 80)
ma85 = i_exp ? ta.ema(src, 85) : ta.sma(src, 85)
ma90 = i_exp ? ta.ema(src, 90) : ta.sma(src, 90)
ma100 = i_exp ? ta.ema(src, 100) : ta.sma(src, 100)
// Function for ribbon color
maColor(_ma, _maRef) =>
diffMA = ta.change(_ma)
resultColor = diffMA >= 0 and _ma > _maRef ? color.lime :
diffMA < 0 and _ma > _maRef ? color.maroon :
diffMA <= 0 and _ma < _maRef ? color.red :
diffMA >= 0 and _ma < _maRef ? color.green : color.gray
resultColor
// Count Green and Red Ribbons
count_green = 0
count_red = 0
mas = array.new_float(18)
array.set(mas, 0, ma05)
array.set(mas, 1, ma10)
array.set(mas, 2, ma15)
array.set(mas, 3, ma20)
array.set(mas, 4, ma25)
array.set(mas, 5, ma30)
array.set(mas, 6, ma35)
array.set(mas, 7, ma40)
array.set(mas, 8, ma45)
array.set(mas, 9, ma50)
array.set(mas, 10, ma55)
array.set(mas, 11, ma60)
array.set(mas, 12, ma65)
array.set(mas, 13, ma70)
array.set(mas, 14, ma75)
array.set(mas, 15, ma80)
array.set(mas, 16, ma85)
array.set(mas, 17, ma90)
for i = 0 to array.size(mas) - 1
ma = array.get(mas, i)
col = maColor(ma, ma100)
count_green += col == color.lime or col == color.green ? 1 : 0
count_red += col == color.red or col == color.maroon ? 1 : 0
// Buy/Sell Conditions
buy_signal = count_green >= 13
sell_signal = count_red >= 9
// RSI Filtering
rsi_buy = buy_signal and rsi < 30
rsi_sell = sell_signal and rsi > 70
// Calculate Entry, Take Profit & Stop Loss for Long and Short
entry_price = close
long_take_profit = entry_price * (1 + long_take_profit_perc) // +0.5%
long_stop_loss = entry_price * (1 - long_stop_loss_perc) // -1%
short_take_profit = entry_price * (1 - short_take_profit_perc) // -0.5%
short_stop_loss = entry_price * (1 + short_stop_loss_perc) // +1%
// Backtesting Orders
if rsi_buy
strategy.entry("Buy", strategy.long, qty=wallet_balance / close)
strategy.exit("Long Exit", from_entry="Buy", limit=long_take_profit, stop=long_stop_loss)
alert("📈 Buy Signal! Entering long trade at " + str.tostring(entry_price), alert.freq_once_per_bar_close)
if rsi_sell
strategy.entry("Sell", strategy.short, qty=wallet_balance / close)
strategy.exit("Short Exit", from_entry="Sell", limit=short_take_profit, stop=short_stop_loss)
alert("📉 Sell Signal! Entering short trade at " + str.tostring(entry_price), alert.freq_once_per_bar_close)
// Highlight Chart Background Based on Ribbon Counts
bgcolor(count_green >= 13 ? color.new(color.green, 90) : count_red >= 9 ? color.new(color.red, 90) : na, title="Ribbon Trend Highlight")
// Plot "B" when Buy Signal is active
plotshape(rsi_buy, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal", text="B")
// Plot "S" when Sell Signal is active
plotshape(rsi_sell, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal", text="S")
// Plot the Madrid Ribbon (all MAs)
plot(ma05, color=maColor(ma05, ma100), title="MA05", linewidth=1)
plot(ma10, color=maColor(ma10, ma100), title="MA10", linewidth=1)
plot(ma15, color=maColor(ma15, ma100), title="MA15", linewidth=1)
plot(ma20, color=maColor(ma20, ma100), title="MA20", linewidth=1)
plot(ma25, color=maColor(ma25, ma100), title="MA25", linewidth=1)
plot(ma30, color=maColor(ma30, ma100), title="MA30", linewidth=1)
plot(ma35, color=maColor(ma35, ma100), title="MA35", linewidth=1)
plot(ma40, color=maColor(ma40, ma100), title="MA40", linewidth=1)
plot(ma45, color=maColor(ma45, ma100), title="MA45", linewidth=1)
plot(ma50, color=maColor(ma50, ma100), title="MA50", linewidth=1)
plot(ma55, color=maColor(ma55, ma100), title="MA55", linewidth=1)
plot(ma60, color=maColor(ma60, ma100), title="MA60", linewidth=1)
plot(ma65, color=maColor(ma65, ma100), title="MA65", linewidth=1)
plot(ma70, color=maColor(ma70, ma100), title="MA70", linewidth=1)
plot(ma75, color=maColor(ma75, ma100), title="MA75", linewidth=1)
plot(ma80, color=maColor(ma80, ma100), title="MA80", linewidth=1)
plot(ma85, color=maColor(ma85, ma100), title="MA85", linewidth=1)
plot(ma90, color=maColor(ma90, ma100), title="MA90", linewidth=1)
plot(ma100, color=maColor(ma100, ma100), title="MA100", linewidth=2)