上昇傾向 短期長期トレードファインダー戦略

作者: リン・ハーンチャオチャン,日付: 2023年11月10日11時37分37秒
タグ:

img

概要

この戦略は,RSIインジケーターで上昇傾向の差異パターンを調べて,Bitcoinが反発する可能性のある短期的な機会を特定し,その結果,ロングトレードのための良いエントリーポイントを決定します.

戦略の論理

  1. RSI インジケーターで上昇差を特定する

    • RSI パラメータを定義する (デフォルト 14 期)
    • 現在のRSI値を計算する
    • 次の上昇差があるか確認します.
      • RSIは低水準になりました
      • 価格は同時に低水準に達した
      • RSIは,より高い低値を形成した.
      • 価格が上昇して低くなって
  2. RSI の値 が 限界値以下 で ある か 確認 する

    • RSIの低値値を定義する (デフォルト40).
    • この値を下回る場合,それは長いエントリーポイントをシグナルすることができます.
  3. 閉じる価格が前の低差値を下回っているか確認します.

    • そうであれば,上昇差の買い信号をさらに検証します.
  4. ストップ・ロスの出口条件を定義する

    • ストップ・ロスの割合を設定する (デフォルトは5%)
    • 引き上げがこの割合に達すると退場する
  5. 収益を出す条件を定義する

    • RSI高値設定 (デフォルト75)
    • RSIがこの値を超えると退場する

利点分析

  1. RSI の 差異 を 利用 する こと に よっ て,短期 的 な 値 跳び の 機会 を 効果的に 把握 できる

  2. RSI の低値と組み合わせると,特定のエントリーポイントを決定するのに役立ちます.

  3. Stop loss と take profit の設定はリスクと報酬の管理に役立ちます

  4. この戦略は,ビットコインのRSIシグナルとの実際の取引経験を参考にしており,Bitcoinのロングスカルピングに非常に適しています.

  5. 合理的なパラメータ設定により,戦略は異なる市場状況に適応し,ライブ取引に適しています

リスク分析

  1. RSIの差異は失敗し,誤って識別された場合,取引を損なう可能性があります.

  2. 単一の指標は誤った信号を生成する傾向があるので,他の指標と組み合わせる必要があります.

  3. 適切なパラメータ値を選択する必要があります 不適切な設定は収益性に影響します

  4. 長期取引は全体的なトレンドを考慮し,トレンドに反する取引を避ける必要があります

  5. トレーディングコストに気をつけなければならない 高周波取引は利益に影響を与える

  6. 変化する市場に基づいて,パラメータを定期的にバックテストして最適化すべきです

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

  1. 偽信号を減らすためにフィルター条件の移動平均値などの他の指標を追加することを検討します

  2. 最適な組み合わせを見つけるために各時間枠で異なる期間設定をテストします

  3. トレンド逆転に対する購入を避けるため,より長い時間枠のトレンド分析を組み込む

  4. 利益レベルが上昇するにつれて徐々にストップを上昇させるダイナミックストップロスを実装する

  5. 特定のポジションサイズに基づいてストップ損失パーセントを調整する

  6. 自動パラメータ最適化のための機械学習を導入

結論

この戦略は,RSIの上昇差異を検出し,良いロングエントリーポイントを決定することで,ビットコインの短期的なブーンスの機会を特定することを目的としています.この戦略は,多くの実践的な取引経験を取り入れ,シンプルで効果的なので,ビットコインのスカルピングロングに非常に適しています.しかし,単一の指標に依存することは誤った信号を生む傾向があります.それゆえ,他の指標と組み合わせるべきです.パラメータ最適化,ストップ損失配置,取引コストなどにも注意を払う必要があります.正しく使用した場合,この戦略はライブ取引で非常に利益を得ることができます.


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

//@version=5
strategy("Bullish Divergence Short-term Long Trade Finder", overlay=false)

max_range = 50 
min_range = 5
///pivot_left = 25
pivot_right = 5

//Inputs
src = input(close, title="Source")
rsiBearCondMin = input.int(50, title="RSI Bearish Condition Minimum")
rsiBearCondSellMin = input.int(60, title="RSI Bearish Condition Sell Min")
rsiBullCondMin = input.int(40, title="RSI Bull Condition Minimum")
pivot_left = input.int(25, title="Look Back this many candles")
SellWhenRSI = input.int(75, title="RSI Sell Value")
StopLossPercent = input.int(5, title="Stop loss Percentage")
rsiPeriod = input.int(14, title="RSI Length")
rsiOversold = input.int(30, title="RSI Oversold Level")
rsiOverbought = input.int(70, title="RSI Overbought Level")

//RSI Function/ value 
rsi_value = ta.rsi(src, rsiPeriod)
rsi_hour = request.security(syminfo.tickerid,'60',rsi_value)
rsi_4hour = request.security(syminfo.tickerid,'240',rsi_value)
rsi_Day = request.security(syminfo.tickerid,'D',rsi_value)
plot(rsi_value, title="RSI", linewidth = 2, color = color.black, display =display.all)
hline(50, linestyle = hline.style_dotted)
rsi_ob = hline(70, linestyle=hline.style_dotted)
rsi_os = hline(30, linestyle=hline.style_dotted)
fill(rsi_ob, rsi_os, color.white)
SL_percent = (100-StopLossPercent)/100 

pivot_low_true = na(ta.pivotlow(rsi_value, pivot_left, pivot_right)) ? false : true

//create a function that returns truee/false
confirm_range(x) => 
    bars = ta.barssince(x == true) //counts the number of bars since thee last time condition was true
    min_range <= bars and bars <= max_range // makees sure bars is less than max_range(50) and greater than min_range(5) 


// RSI higher check / low check
RSI_HL_check = rsi_value<rsiBullCondMin and rsi_value > ta.valuewhen(pivot_low_true and rsi_value<rsiBullCondMin, rsi_value,1) and confirm_range(pivot_low_true[1]) 

// price check for lower low
price_ll_check = low < ta.valuewhen(pivot_low_true, low, 1)

bullCond = price_ll_check and RSI_HL_check and pivot_low_true

//pivot_high_true = na(ta.pivothigh(rsi_value, pivot_left, pivot_right))  ? false : true
pivot_high_true = na(ta.pivothigh(rsi_value, pivot_left, pivot_right))   ? false : true

// RSI Lower check / high check ensuring that the RSI dips below 30 to start divergence 
RSI_LH_check = rsi_value < ta.valuewhen(pivot_high_true and rsi_value>rsiBearCondMin, rsi_value,1) and confirm_range(pivot_high_true[1]) //and rsi_value[pivot_right] >= 65

// price check for lower low
price_hh_check = high > ta.valuewhen(pivot_high_true, high, 1)

bearCond = price_hh_check and RSI_LH_check and pivot_high_true and rsi_value[3] > rsiBearCondSellMin

plot(pivot_low_true ? rsi_value : na, offset=-5, linewidth=3, color=(bullCond ? color.green : color.new(color.white, 100)))

plotshape(bullCond ? rsi_value : na , text = "BUY", style =  shape.labelup, location = location.absolute, color = color.green, offset =0, textcolor = color.white )

plot(pivot_low_true ? rsi_value : na, offset=-5, linewidth=3, color=(bearCond ? color.red : color.new(color.white, 100)))

plotshape(bearCond ? rsi_value : na , text = "Sell", style =  shape.labelup, location = location.absolute, color = color.red, offset =0, textcolor = color.white )
//[bbUpperBand, bbMiddleBand, bbLowerBand] = ta.bb(src, bbPeriod, bbDev)

//Entry Condition
longCondition = false

//bullEntry = bullCond and RSI_HL_check and confirm_range(pivot_low_true[1])
if bullCond and close < ta.valuewhen(pivot_low_true, low, 1) and rsi_hour <40 ///and rsi_4hour<40 //and rsi_Day<50
    strategy.entry("Long", strategy.long)
    
//Exit Condition
if (strategy.position_size > 0 and close < strategy.position_avg_price*SL_percent)
    strategy.close("Long")
if (strategy.position_size > 0 and (rsi_value > SellWhenRSI or bearCond))
    strategy.close("Long")


もっと