RSI ダイナミック ストップ ロスおよびテイク プロフィット戦略


作成日: 2024-03-19 15:54:01 最終変更日: 2024-03-19 15:54:01
コピー: 1 クリック数: 623
1
フォロー
1617
フォロワー

RSI ダイナミック ストップ ロスおよびテイク プロフィット戦略

戦略概要: この戦略は,RSI指標と価格の関係に基づいて,動的にストップ・ストラストープポイントを調整することで取引パフォーマンスを最適化する.戦略の主な考えは,RSI指標の超買い超売り特性を利用し,価格と取引量の変化を組み合わせて,RSIが逸脱した場合にタイムストップし,動的にストップ・ストラストープを使用してリスクを制御することである.

戦略の原則:

  1. RSI指標の値を計算し,入力されたパラメータに基づいて超買いと超売りの値を決定します.
  2. 現在のRSI値と前K線のRSI値を比較して,頂上形 ((isPeak) または底部形 ((isBottom) が発生しているかどうかを判断します.
  3. 頂点形態の出現時に,現在の価格が前回の頂点の高点より高く,取引量が前回の頂点の取引量より少ない場合は,売り込みシグナルが生じます.
  4. 底形が発生すると,現在の価格が前回の底の低点より低く,取引量が前回の底の取引量より少ない場合,買取シグナルが生じます.
  5. 買取シグナルがトリガーされた後,価格が前回の底値に戻ったとき,または取引量が前回の底値より小さいとき,ストップする.
  6. Sellシグナルがトリガーされた後,価格が前回のトップ高点に反発するか,取引量が前回のトップ取引量より小さいときにストップする.
  7. ポジション開設後,リスク管理のために,ストップ・ロスの価格をポジション開設価格の一定比率 ((2%) に設定する.

戦略的な利点:

  1. ダイナミックストップにより,トレンドの逆転の初期に利益をロックし,戦略的利益を向上させることができます.
  2. 交通量変化を補助判断条件として利用することで,偽信号を効果的にフィルターし,信号の正確性を向上させることができる.
  3. ストップ・ロスの設定は,単一取引のリスクの口を効果的に制御し,戦略の撤回を低減する.
  4. パラメータは調整可能で,異なる市場環境と取引品種に適用されます.

戦略的リスク:

  1. 変動する市場では,RSI指標は頻繁に超買超売シグナルが発生し,策略が偽のシグナルを多く生み出す可能性があります.
  2. ストップ・ロスの設定は,短期的に戦略の大きな引き下がりを引き起こす可能性があります.
  3. トレンド型市場では,トレンドフォローの戦略よりも劣る結果が出る可能性があります.

改善する方向:

  1. 信号の信頼性を高めるために,MACD,ブリン帯など,他の技術指標を導入することを検討することができる.
  2. ストップ・ストップ・ロスの値を最適化し,異なる品種の特徴と市場環境の動向に応じて調整する.
  3. ポジション管理モジュールを追加し,市場の変動や口座のリスク状況に応じてポジションのサイズを調整します.
  4. 戦略のパラメータを最適化して,最適なパラメータの組み合わせを見つけます.

結論から言うと RSIダイナミックストップストップ戦略は,RSI指標と価格の偏離関係を介して,取引量の変化を合成し,トレンドの初期にタイムリーにストップを設定し,同時にリスクを制御するためにダイナミックストップを設定する.この戦略の優点は,トレンドの逆転の初期に利益をロックすることができ,戦略の撤退を軽減し,一定の適応性があることである.しかし,振動的な市場で,この戦略は,偽信号が多く現れる可能性があるため,他の技術指標の導入とストップストップストップの値の最適化は,戦略のパフォーマンスを向上させる必要がある.さらに,ポジション管理とパラメータの最適化は,戦略の安定性と収益をさらに向上させる重要な方向である.

ストラテジーソースコード
/*backtest
start: 2024-03-11 00:00:00
end: 2024-03-15 09:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("RMM_byMR", overlay=true)

// RSI uzunluğu girişi
rsiLength = input(14, title="RSI Uzunluğu")

// Tepe ve dip seviyeleri için girişler
overboughtLevel = input(70, title="Aşırı Alım Seviyesi")
oversoldLevel = input(30, title="Aşırı Satım Seviyesi")

// RSI hesaplama
rsiValue = rsi(close, rsiLength)

// Son tepe noktalarını tespit etme // Son dip noktalarını tespit etme
isPeak = rsiValue[2] > overboughtLevel and rsiValue[2] > rsiValue[1] and rsiValue[2] > rsiValue[3] and (rsiValue[1] > rsiValue or rsiValue[3] > rsiValue[4])
isBottom = rsiValue[2] < oversoldLevel and rsiValue[2] < rsiValue[1] and rsiValue[2] < rsiValue[3] and (rsiValue[1] < rsiValue or rsiValue[3] < rsiValue[4])

// Önceki tepe noktalarını tespit etme
prevPeak = valuewhen(isPeak, rsiValue[2], 1)
prevPeakHighPrice = valuewhen(isPeak, high[2], 1)
volumePeak = valuewhen(isPeak, volume[1]+volume[2]+volume[3], 1)
prevPeakBarIndex = valuewhen(isPeak, bar_index, 1)

// Önceki dip noktalarını tespit etme
prevBottom = valuewhen(isBottom, rsiValue[2], 1)
prevBottomLowPrice = valuewhen(isBottom, low[2], 1)
volumeBottom = valuewhen(isBottom, volume[1]+volume[2]+volume[3], 1)
prevBottomBarIndex = valuewhen(isBottom, bar_index, 1)

// Tepe noktasında satış sinyali
isSellSignal = prevPeakBarIndex > prevBottomBarIndex and isPeak and rsiValue[2] < prevPeak and high[2] > prevPeakHighPrice and (volume[1]+volume[2]+volume[3]) < volumePeak
isBuyTakeProfit = isPeak and ((rsiValue[2] < prevPeak and high[2] > prevPeakHighPrice) or (rsiValue[2] < prevPeak and (volume[1]+volume[2]+volume[3]) < volumePeak))

// Dip noktasında alış sinyali
isBuySignal = prevBottomBarIndex > prevPeakBarIndex and isBottom and rsiValue[2] > prevBottom and low[2] < prevBottomLowPrice and (volume[1]+volume[2]+volume[3]) < volumeBottom
isSellTakeProfit = isBottom and ((rsiValue[2] > prevBottom and low[2] < prevBottomLowPrice) or (rsiValue[2] > prevBottom and (volume[1]+volume[2]+volume[3]) < volumeBottom))

sellTakeProfit = valuewhen(isSellTakeProfit, low, 1)
buyTakeProfit = valuewhen(isBuyTakeProfit, high, 1)

// isSellTakeProfit koşulu için işaretlemeyi yap
plotshape(isSellTakeProfit, style=shape.triangleup, location=location.abovebar, color=color.green, size=size.small, title="Sell Take Profit", offset=-2) 

// isBuyTakeProfit koşulu için işaretlemeyi yap
plotshape(isBuyTakeProfit, style=shape.triangledown, location=location.belowbar, color=color.red, size=size.small, title="Buy Take Profit", offset=-2)

buyComment = "Buy \n Rsi:" + tostring(round(rsiValue[2], 2)) + " \n Low:" + tostring(round(low[2],2)) + " \n Hacim:" + tostring(round(volume[1]+volume[2]+volume[3],2))
sellComment = "Sell \n Rsi:" + tostring(round(rsiValue[2], 2)) + " \n High:" + tostring(round(high[2],2)) + " \n Hacim:" + tostring(round(volume[1]+volume[2]+volume[3],2)) 

// Alış sinyali durumunda uzun pozisyon aç
if (isBuySignal)
    strategy.entry("Buy", strategy.long, comment = buyComment )
    strategy.exit("SL", "Buy", stop=close * 0.98)

// Satış sinyali durumunda kısa pozisyon aç
if (isSellSignal)
    strategy.entry("Sell", strategy.short, comment = sellComment )
    strategy.exit("SL","Sell", stop=close * 1.02)
// Limit değerini sonradan belirleme


// Alış sinyali durumunda uzun pozisyon kapat
if (isBuyTakeProfit)
    strategy.close("Buy", comment="TP")

// Satış sinyali durumunda kısa pozisyon kapat
if (isSellTakeProfit)
    strategy.close("Sell", comment="TP")