RSIアリゲータートレンド戦略


作成日: 2024-01-29 14:40:07 最終変更日: 2024-01-29 14:40:07
コピー: 0 クリック数: 770
1
フォロー
1617
フォロワー

RSIアリゲータートレンド戦略

概要

RSIのトレンド戦略は,RSI指標に基づくの指標の組み合わせで,トレンドの入出を判断します.これは3つの平均値 -の上線,歯線,および唇線を用い,異なる周期のRSIの構築を使用します.歯線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上線上

戦略原則

RSI魚トレンド戦略は,RSI指標を使用して魚指標の3つの移動平均を構築します.具体的には以下のとおりです.

  • 上線: 5サイクルRSI線
  • 歯線:13周期のRSI線
  • 唇線:34周期のRSI線

信号の判断の論理は次のとおりです.

多頭信号:歯線に唇線を穿い,同時に上線が歯線より高いとき,多行する.

空頭シグナル:歯線の下を唇線穿過し,同時に上線が歯線を下にあるとき,空空する.

この戦略は,ストップ・ロズとストップ・ストップの条件を同時に設定しています.

  • ストップ・ロスは入札価格の10%に設定されます.
  • ストップは入札価格の90%に設定されます.

優位分析

RSIの走勢戦略は以下の利点があります.

  1. 線指標を用いてトレンドを判断し,市場のノイズを効果的に除し,主要トレンドをロックします.
  2. 多周期RSIと組み合わせて,偽突破を回避し,信号の信頼性を向上させる
  3. 合理的なストップ・ストップ条件を設定し,戦略の安定的な実行に役立てます.
  4. 戦略は明快でわかりやすい.パラメータ設定はシンプルで,リッドディスク操作は簡単.
  5. 複数の空白を同時に行うことができ,トレンドの両方向を考慮し,柔軟性がある

リスク分析

RSIのトレンドフィッシング策には以下のリスクがあります.

  1. 歯線と唇線の交差は,偽突破が発生し,不必要な損失を引き起こす可能性があります.偽突破の確率を減らすために周期パラメータを適切に調整できます.

  2. 止損設定は過度に激進的であり,無意味な止損の確率は大きい. 止損範囲を適切に放宽するか,または止損の活性化の前提条件として他の条件を追加することができます.

  3. 状況が激しく,損耗が止まるとか,保証金の効果が発揮できない場合.この場合,人工の介入が必要で,間に合うように損耗が止まる.

  4. 多空間の切替が頻繁な場合,取引費用の圧力が大きい。適切なアクセス条件を緩め,不必要な反復を減らすことができる。

最適化の方向

RSIの走勢戦略は,以下の方法で最適化できます.

  1. 釣り糸のパラメータ設定を最適化し,周期パラメータを調整し,最適なパラメータの組み合わせを見つける

  2. 新しい取引量指数などのフィルター信号などの条件ロジックを最適化

  3. ストップ・ストップ・ロスの戦略を最適化して,状況と保証金レベルに合わせる

  4. 突発事件の処理メカニズムを強化し,異常行為の暴露を避ける

  5. ポジション開設のアルゴリズムを増やし,単一の投資資金の割合を制御し,リスクを回避

要約する

RSI魚トレンド戦略は,全体として,信頼性の高い,操作の簡単なトレンド追跡戦略である.それは魚指標を使用してトレンドの方向を判断し,RSI指標と組み合わせて参照値を設定し,トレンドを効果的にロックし,合理的な出口点を設定することができます.同時に,戦略自体は,強力な柔軟性と拡張性を持ち,現場で適用し,後続の最適化に値します.

ストラテジーソースコード
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=3
// RSI Alligator
// Forked from Author: Reza Akhavan
// Updated by Khalid Salomão

strategy("RSI Alligator Strategy", overlay=false, pyramiding=0, default_qty_type=strategy.cash, default_qty_value=25000, initial_capital=25000, commission_type=strategy.commission.percent, commission_value=0.15, slippage=3)

// === TA LOGIC ===
overBought = input(70, minval=0, maxval=100, title="Over bought")
overSold = input(30, minval=0, maxval=100, title="Over sold")
jawPeriods = input(5, minval=1, title="Jaw Periods")
jawOffset = input(0, minval=0, title="Jaw Offset")
teethPeriods = input(13, minval=1, title="Teeth Periods")
teethOffset = input(0, minval=0, title="Teeth Offset")
lipsPeriods = input(34, minval=1, title="Lips Periods")
lipsOffset = input(0, minval=0, title="Lips Offset")

jaws = rsi(close, jawPeriods)
teeth = rsi(close, teethPeriods)
lips = rsi(close, lipsPeriods)
plot(jaws, color=green, offset=jawOffset, title="Jaw")
plot(teeth, color=red, offset=teethOffset, title="Teeth")
plot(lips, color=blue, offset=lipsOffset, title="Lips")

//
// === Signal logic ===
// 
LONG_SIGNAL_BOOLEAN  = crossover(teeth, lips) and jaws > teeth
SHORT_SIGNAL_BOOLEAN = crossunder(teeth, lips) and jaws < teeth

// === INPUT BACKTEST DATE RANGE ===
strategyType = input(defval="Long Only", options=["Long & Short", "Long Only", "Short Only"])

FromMonth = input(defval = 7, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2017)
ToMonth   = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2020, title = "To Year", minval = 2017)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        
window()  => true

// === STRATEGY BUY / SELL ENTRIES ===

// TODO: update the placeholder LONG_SIGNAL_BOOLEAN and SHORT_SIGNAL_BOOLEAN to signal
// long and short entries
buy()  => window() and LONG_SIGNAL_BOOLEAN
sell() => window() and SHORT_SIGNAL_BOOLEAN

if buy()
    if (strategyType == "Short Only")
        strategy.close("Short")
    else
        strategy.entry("Long", strategy.long, comment="Long")

if sell()
    if (strategyType == "Long Only")
        strategy.close("Long")
    else
        strategy.entry("Short", strategy.short, comment="Short")
        

// === BACKTESTING: EXIT strategy ===
sl_inp = input(10, title='Stop Loss %', type=float)/100
tp_inp = input(90, title='Take Profit %', type=float)/100

stop_level = strategy.position_avg_price * (1 - sl_inp)
take_level = strategy.position_avg_price * (1 + tp_inp)

strategy.exit("Stop Loss/Profit", "Long", stop=stop_level, limit=take_level)