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

動的波動性調整を含む多レベルRSI平均逆転戦略

作者: リン・ハーンチャオチャン開催日:2024年6月21日 14:16:31
タグ:RSI、PIVOT

img

概要

この戦略は,RSI指標と価格変動に基づいたマルチレベル平均逆転取引システムである.極端なRSI値と異常な大きな価格変動をエントリー信号として使用し,ピラミッド型のポジションスケーリングとダイナミックなテイク・プロフィートレベルを使用してリスクを管理し,リターンを最適化する.この戦略の核心アイデアは,価格が正常水準に戻ったときに極端な波動と利益の間に市場に参入することです.

戦略の原則

  1. 入国条件:

    • 基本指標として20期間のRSI (RSI20) を使用する.
    • RSIの値がRSIの値がRSIの値がRSIの値がRSIの値がRSIの値がRSIの値がRSIの値がRSIの値がRSIの値がRSIの値がRSIの値がRSIの値が
    • RSIが値に達し,現在のキャンドルボディサイズが対応する変動値を超えると入力信号が起動します.
    • 追加条件:価格が最近の高低サポートレベルを一定割合で突破しなければならない.
  2. 位置スケーリングメカニズム:

    • 最大 5 つのエントリを許可します (初期エントリ + 4 つの追加エントリ)
    • 各追加項目は,より厳格なRSIと変動条件を満たす必要があります.
  3. 出口メカニズム:

    • 利得ポイントの 5 つの異なるレベルを設定します
    • 収益ポイントは,エントリー時のサポート/レジスタンスレベルに基づいて動的に計算されます.
    • オープンポジション数が増加するにつれて,収益目標が徐々に減少する.
  4. リスク管理

    • 取引は,口座価値の固定20%をリスクとする割合リスクモデルを使用します.
    • 合計リスクの露出を制限する最大同時オープンポジションを 5 に設定する.

戦略 の 利点

  1. 多レベルエントリー:複数のRSIと波動性値を設定することで,戦略は異なるレベルの市場極端を把握し,取引機会を増やすことができます.

  2. ダイナミック・テイク・プロフィート: サポート/レジスタンスレベルに基づいて計算されるテイク・プロフィートポイントは,市場構造に自律的に適応し,過早な脱出なしに利益を保護することができます.

  3. ピラミッド型ポジションスケーリング: 傾向が続くにつれてポジションを増やすことは,利益の可能性を大幅に高めることができます.

  4. リスク管理: 固定パーセントリスクと最大ポジション制限は,各取引および全体的にリスクを効果的に制御します.

  5. 柔軟性:多くの調整可能なパラメータにより,戦略は異なる市場環境と取引手段に適応できます.

  6. 平均逆転+トレンドフォロー:平均逆転とトレンドフォローの利点を組み合わせ,主要なトレンドを見逃さずに短期的な逆転を捉える.

戦略リスク

  1. オーバートレード: 変動が激しい市場で頻繁に取引信号を誘発し,過度の手数料を引き起こす可能性があります.

  2. 偽のブレイク: 市場は短期間極端な波動を経験し,その後は迅速な逆転が起こり,偽の信号が発生します.

  3. 連続的な損失: 連続した片方的な市場の動きは,複数のポジション上昇後に重大な損失をもたらす可能性があります.

  4. パラメータ感度: 戦略の性能はパラメータ設定に非常に敏感であり,過剰なフィットメントのリスクがあります.

  5. スリップインパクト: 戦略の業績に影響を与える激しい波動の期間に深刻なスリップに直面する可能性があります.

  6. 市場環境による依存: 戦略は,低変動または強いトレンド市場などの特定の市場環境で劣悪なパフォーマンスを発揮することがあります.

戦略の最適化方向

  1. ダイナミックパラメータ調整:市場状況に基づいて,RSIと波動性値をダイナミックに調整するための適応メカニズムを導入する.

  2. 多期分析: 長期市場動向の判断を組み込み,入場品質を向上させる.

  3. ストップ・ロスの最適化:さらなるリスク管理のために,ストップ・ロスの後延またはATRベースのダイナミックストップ・ロスを追加する.

  4. 市場状態フィルタリング:不適切な市場環境での取引を避けるために,トレンド強度,変動サイクル,その他のフィルタリング条件を含みます.

  5. 資本管理の最適化: 異なる信号レベルに基づいて取引サイズを調整するなど,より詳細なポジション管理を実施します.

  6. 機械学習統合: パラメータ選択と信号生成プロセスを最適化するために機械学習アルゴリズムを使用する.

  7. 関連性分析: 戦略の安定性と多様性を向上させるために,他の資産との関連性分析を組み込む.

結論

このマルチレベルRSI平均リバーショントレーディング戦略は,技術分析,ダイナミックリスク管理,ピラミッド型ポジションスケーリング技術を巧みに組み合わせた慎重に設計された定量的なトレーディングシステムである. 価格が逆転する際の極端な市場変動と利益を得ることを把握することで,戦略は強力な利益の可能性を示している.しかし,過剰取引や市場環境依存などの課題にも直面している. 将来の最適化は,異なる市場環境に合わせて戦略の適応性とリスク管理能力を向上することに焦点を当てなければならない. 全体的に,これは,さらなる最適化とバックテストを通じて,堅牢な基盤を持つ戦略フレームワークであり,強力なトレーディングシステムへと発展する可能性がある.


/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Retorno_Pivots_5min_Novo_v3.3')

// Input variables
bars_left1 = input(1, title = "Entry - Pivot Left Bars")
bars_right1 = input(1, title = "Entry - Pivot Right Bars")
rsi20_longentry0 = input(35, title = "Entry 1 - RSI20 Long")
rsi20_shortentry0 = input(65, title = "Entry 1 - RSI20 Short")
bar_size_entry0 = input.float(1, title="Entry 1 - Bar Size")
rsi20_longentry1 = input(30, title = "Entry 2 - RSI20 Long")
rsi20_shortentry1 = input(70, title = "Entry 2 - RSI20 Short")
bar_size_entry1 = input.float(0.8, title="Entry 2 - Bar Size")
rsi20_longentry2 = input(25, title = "Entry 3 - RSI20 Long")
rsi20_shortentry2 = input(75, title = "Entry 3 - RSI20 Short")
bar_size_entry2 = input.float(0.7, title="Entry 3 - Bar Size")
rsi20_longentry3 = input(20, title = "Entry 4 - RSI20 Long")
rsi20_shortentry3 = input(80, title = "Entry 4 - RSI20 Short")
bar_size_entry3 = input.float(0.5, title="Entry 4 - Bar Size")
limit_perc1 = input.float(0.60, title="Profit Range 1")
limit_perc2 = input.float(0.40, title="Profit Range 2")
limit_perc3 = input.float(0.20, title="Profit Range 3")
limit_perc4 = input.float(0.00, title="Profit Range 4")
limit_perc5 = input.float(0.00, title="Profit Range 5")
minimum_pivot_distance = input.float(0, title="Minimum Pivot Distance %")
barsize_1h_input = input(288, title="Highest Bar Lookback")
rsi20 = ta.rsi(close, 20)
rsi200 = ta.rsi(close, 200)
Pivot_High_Last1 = ta.valuewhen(ta.pivothigh(high, bars_left1, bars_right1), ta.pivothigh(high, bars_left1, bars_right1), 0)
Pivot_Low_Last1 = ta.valuewhen(ta.pivotlow(low, bars_left1, bars_right1), ta.pivotlow(low, bars_left1, bars_right1), 0)

barsize = math.abs(close - open)
barsize_1h = ta.highest(barsize, barsize_1h_input)

Bar0Long = rsi20 < rsi20_longentry0 and barsize >= (barsize_1h * bar_size_entry0)
Bar1Long = rsi20 < rsi20_longentry1 and barsize >= (barsize_1h * bar_size_entry1)
Bar2Long = rsi20 < rsi20_longentry2 and barsize >= (barsize_1h * bar_size_entry2)
Bar3Long = rsi20 < rsi20_longentry3 and barsize >= (barsize_1h * bar_size_entry3)

// Long Entries
Long_Entry1 = strategy.opentrades == 0 and rsi20 < rsi20[1] and ((rsi20 < rsi20_longentry0 and barsize >= (barsize_1h * bar_size_entry0)) or (rsi20 < rsi20_longentry1 and barsize >= (barsize_1h * bar_size_entry1)) or (rsi20 < rsi20_longentry2 and barsize >= (barsize_1h * bar_size_entry2)) or (rsi20 < rsi20_longentry3 and barsize >= (barsize_1h * bar_size_entry3))) and close < (Pivot_Low_Last1 * (1 - (minimum_pivot_distance / 100)))
Long_Entry2 = strategy.opentrades == 1 and strategy.position_size > 0 and rsi20 < rsi20[1] and (Bar0Long or Bar1Long or Bar2Long or Bar3Long)
Long_Entry3 = strategy.opentrades == 2 and strategy.position_size > 0 and rsi20 < rsi20[1] and (Bar0Long or Bar1Long or Bar2Long or Bar3Long)
Long_Entry4 = strategy.opentrades == 3 and strategy.position_size > 0 and rsi20 < rsi20[1] and (Bar0Long or Bar1Long or Bar2Long or Bar3Long)
Long_Entry5 = strategy.opentrades == 4 and strategy.position_size > 0 and rsi20 < rsi20[1] and (Bar0Long or Bar1Long or Bar2Long or Bar3Long)
if Long_Entry1 or Long_Entry2 or Long_Entry3 or Long_Entry4 or Long_Entry5
    strategy.entry("Long", strategy.long, comment = "ENTER-LONG_BINANCE-FUTURES_BTCBUSD_Bot-BTC-1min_1M_970d2ee265390c27")
// Longs Exits
Long_Exit1 = strategy.opentrades == 1 and close > (strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc1))
Long_Exit2 = strategy.opentrades == 2 and close > (strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc2))
Long_Exit3 = strategy.opentrades == 3 and close > (strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc3))
Long_Exit4 = strategy.opentrades == 4 and close > (strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc4))
Long_Exit5 = strategy.opentrades == 5 and close > (strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc5))
if Long_Exit1 or Long_Exit2 or Long_Exit3 or Long_Exit4 or Long_Exit5
    strategy.close("Long", comment = "EXIT-LONG_BINANCE-FUTURES_BTCBUSD_Bot-BTC-1min_1M_970d2ee265390c27")

Bar0Short = rsi20 > rsi20_shortentry0 and barsize >= (barsize_1h * bar_size_entry0)
Bar1Short = rsi20 > rsi20_shortentry1 and barsize >= (barsize_1h * bar_size_entry1)
Bar2Short = rsi20 > rsi20_shortentry2 and barsize >= (barsize_1h * bar_size_entry2)
Bar3Short = rsi20 > rsi20_shortentry3 and barsize >= (barsize_1h * bar_size_entry3)

// Short Entries
Short_Entry1 = strategy.opentrades == 0 and rsi20 > rsi20[1] and ((rsi20 > rsi20_shortentry0 and barsize >= (barsize_1h * bar_size_entry0)) or (rsi20 > rsi20_shortentry1 and barsize >= (barsize_1h * bar_size_entry1)) or (rsi20 > rsi20_shortentry2 and barsize >= (barsize_1h * bar_size_entry2)) or (rsi20 > rsi20_shortentry2 and barsize >= (barsize_1h * bar_size_entry2))) and close > (Pivot_High_Last1 * (1 + (minimum_pivot_distance / 100)))
Short_Entry2 = strategy.opentrades == 1 and strategy.position_size < 0 and rsi20 > rsi20[1] and (Bar0Short or Bar1Short or Bar2Short or Bar3Short)
Short_Entry3 = strategy.opentrades == 2 and strategy.position_size < 0 and rsi20 > rsi20[1] and (Bar0Short or Bar1Short or Bar2Short or Bar3Short)
Short_Entry4 = strategy.opentrades == 3 and strategy.position_size < 0 and rsi20 > rsi20[1] and (Bar0Short or Bar1Short or Bar2Short or Bar3Short)
Short_Entry5 = strategy.opentrades == 4 and strategy.position_size < 0 and rsi20 > rsi20[1] and (Bar0Short or Bar1Short or Bar2Short or Bar3Short)
if Short_Entry1 or Short_Entry2 or Short_Entry3 or Short_Entry4 or Short_Entry5
    strategy.entry("Short", strategy.short, comment = "ENTER-SHORT_BINANCE-FUTURES_BTCBUSD_Bot-BTC-1min_1M_970d2ee265390c27")
// Short Exits
Short_Exit1 = strategy.opentrades == 1 and close < (strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc1))
Short_Exit2 = strategy.opentrades == 2 and close < (strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc2))
Short_Exit3 = strategy.opentrades == 3 and close < (strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc3))
Short_Exit4 = strategy.opentrades == 4 and close < (strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc4))
Short_Exit5 = strategy.opentrades == 5 and close < (strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc5))
if Short_Exit1 or Short_Exit2 or Short_Exit3 or Short_Exit4 or Short_Exit5
    strategy.close("Short", comment = "EXIT-SHORT_BINANCE-FUTURES_BTCBUSD_Bot-BTC-1min_1M_970d2ee265390c27")

// Plots
plot(rsi20, color=color.new(#fbff00, 0), linewidth=2)
plot(((strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc1))), color=color.new(#00ff2a, 0), linewidth=2)
plot(((strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc2))), color=color.new(#00ff2a, 50), linewidth=2)
plot(((strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc3))), color=color.new(#00ff2a, 80), linewidth=2)
plot(((strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc4))), color=color.new(#00ff2a, 100), linewidth=2)
plot((strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc1)), color=color.new(#ff0000, 0), linewidth=2)
plot((strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc2)), color=color.new(#ff0000, 50), linewidth=2)
plot((strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc3)), color=color.new(#ff0000, 80), linewidth=2)
plot((strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc4)), color=color.new(#ff0000, 100), linewidth=2)
plot(strategy.position_avg_price, color=color.new(#ffc400, 0), linewidth=2)
plot(strategy.opentrades * (strategy.position_size / math.abs(strategy.position_size)), color=color.new(#ff00bb, 0), linewidth=2)
plot(((barsize / barsize_1h) * 100), color=color.new(#0000ff, 0), linewidth=2)

関連性

もっと