RSI インディケーターに基づくニフティ取引戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-25 12:23:39
タグ:

img

概要

この戦略は,相対強度指数 (RSI) 指標に基づいて,ニフティ指数取引のための定量投資戦略を設計する.これは,RSIを使用して低価格の購入と高価格の売却を導入するために,過剰な収益を出すために,過剰な購入と過剰な売却の機会を特定する.

戦略原則

この戦略は,2期間のRSIを取引シグナルとして設定する.RSIが20を超えるとロングになり,RSIが70を下回るとポジションを閉じる.これは指数の短期調整機会を把握する.

RSIが20を下回ると,資産が過大評価され,リバウンドが進んでいることを示唆する.RSIが20を超えると,ロングに行く.RSIが70を超えると,資産が過大評価され,コールバックが進んでいることを示唆する.RSIが70を下回ると,ポジションを閉じる.

利点分析

短期的な買い過ぎ/売り過ぎの機会を指標で特定する戦略として,主な利点は以下の通りです.

  1. 原則は単純で明快で 分かりやすく 検証も容易です
  2. 数少ない指標パラメータ,最適化と調整が簡単
  3. 短期的な利益の追求は,スカルピングのトレード哲学に合致します
  4. 異なる期待に応じた調整可能な取引期間

リスク分析

この戦略の主なリスクは以下のとおりです.

  1. 長期的傾向を把握できず,大きな動きを見逃す可能性が高い
  2. パラメータの最適化に過度に依存し,過剰なフィットメントのリスク
  3. 損失を効果的に制御するストップ・ロスのメカニズムがない
  4. 取引頻度は保有期間に影響し,取引コストが増加する

上記リスクを制御するために,以下の側面で最適化を行うことができます.

  1. 長期的動向を特定するための傾向指標を組み込む
  2. オーバーフィットメントを防ぐためにウォーク・フォワード分析を採用する
  3. タイムリーストップ・ロスのためのストップ・ロスのポイントを設定する
  4. 取引頻度を制御するために,取引パラメータを適切に調整する.

オプティマイゼーションの方向性

戦略の最適化のための主な側面:

  1. 最適なパラメータ組み合わせを見つけるために RSI パラメータを最適化
  2. 最大引き上げを制限するストップ損失メカニズムを追加する
  3. 長期的傾向を判断するために移動平均等を組み込む
  4. 位置配分を最適化するために位置サイズ化モジュールを追加する
  5. パラメータを自動的に調整するために定量的な著作権を追加

結論

この戦略は,RSIインジケーターに基づいて短期間の取引戦略を設計し,低価格の購入と高価格の販売のための過剰購入/過剰販売信号を捕獲する.この戦略はシンプルな原則を持ち,実行が簡単ですが,一定の程度の頻繁な取引,長期的なトレンドを特定できないなどがあります.将来の改善は,RSIパラメータを最適化し,ストップロスを追加し,判断トレンドを組み合わせて,戦略をより安定かつ信頼性のあるものにすることができます.


/*backtest
start: 2023-01-18 00:00:00
end: 2024-01-24 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("RSI Strategy", overlay=true,pyramiding = 1000)
rsi_period = 2
rsi_lower = 20
rsi_upper = 70

rsi_value = rsi(close, rsi_period)
buy_signal = crossover(rsi_value, rsi_lower)
sell_signal = crossunder(rsi_value, rsi_upper)
current_date1 =  input(defval=timestamp("01 Nov 2009 00:00 +0000"), title="stary Time", group="Time Settings")

current_date =  input(defval=timestamp("01 Nov 2023 00:00 +0000"), title="End Time", group="Time Settings")
investment_amount = 100000.0
start_time = input(defval=timestamp("01 Dec 2018 00:00 +0000"), title="Start Time", group="Time Settings") 
end_time = input(defval=timestamp("30 Nov 2023 00:00 +0000"), title="End Time", group="Time Settings")

in_time = time >= start_time and time <= end_time
// Variable to track accumulation.
var accumulation = 0.0
out_time = time >= end_time 

if (buy_signal )
    strategy.entry("long",strategy.long,qty= 1) 
    accumulation += 1
if (out_time)
    strategy.close(id="long")

plotshape(series=buy_signal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup)
plotshape(series=sell_signal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown)

plot(rsi_value, title="RSI", color=color.blue)
hline(rsi_lower, title="Lower Level", color=color.red)



plot(strategy.opentrades, style=plot.style_columns, 
     color=#2300a1, title="Profit first entry")
plot(strategy.openprofit, style=plot.style_line, 
     color=#147a00, title="Profit first entry")
// plot(strategy.position_avg_price, style=plot.style_columns, 
//      color=#ca0303, title="Profit first entry")
// log.info(strategy.position_size * strategy.position_avg_price)


もっと