
この戦略は,移動平均線,相対強度指数,商品チャネル指数3つの指標を融合させ,より完全なトレンド追跡と指標組み合わせ戦略を形成する.その基本的考え方は,トレンド指標がトレンド形成を確認した後,反転信号指標を使用してより正確な入場を実現することである.
平均価格をhl2で計算する.
14周期のCCI指標を計算し,大レベルトレンドを判断する.CCIが0より大きい時は上昇傾向,0より小さい時は下降傾向である.
14周期RSI指標の快線と50周期RSI指標の慢線を計算する. 快線上には慢線を横切る時に買入シグナルが生じ,快線下には慢線を横切る時に売出シグナルが生じます.
CCI指標が同時にRSI指標の信号方向に合致する時のみ,実際の取引シグナルが生じます.つまり,CCIが0より大きいとRSIの快線で慢線を横切るときにのみ購入し,CCIが0より小さいとRSIの快線の下の慢線を横切るときにのみ販売します.
価格が14周期平均線hl2より高くまたは低くなっているかどうかを計算することによって詳細な動きを判断するのに役立つので,偽の突破を回避します. 14周期平均線hl2より高く,RSI指標の上を通るときにのみ買い信号が生じ, 14周期平均線hl2より低く,RSI指標下を通るときにのみ売り信号が生じます.
この戦略は,トレンド判断と反転信号を融合させ,トレンドが始まってすぐに入場し,反転信号の指標によって退出点を判断することで,より良いパフォーマンスを得ることができる.
商品チャネル指数は,大レベルのトレンドを正確に判断し,間違った取引方向の選択を避けます.
相対強度指数の快慢線交差は,示図信号としてより安定し,信頼性があり,移動平均の滞り問題を回避し,価格の逆転を間に合うように捉えることができる.
価格と中間値の大きさを比較することで,偽突破による誤信号をさらにフィルターすることができます.
この戦略は全体的に安定性があり,強気なトレンドの中で顕著に表れている.
この戦略は取引品種に敏感であり,特定の品種に最適化パラメータを必要とします. 盲目的にすべての品種に適用された場合,不安定なパフォーマンスを引き起こす可能性があります.
14周期平均線や50周期平均線などの戦略パラメータの設定は,異なる市場に応じて調整する必要がある.パラメータが正しく設定されていない場合も,不良パフォーマンスを引き起こす.
CCIの判断だけでは,大レベルのトレンドの方向性は十分に完ぺきではないので,一定の遅れがあるでしょう.これはさらに最適化する必要があります.
逆転信号指標の組み合わせが多く,ある程度の過度最適化がある可能性がある.この点も厳格な反測検査を経なければならない.
DMI,ADXなど,より正確なトレンド判断を可能にする指標を追加することも考えられます.
ストップ・ロジックを増やす.例えば,反転信号が出た後に,価格が再び一定幅の回調を起こすと,ストップ・ロジックを退出して,損失を減らすことを考えることができる.
パラメータを最適化し,特定の取引品種に適したものにする.例えば,スローライン周期パラメータを拡大するか,中価計算方法を調整するなど.
パラメータ最適化パルフレットを構築し,異なる品種に対して最適のパラメータを選択することで,戦略の適用性を大幅に向上させることができます.
量能指標を追加し,量能不足時に誤導信号を生じないようにする.
この戦略は全体的な枠組みが整っており,トレンド判断と逆転指標を融合させ,理論的には優れたパフォーマンスを得ることができる。しかし,実際のアプリケーションでは,取引品種に合わせてパラメータとモデルの最適化が必要であり,過適合のリスクを低減する。厳格な統計検査を経て,推奨に値する安定策になる見通しがある。
/*backtest
start: 2022-12-06 00:00:00
end: 2023-12-12 00:00:00
period: 1d
basePeriod: 1h
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/
// © SuchitRaju
//@version=4
strategy("MA RSI CCI")
price_up = if(close > open and close > sma(hl2,14))
1
else
0
price_down = if(open > close and close < sma(hl2,14))
1
else
0
//
cci_indicator = cci(hl2, 14)
// plot(cci_indicator, color=color.blue)
rsi_slow = sma(rsi(close, 14), 50)
// plot(rsi_slow, color=color.red)
rsi_fast = rsi(close, 14)
// plot(rsi_fast, color=color.green)
isCrossover = if(rsi_fast > rsi_slow and cci_indicator > 0)
1
else
0
// plotshape(isCrossover, style = shape.arrowup, color = color.green, size = size.huge)
isCrossunder = if(rsi_fast < rsi_slow and cci_indicator < 0)
1
else
0
// plotshape(isCrossunder, style = shape.arrowup, color = color.red, size = size.huge)
// start = timestamp("GMT-5", 2016,9,1,0,0)
// end = timestamp("GMT-5", 2017,9,1,0,0)
// strategy.entry("Long", strategy.long, 1, when = isCrossover and price_up)
// strategy.entry("Short", strategy.short, 1, when = isCrossunder and price_down)
// strategy.close("Long", when = isCrossunder and price_down)
// strategy.close("Short", when = isCrossover and price_up)
strategy.entry("Long", strategy.long, 1, when = isCrossover)
strategy.entry("Short", strategy.short, 1, when = isCrossunder)
strategy.close("Long", when = isCrossunder)
strategy.close("Short", when = isCrossover)