振動突破戦略

作者: リン・ハーンチャオチャン,日付: 2023年10月27日 16:32:19
タグ:

img

概要

この戦略は ラリー・コナーズの古典的な考えに基づいています 市場の中期振動を把握し,過剰購入または過剰販売されたときに利益を得るために,ダブル移動平均システムを使用します.

戦略の論理

  1. 2期間のRSIを使用して価格が過売れ地域にあるかどうかを判断します.

  2. 長期移動平均 (200期) を使って主要トレンド方向を決定する.価格が長期MAを超えるとのみ開設ポジションを考慮する.

  3. 価格が長期MAより高く,RSIが過売り線を下回ると,市場価格で長期ポジションを開きます.

  4. 価格が短期間MA (5期) を上向きに突破すると,市場価格でロングポジションを閉じて利益を得ます.

さらに,戦略は以下の構成可能なオプションを提示しています.

  • RSI パラメータ:期間の長さ,過買い/過売りレベル

  • MAパラメータ:長期間と短期間

  • RSIMAフィルター: RSIMAを追加して,RSI変動を避ける.

  • ストップ損失:ストップ損失を追加したりしないように設定できます.

利点分析

  1. このダブルMAシステムは 中長期の動向を効果的に追跡できます

  2. RSIは激しい変動の際に 最適なエントリータイミングを逃さないようにします

  3. パラメータの最適化に適した柔軟な構成

  4. 突破戦略だ 信号を見逃す可能性は低い

リスク分析

  1. ダブルMA戦略はパラメータに敏感で,最高のパフォーマンスを達成するために最適化が必要です.

  2. ストップロスのない場合,損失が拡大するリスクがあります.慎重にポジションサイズする必要があります.

  3. 偽のブレイクアウトは,振動する市場での損失をリスクします. MA期間を最適化するか,他のフィルターを追加することを検討してください.

  4. バックテスト 過剰適合リスク 市場と時間間の検証が必要です

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

  1. RSIとMAパラメータの組み合わせをテストし最適化して最適化します

  2. 誤った信号を減らすため 音量ピークのような追加入力フィルターをテストします

  3. 単一の取引損失を制御するために後続ストップ損失を追加します.全体的な収益性への影響を評価します.

  4. 保持期間が異なる影響を評価し,最適値を見つけます.

  5. 耐久性をテストします

概要

この戦略は,ダブルMAトレンドトラッキングとRSIオーバーバイト/オーバーセールを組み合わせて典型的なブレイクアウトシステムを形成する.パラメータ最適化,厳格なリスク管理,強度検証により,強力な定量的な取引ツールになることができます.しかし,トレーダーはバックテストオーバーフィッティングに注意を払い,変化する市場状況に適応するために戦略を改善し続けなければなりません.


/*backtest
start: 2023-09-26 00:00:00
end: 2023-10-26 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("RSI Strategy", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

//Starter Parameters

length = input(title="RSI Lenght", defval=2)
overBoughtRSI = input(title="OverBought Level for RSI",  defval=10)
shortLength = input(title="Short MA Length",  defval=5)
longLength = input(title="Long MA Length",  defval=200)

RuleMRSI=input(title="RSI Moving Average Filter", defval= true)
lengthmrsi=input(title="RSI Moving Average Length",  defval=4)
overBoughtMRSI=input(title="OverBought Level for the Moving Average of the RSI",  defval=30)

Rulestop=input(title="Apply Stop Loss", defval=false)
stop_percentual=input(title="% Stop Loss",  defval=10)

//RSI

vrsi = rsi(close, length)

//Moving Averages

longma = sma(close,longLength)
shortma = sma(close,shortLength)
mrsi=sma(vrsi,lengthmrsi)

//Stop Loss

stop_level = strategy.position_avg_price*((100-stop_percentual)/100)

//Backtest Period
testStartYear = input(2009, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(2, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => true
    
//Strategy

if testPeriod() and (not na(vrsi))
    if  (RuleMRSI==false) and (Rulestop==false)
        if (vrsi<overBoughtRSI) and (close>longma)
            strategy.entry("RsiLE", strategy.long , comment="Open")
        if (close>shortma)
            strategy.close_all()

    if (RuleMRSI==true) and (Rulestop==false)
        if (vrsi<overBoughtRSI) and (close>longma) and (mrsi<overBoughtMRSI)
            strategy.entry("RsiLE", strategy.long , comment="Open")
        if (close>shortma)
            strategy.close_all()

    if (RuleMRSI==false) and (Rulestop==true)
        if (vrsi<overBoughtRSI) and (close>longma)
            strategy.entry("RsiLE", strategy.long , comment="Open")
            strategy.exit("RsiLE", stop = stop_level)
        if (close>shortma)
            strategy.close_all()

    if (RuleMRSI==true) and (Rulestop==true)
        if (vrsi<overBoughtRSI) and (close>longma) and (mrsi<overBoughtMRSI)
            strategy.entry("RsiLE", strategy.long , comment="Open")
            strategy.exit("RsiLE", stop = stop_level)
        if (close>shortma)
            strategy.close_all()

もっと