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

作者: リン・ハーンチャオチャン,日付: 2023年10月25日11時20分59秒
タグ:

img

概要

この戦略は,RSIインジケーターのオーバーバイトとオーバーセール原理を利用し,複数のサイクルRSIを組み合わせて信号を生成し,クロスサイクル操作を実現する.この戦略は,RSIのサイクル設定に従ってオーバーバイトとオーバーセール信号を判断し,間違った信号を避けるためにRSIの移動平均値をフィルタリングするために使用する.RSIが移動平均値を超えると購入信号,下を通ると販売信号を生成し,典型的な移動平均クロスオーバー動作モードを形成する.

戦略の論理

この戦略は,主にRSI指標の過剰購入および過剰販売判断を通じて取引信号を生成する.RSIは相対強度指数を表す.その公式は:RSI = 100 - (100 / (1 + RS)),RSは,期間中の平均閉店損失に対する平均閉店利益の比率である.RSI指数は0から100に及ぶ.一般的に30未満の過剰販売と70を超える過剰購入とみなされる.

この戦略は,高いパラメータのセーバーコンプラと低いパラメータのセーバーベンタを設定する.RSIがセーバーコンプラよりも高くなった場合,それはセーバーコンプラと判断される.RSIがセーバーベンタよりも低い場合,それはセーバーセールと判断される.この戦略のセーバーコンプラとセーバーベンタのデフォルト値はそれぞれ70と30である.

購入・販売信号を生成するために,戦略はフィルタリングのためにRSI指標の移動平均線を使用する.RSIが移動平均線を越えると,購入信号Es_compraが生成される.RSIが移動平均線を下回ると,販売信号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


もっと