
この戦略の核心思想は,異なる周期のRSI指標を組み合わせて,現在の価格領域を判断し,より大きな周期のRSI指標が突破すると見つかると,より小さな周期で相応の買取または販売操作を行うことです.この戦略は,異なる周期の技術指標の優位性を利用して,複数の時間次元を通して現在の価格の相対的な価値を判断し,優越したエントリーポイントを探します.
この戦略は,主に以下のステップで価格領域を判断し,取引機会を探します.
例えば,日線RSIが新高を突破したときに,我々は現在多頭状態にあると判断し,日線RSIが新低を突破したときに,我々は現在空頭状態にあると判断し,この2つのケースでは,それぞれ5分線で買取と売却の操作を行います.
この戦略は,従来の一つの時間周期にのみ焦点を当てた戦略に比べて,以下の利点があります.
現在の価格の相対価値をより正確に評価する.日線などの大周期指標は,短期市場のノイズをフィルターして,大周期の傾向と価値領域を判断する.
異なる時間周期指標を組み合わせると,信号の信頼性が向上する.単一の周期指標のみに依存すると,誤信号が発生しやすいが,複数の周期指標が同時に信号を発する場合は,より信頼性が高い.
短期的なチャンスをより効果的に捉えること.日線のような大周期の突破は,大きな方向を私たちに指し示し,私たちは5分のような短い周期でチャンスを探すだけで,利益を得ることができます.
撤回は小さい。 跨周期結合は,被套を避けるのに役立ちます。 大周期指標が転じるとき,我々は時効的に止損退出する。
この戦略の主なリスクは
大周期指標判断誤り.当日線RSIなどの指標が値域を有効に判断できない場合,信号がエラーを生じます.これはRSIのパラメータ設定を最適化する必要があります.
小周期の動きは大周期判断と合わない。時には小周期の価格動きが大周期の動きと対抗する.このとき,損失を制御するためにストップを設定する必要がある。
資金管理不適切. リスク管理が不適切であれば,一回の損失が過大で,回復が困難になる. これは合理的なポジション管理を設定する必要があります.
この戦略の改善には,以下のような要素が不可欠です.
周期パラメータ最適化. 周期の組み合わせをテストして,最適なパラメータを見つけることができます.
RSIのパラメータを最適化します.判断の正確性を向上させるかどうかを確認するためにRSIのパラメータを調整できます.
他の指標を追加する.例えば,平均線がトレンドの方向を判断するなど,より多くの指標を組み合わせることができます.
ストップを最適化するメカニズム 撤収状況に応じてストップポイントを動的に調整できる
ポジション管理の最適化. 取引ごとに特定のポジションをより科学的に合理的に管理することができる.
この戦略は,周期間のRSI指標の好転状況を評価することによって,異なる時間次元間の価値のスローガーを実現する.この周期間の判断の考え方は,さらに掘削に値し,パラメータ最適化,ストップスローズ最適化,組み合わせ最適化などの方法によって,戦略をより優位にするために,継続的に完善することができます.全体として,この戦略は,ユニークな考え方で,大きな最適化スペースを持っています.
/*backtest
start: 2022-12-05 00:00:00
end: 2023-12-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("Swing MTF", shorttitle="Swing MTF", overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 10000, slippage = 5)
//
otf_period = input(defval=2, title="Look Back Period (2nd Timeframe)")
otf = input(defval="180", title="Second Momentum Timeframe")
// Function to dectect a new bar
is_newbar(res) =>
t = time(res)
change(t) != 0 ? true : false
// Check how many bars are in our upper timeframe
since_new_bar = barssince(is_newbar(otf))
otf_total_bars = na
otf_total_bars := since_new_bar == 0 ? since_new_bar[1] : otf_total_bars[1]
//Calculate RSI Values
ctf_rsi = rsi(open, otf_period)
breakline=input(title="Breaks in lines", defval = true, type=bool)
so = request.security(syminfo.tickerid, otf, rsi(open, otf_period))
sc = request.security(syminfo.tickerid, otf, rsi(close, otf_period))
final_otf_so = na
final_otf_so := barstate.isrealtime ? since_new_bar == otf_total_bars ? so : final_otf_so[1] : so
final_otf_sc = na
final_otf_sc := barstate.isrealtime ? since_new_bar == otf_total_bars ? sc : final_otf_sc[1] : sc
barsback = input(11, title='Bars back to check for a swing')
// showsig = input(false, title='Show Signal Markers')
swing_detection(index)=>
swing_high = false
swing_low = false
start = (index*2) - 1 // -1 so we have an even number of
swing_point_high = final_otf_so[index]
swing_point_low = final_otf_sc[index]
//Swing Highs
for i = 0 to start
swing_high := true
if i < index
if final_otf_so[i] > swing_point_high
swing_high := false
break
// Have to do checks before pivot and after seperately because we can get
// two highs of the same value in a row. Notice the > and >= difference
if i > index
if final_otf_so[i] >= swing_point_high
swing_high := false
break
//Swing lows
for i = 0 to start
swing_low := true
if i < index
if final_otf_sc[i] < swing_point_low
swing_low := false
break
// Have to do checks before pivot and after seperately because we can get
// two lows of the same value in a row. Notice the > and >= difference
if i > index
if final_otf_sc[i] <= swing_point_low
swing_low := false
break
[swing_high, swing_low]
// Check for a swing
[swing_high, swing_low] = swing_detection(barsback)
long = final_otf_so > final_otf_sc
short = final_otf_so < final_otf_sc
if swing_low and long
strategy.entry("My Long Entry Id", strategy.long)
if swing_high and short
strategy.entry("My Short Entry Id", strategy.short)