
この戦略は,MACD指数を使用して市場動向を判断し,潜在的買入ポイントを探し,同時にRSI指数と組み合わせて,超買い超売り現象を確認する.MACD指数が買入/売却シグナルを発信するときに,RSIも同時に市場が超売り/超買い状態にあることを確認するときにのみ,取引シグナルを生成し,買入または売却を行う.この戦略は,偽信号を効果的にフィルターし,戦略の安定性を向上させる.
MACD指標は,速動平均 ((EMA) と遅動平均の差値で構成され,短期と長期の平均価格変化の傾向の違いを反映しています.この戦略では,速動線の周期は12日,遅動線の周期は26日です.
速線上でのスローラインを横切るときは金叉信号で,市場が上昇傾向に入ると表示する.速線下でのスローラインを横切るときは死叉信号で,市場が下降傾向に入ると表示する.
RSI指標は,市場の超買超売現象を反映している.この戦略では,RSIのパラメータ周期は14に設定されている.
RSI BELOW 30 when buyers outpaced sellers for an extended period suggests ASSET was OVERSOLD.
RSI ABOVE 70 when selling pressure outpaced buying pressure over the tracked timeline suggests ASSET was OVERBOUGHT.
RSIが30を下回ると,市場が超売り状態にあることを示し,RSIが70を超えると,市場が超買い状態にあることを示します.
MACD指数のみで取引信号を生成すると,ある種の偽信号が発生する.この戦略は,RSI指数フィルタリング信号を使用し,MACDが信号を発信すると同時に,RSIも市場の超買い超売り状態を確認するのみで,実際の取引信号を生成する.
具体的には,MACDが金叉信号を形成すると,RSI<=34,市場が超売り状態にあることを確認すると,買取信号が生じる.MACDが死叉信号を形成すると,RSI>=75,市場が超買い状態にあることを確認すると,売り信号が生じる.
この二重確認メカニズムにより,多くの不確実な取引シグナルをフィルターして,戦略の安定性と信頼性を向上させることができます.
この戦略は,MACDとRSIの2つの指標を組み合わせて,二重確認を行う.これは,偽信号の干渉を効果的に軽減し,信頼できない取引信号をフィルターして,信号の信頼性と安定性を向上させることができます.
MACDは量値指標として,市場の下落傾向を明確に判断できます.RSI指標の超買い超売り判断と組み合わせて,市場の重要な逆転点を正確に把握し,ポジションの入力信号を明確にすることができます.
この戦略のMACDとRSIのパラメータは,異なる周期と異なる品種に適応して最適化できる.最適化スペースは大きい.パラメータの調整によって,標的的な地理的な調整が可能で,より良い戦略効果が得られる.
この策略が使っているMACDやRSIなどの指標は,非常に典型的でよく使われる技術指標であり,容易に理解でき,コードの実装も非常にシンプルで直感的です.これはパラメータの調整と最適化に便利をもたらします.
この戦略は,偽の信号をフィルタリングして,単一の指標条件で利益を得ることができる取引機会を逃すため,比較的慎重な二重確認戦略を採用しています.
市場が急激に変化すると,MACDとRSIの両方の指標は判断を遅らせ,戦略が誤った取引シグナルを生成する損失を生成する可能性があります.
この戦略の効果は,MACDやRSIなどのパラメータの設定に大きく依存している.パラメータが正しく設定されていない場合,逆の取引信号を得ることが容易である.
価格停止または指標停止ルールを設定し,損失が一定程度に拡大したときに損失出場を停止し,単一の損失を効果的に制御できます.
MACDの快速・遅い線周期,RSIの超買い・超売り値などのパラメータを調整することで,パラメータ設定を最適化して,異なる周期および品種の市場特性をより適合させることができます.
株価指数,デジタル通貨,外貨,商品など,様々な品種で反テストを行い,戦略的に最も効果的となる品種を見つけることができます.
既存のMACDとRSIに基づいて,ストッチ,OBV,CCIなどの他の指標を導入し,複数の指標確認を実現し,信号品質をさらに向上させることができます.
この戦略は,MACD指標に基づいて市場のトレンド方向と取引信号を判断する.偽の信号をフィルターするために,RSI指標を追加し,超買い超売り現象を確認し,両者が同時に条件を満たす場合にのみ取引信号を生成する.この二重指標確認機構は,信号の質と安定性を効果的に向上させることができる.
戦略の効果は,パラメータ最適化,止損機構の適用,多指標確認などの改善手段によってさらに向上させることができる.この戦略は操作が簡単で,安定性が優れ,初心者の実践と最適化に適した量化取引戦略である.
/*backtest
start: 2023-11-17 00:00:00
end: 2023-12-17 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy(default_qty_type = strategy.percent_of_equity, default_qty_value = 25, pyramiding = 10, title="MACD crossover while RSI Oversold/Overbought", overlay=true, shorttitle="MACD Cross + RSI Oversold Overbought", initial_capital = 1000)
//MACD Settings
fastMA = input(title="Fast moving average", defval = 12, minval = 7) //7 16
slowMA = input(title="Slow moving average", defval = 26, minval = 7) //24 26
signalLength = input(9,minval=1) //9 6
//RSI settings
RSIOverSold = input(34 ,minval=1) //26
RSIOverBought = input(75 ,minval=1) //77
src = close, len = input(14, minval=1, title="Length")
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
wasOversold = rsi[0] <= RSIOverSold or rsi[1] <= RSIOverSold or rsi[2] <= RSIOverSold or rsi[3] <= RSIOverSold or rsi[4] <= RSIOverSold or rsi[5] <= RSIOverSold
wasOverbought = rsi[0] >= RSIOverBought or rsi[1] >= RSIOverBought or rsi[2] >= RSIOverBought or rsi[3] >= RSIOverBought or rsi[4] >= RSIOverBought or rsi[5] >= RSIOverBought
[currMacd,_,_] = macd(close[0], fastMA, slowMA, signalLength)
[prevMacd,_,_] = macd(close[1], fastMA, slowMA, signalLength)
signal = ema(currMacd, signalLength)
crossoverBear = cross(currMacd, signal) and currMacd < signal ? avg(currMacd, signal) : na
crossoverBull = cross(currMacd, signal) and currMacd > signal ? avg(currMacd, signal) : na
plotshape(crossoverBear and wasOverbought , title='MACD-BEAR', style=shape.triangledown, text='overbought', location=location.abovebar, color=orange, textcolor=orange, size=size.tiny)
plotshape(crossoverBull and wasOversold, title='MACD-BULL', style=shape.triangleup, text='oversold', location=location.belowbar, color=lime, textcolor=lime, size=size.tiny)
// Configure backtest start date with inputs
startDate = input(title="Start Date",
defval=8, minval=1, maxval=31)
startMonth = input(title="Start Month",
defval=3, minval=1, maxval=12)
startYear = input(title="Start Year",
defval=2021, minval=1800, maxval=2100)
afterStartDate = (time >= timestamp(syminfo.timezone,
startYear, startMonth, startDate, 0, 0))
if (afterStartDate==true)
posSize = abs(strategy.position_size)
strategy.order("long", strategy.long, when = crossoverBull and wasOversold)
strategy.order("long", long=false, qty=posSize/3, when = crossoverBear and wasOverbought)