RSIクロスサイクル取引戦略


作成日: 2023-10-25 11:20:59 最終変更日: 2023-10-25 11:20:59
コピー: 0 クリック数: 758
1
フォロー
1617
フォロワー

RSIクロスサイクル取引戦略

概要

この策略は,RSI指標の超買超売原理を適用し,多周期RSIと組み合わせて判断し,跨周期操作を実現する.策略は,RSIの周期設定に基づいて超買超売信号を判断し,RSIの移動平均を利用してフィルターし,誤った信号を避ける.RSIが上を移動平均線を横切るときに買い信号を生じ,下を横切るときに売り信号を生じ,典型的な均線交差操作方法を形成する.

戦略原則

この戦略は,主にRSI指標の超買い超売り判断によって取引シグナルを生成する.RSI指標は,相対的に強いインデックスを表す.計算式は,RSI = 100 - (100 / (1 + RS) で,RSは,期間中の平均クローズアップの値と平均クローズアップの値の比率に等しい.RSI指標は0から100の範囲で,一般的に30を下回ると超売り,70を下回ると超買いとみなされる.

この戦略は,高パラメータのsobrecompraと低パラメータのsobreventaを設定し,RSIがsobrecompraより高いときは超買いと判断し,RSIがsobreventaより低いときは超売りと判断する.戦略のsobrecompraのデフォルト値は70,sobreventaのデフォルト値は30である.

買入と売却のシグナルを生成するために,策略はRSI指標の移動平均を利用してフィルタリングする.RSI指標の上の移動平均を穿越すると買入のシグナルEs_compraを生成し,移動平均を横切ると売り出せのシグナルEs_ventaを生成する.移動平均のパラメータperiodos_mediaはデフォルトで14周期である.

買入と売却のシグナルを生成した後に,戦略は多頭または空頭取引のためにポジションを開きます. さらに,戦略は,損失を拡大させ,利益をロックするのを防ぐために,ストップ・ロスとストップ・フード,“%“を設定します.

戦略的優位性

  1. RSI指標で超買いと超売りを判断し,高殺低を追うのを避ける.

  2. RSI指数の移動平均をフィルターして,偽信号を避ける.

  3. RSIの多周期設定と組み合わせることで,より安定した取引信号が得られます.

  4. 危険を効果的に制御する止損防止機構を設定する.

  5. 戦略の論理はシンプルで明快で,理解し,修正しやすい.

  6. 異なる品種と周期に適用できるカスタマイズ可能なパラメータ.

戦略リスク

  1. RSIは遅滞しており,価格の逆転の最適なタイミングを逃している可能性があります.

  2. 移動平均は取引信号を遅らせ,トレンドの逆転を間に合うように捉えられない.

  3. 固定された超買超売パラメータの設定は柔軟性がないため,周期や品種によって調整する必要がある.

  4. ストップ・ロスの設定が不適切である場合,損失を招くか,利益を逃す可能性があります.

  5. 多頭空頭ポジションは1人しか持たないため,差値取引に資金が充分利用できない.

戦略の最適化

  1. MACD,KDなどの他の指標と組み合わせて取引信号を判断する.

  2. 移動平均のトレンド追跡を自作的に適用する.

  3. ダイナミックな超買超売のパラメータを設定し,市場の変動に応じて調整する.

  4. ストップ・ストップ・ストップアルゴリズムを最適化します.

  5. ポジション管理機構の追加,資金規模に応じてポジションの動的調整.

  6. 傾向フィルターを追加して,波動的な市場での頻繁な取引を避ける.

  7. 最適なパラメータの組み合わせを選択します.

要約する

この戦略は,RSI指標の超買超売を基礎として,移動平均を活用して,波を生成する取引信号を生成し,典型的なクロンサイクル取引方法を実現する.戦略は,明確な論理構造とパラメータ設定を有し,パラメータを異なる品種と周期に適用することで,信頼性の高い効果的なクロンサイクル取引戦略である.しかし,RSI指標と移動平均などのツールにも一定の限界があり,戦略パラメータをより自律的に,フィルタリング効果を向上させ,リスクを最大限に軽減し,収益を高めるためにさらなる最適化が必要である.

ストラテジーソースコード
/*backtest
start: 2023-09-01 00:00:00
end: 2023-09-30 23:59:59
period: 3m
basePeriod: 1m
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/
// © samuelkanneman

//@version=4
strategy("RSI KANNEMAN")
//////Entrada///////
i_startTime         = input(title="Start Date Filter", defval=timestamp("01 Nov 2020 13:30 +0000"), type=input.time, tooltip="Date & time to begin trading from")
i_endTime           = input(title="End Date Filter", defval=timestamp("1 Nov 2022 19:30 +0000"), type=input.time, tooltip="Date & time to stop trading")
sobrecompra= input(70, title="Sobre Compra", type=input.integer ,minval=50, maxval=100 )
sobreventa= input(30, title="Sobre Venta", type=input.integer ,minval=0, maxval=50 )
l1=hline(sobrecompra)
l2=hline(sobreventa, color=color.purple)
periodos= input(14, title="Periodos", type=input.integer ,minval=1, maxval=50 )
periodos_media= input(14, title="Logintud media movil", type=input.integer ,minval=1, maxval=200 )
var SL =0.0
var TP=0.0
StopLoss = input(2.0, title="SL %", step=0.2)
TakeProfit = input(5.0, title="TP %", step=0.2)

//////Proceso///////

mi_rsi=rsi(close,periodos)
mm_rsi=sma(mi_rsi,periodos_media)

Es_compra= crossover(mm_rsi,sobreventa)
Es_venta= crossunder(mm_rsi,sobrecompra)

comprado= strategy.position_size > 0
vendido = strategy.position_size < 0

//time to test 
dateFilter = true
//timePeriod = time >= timestamp(syminfo.timezone, 2020, 11, 1, 0, 0)


// long

if (not comprado and Es_compra and dateFilter  )
    // realizar long
    cantidad = strategy.equity/hlc3
    strategy.entry ("compra", strategy.long , cantidad)
    SL := close*(1-(StopLoss/100))
    TP := close*(1+(TakeProfit/100))
    
if close >= TP
    strategy.close ("compra" , comment="Salto TP")  

if (comprado and Es_venta  )
    strategy.close ("compra" , comment="Sobre Venta")

if close <= SL
    strategy.close ("compra" , comment="Salto SL")
    
// short

if (not vendido and Es_venta and dateFilter  )
    // realizar short
    cantidad = strategy.equity/hlc3
    strategy.entry ("venta", strategy.short , cantidad)
    SL := close*(1+(StopLoss/100))
    TP := close*(1-(TakeProfit/100))
    
if close <= TP
    strategy.close ("venta" , comment="Salto TP")  

if (vendido and Es_compra  )
    strategy.close ("venta" , comment="Sobre Compra")

if close >= SL
    strategy.close ("venta" , comment="Salto SL")

    

    
    
   ///////Salida//////
fill(l1,l2)
plot(mi_rsi)
plot(mm_rsi, color=color.yellow)

bgcolor(Es_compra ? color.blue : na , transp=0)
bgcolor(Es_venta ? color.red : na , transp=0)


// 1d 70 22 5 4 3 15    6 meses
//1h 70 20 6 4 5 7      1 mese
//15m 70 20 5 4 4 7      1 semana