資源の読み込みに... 荷物...

ダイナミックATRストップ・ロスのRSI 過売度リバウンド量的な戦略

作者: リン・ハーンチャオチャン開催日:2024年11月29日 16:18:55
タグ:RSISMAATRTPSL

img

概要

この戦略は,RSIオーバーセールシグナルと動的ATRストップ・ロスをベースとした定量的な取引システムである.日々のタイムフレームデータを利用し,RSIオーバーセールシグナルと200日間の移動平均トレンドフィルターを組み合わせ,過剰セール市場条件でリバウンド機会を捕捉する.この戦略は動的ATRストップ・ロスと静的パーセントストップ・ロスメカニズムの両方を採用し,段階的なポジション削減を通じて実施される3倍の利益目標とともに,RSIオーバーセールシグナルと200日間の移動平均トレンドフィルターを組み合わせている.

戦略の原則

基本論理には次の主要な要素が含まれます.

  1. 入力シグナル:RSI (RSI) (5) が過売値30を下回り,価格が200日移動平均値を超えるとシステムでロングシグナルが生成されます.
  2. ストップ・ロスのメカニズム:動的ストップ・ロスの 1.5x ATR (※20) と固定ストップ・ロスの 25% を組み合わせる.
  3. 利益目標: 5%,10%および15%の3つの目標設定,それぞれ33%,66%,100%のポジション削減.
  4. ポジション管理:ケリー基準で計算された59.13%のポジションサイズまたは保守的な75%のポジションサイズを使用することを推奨します.

戦略 の 利点

  1. ダブルトレンド確認: RSIの過剰売りと移動平均トレンドの両方を介して取引を検証し,勝利率を改善します.
  2. 柔軟なリスク管理:動的ATRストップロスは市場の変動に適応し,固定ストップロスは究極の保護を提供します.
  3. インテリジェント・プロフィート・マネジメント 段階的なポジション削減の3つのターゲットは,上向きの可能性を維持しながら利益を確保します
  4. 科学的資本管理:ケリー基準を用いてポジションサイズを最適化し,リスクと報酬をバランスする.

戦略リスク

  1. トレンド依存性: 戦略は,変動する市場で頻繁に停止を引き起こす可能性があります. 提案: 偽信号 を 減らす ため に 振動器 の フィルター を 追加 する.

  2. "%の固定ストップ損失"は,単一の取引で大きな損失をもたらす可能性があります. 提案:個人リスク耐性に基づいてストップ・ロスの割合を調整する.

  3. 引き下げリスク: 段階的な利益引き上げは,強いトレンドにおいて,ポジションを早すぎに引き下げることがあります. 提案: 動的な利益目標を考えたり,傾向を追うために部分を維持してください.

戦略の最適化方向

  1. シグナル最適化
  • 音量確認を追加する
  • MACD のような傾向指標を組み込む
  • 波動性フィルタを導入する
  1. ストップ損失最適化
  • ストップ・ロスの動的割合を導入する
  • 時間に基づく停止を追加する
  • リスク・報酬フィルターを含める
  1. 利得の最適化:
  • ATR をベースにした動的目標設定
  • トレイリングストップを導入
  • ポジション削減比を最適化する

概要

この戦略は,動的なATRストップ損失とトリプル利益目標によって補完された,移動平均トレンドフィルタリングとRSIオーバーセールシグナルを組み合わせて,完全な取引システムを構築する.その強みは柔軟なリスク制御と合理的な利益管理にあります.市場状況と個人リスクの好みに基づいて最適化が必要ですが.シグナルシステム,ストップ損失メカニズム,および利益の戦略の継続的な改善を通じて,システムはライブ取引でより良いパフォーマンスの可能性を示しています.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA/4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/
// © wielkieef

//@version=5
strategy("Simple RSI stock Strategy [1D] ", overlay=true, pyramiding=1, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=75, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0.03)

// Rsi
oversoldLevel = input(30, title="Oversold Level")
overboughtLevel = input(70, title="Overbought Level")
rsi = ta.rsi(close, 5)
rsi_overbought = rsi > overboughtLevel  
rsi_oversold = rsi < oversoldLevel

// Sma 200
lenghtSMA = input(200, title = "SMA lenght")
sma200 = ta.sma(close, lenghtSMA)

// ATR stop-loss
atrLength = input.int(20, title="ATR Length")
atrMultiplier = input.float(1.5, title="ATR Multiplier")
atrValue = ta.atr(atrLength)
var float long_stop_level = na
var float short_stop_level = na
var float tp1_level = na
var float tp2_level = na
var float tp3_level = na

// Strategy entry
long = (rsi_oversold ) and close > sma200 

// Take Profit levels
tp_1 = input.float(5.0, "TP 1", minval=0.1, step=0.1)
tp_2 = input.float(10.0, "TP 2", minval=0.2, step=0.1)
tp_3 = input.float(15.0, "TP 3", minval=0.3, step=0.1)

if long
    strategy.entry('Long', strategy.long)
    long_stop_level := close - atrMultiplier * atrValue
    tp1_level := strategy.position_avg_price * (1 + tp_1 / 100)
    tp2_level := strategy.position_avg_price * (1 + tp_2 / 100)
    tp3_level := strategy.position_avg_price * (1 + tp_3 / 100)

// basic SL - this code is from author RafaelZioni, modified by wielkieef
sl = input.float(25.0, 'Basic Stop Loss %', step=0.1)
per(procent) =>
    strategy.position_size != 0 ? math.round(procent / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)

// ATR SL
if (strategy.position_size > 0 and (close <= long_stop_level))
    strategy.close("Long")
    tp1_level := na
    tp2_level := na
    tp3_level := na
plot(long_stop_level, color=color.orange, linewidth=2, title="Long Stop Loss")

// TP levels
if (strategy.position_size > 0)
    if (not na(tp1_level) and close >= tp1_level)
        tp1_level := na
    if (not na(tp2_level) and close >= tp2_level)
        tp2_level := na
    if (not na(tp3_level) and close >= tp3_level)
        tp3_level := na

plot(strategy.position_size > 0 and not na(tp1_level) ? tp1_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 1")
plot(strategy.position_size > 0 and not na(tp2_level) ? tp2_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 2")
plot(strategy.position_size > 0 and not na(tp3_level) ? tp3_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 3")

// Strategy exit points for Take Profits
strategy.exit('TP 1', from_entry="Long", qty_percent=33, profit=per(tp_1), loss=per(sl))
strategy.exit('TP 2', from_entry="Long", qty_percent=66, profit=per(tp_2), loss=per(sl))
strategy.exit('TP 3', from_entry="Long", qty_percent=100, profit=per(tp_3), loss=per(sl))

// by wielkieef

関連性

もっと