RSIエントリーとエグジット双方向取引戦略


作成日: 2023-09-28 16:09:39 最終変更日: 2023-09-28 16:09:39
コピー: 2 クリック数: 697
1
フォロー
1617
フォロワー

概要

この戦略は,RSI指標を用いて市場動向を判断し,超買い超売り領域で取引信号を発信し,市場のショートライン調整動きを捕捉することを目的としています.これは,取引信号をフィルタリングし,リスクを制御するために,均線指標とストップ・ストップ・ロジックを組み合わせています.

戦略原則

  1. RSI ((14) の指標値を計算し,超買線を67と設定し,超売線を44と設定する.

  2. RSIがオーバーバイラインを突破すると,売り信号を発信し,RSIがオーバーバイラインを突破すると,買い信号を発信する.

  3. 叠加平均線フィルタは,閉盘価格が昨日の平均価格より低い場合にのみ,RSIで超買いと売り信号を発信し,閉盘価格が昨日の平均価格より高い場合にのみ,RSIで超売りで買い信号を発信する.

  4. ストップ・ストップ・ロジックを設定する. 固定ポイント数ストップ・ストップ・ロジックを選択するか,RSI値に基づいてストップ・ストップ・ストップ・ロジックを選択する.

優位分析

  1. RSIで超買いと超売りを判断し,短線調整の機会を捉える.

  2. 均線でフィルタリングし,トレンドの動きで逆操作を避ける.

  3. ストップ・ストップ・損失を設定し,単発損失を制御する.

  4. 逆転の機会を捉えるために

リスクと解決

  1. RSIは遅滞性があり,誤信号を引き起こす偏差が発生する可能性があります. 解決策は,適切なパラメータの調整または他の指標との組み合わせを使用することです.

  2. 固定ストップポイントが大きすぎたり小さすぎたりする.より柔軟なトレーリングストップの選択が可能です.

  3. 固定ストップは,早めにストップしたり,ストップポイント数が小さすぎたりする可能性がある.RSI値またはATRストップに基づいてストップを考慮することができる.

  4. 振動的なトレンドの動きを効果的にフィルタリングできず,頻繁にポジション開設と損失を引き起こす可能性があります. RSIパラメータを適切に調整したり,他のフィルタリング条件を追加したりできます.

最適化の方向

  1. 異なる周期パラメータのRSI指標の効果をテストする.

  2. RSIのパラメータを調整し,異なる超買超売ラインをテストする.

  3. 移動平均や他のフィルタリング指標を試す

  4. 固定ストップ・ストップと動的ストップ・ストップの効果をテストする.

  5. ストップ・ストップ・損失の値を最適化して,市場変動の法則に適合させる.

  6. 新入場場フィルタリング条件が追加され,震動の予期せぬ展開を防ぎます.

  7. 複数のタイムサイクルを組み合わせて検証することを検討し,信号の質を向上させる.

要約する

この戦略は,RSI指標を使用して,超買い超売り状態を判断し,均等線とストップ・ストップを組み合わせて双方向取引を行う.短期間に市場の逆転の機会を捕捉することができる.パラメータ最適化とフィルター条件の補足により,戦略の収益効果をさらに高め,リスクを制御することができる.この戦略は,ショートラインの変化に敏感で,高周波の取引を求める投資家に適しています.

ストラテジーソースコード
/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//© профешинил хомячело
//@version = 4

strategy("RSI Strategy Professional Хомячело", overlay=false)
length = input( 14 )
overSold = input( 44 )
overBought = input( 67 )
price = open
rsi = rsi(price, length)
band1 = hline(overSold, "overSold12", color=#C0C0C0)
band0 = hline(overBought, "overBought12", color=#C0C0C0)
plot(rsi, "RSI", color=color.red)
fill(band1, band0, color=color.black, transp=90, title="Background")
src = close
a = sma(src, 1)
aaa = strategy.opentrades + 1

n = input(defval = 0.0576923077, title = "AvgPrice - n")
//n = 0.0576923077

buysignal = crossover(rsi, overSold) and (a < (strategy.position_avg_price - n) or strategy.opentrades == 0)
sellsignal = crossunder(rsi, overBought) and (a > (strategy.position_avg_price + n) or strategy.opentrades == 0)


// crossover(rsi, overSold)
// crossunder(rsi, overBought)
if (not na(rsi))
    if(buysignal)
        strategy.entry("LONG", strategy.long, comment = tostring(a) + "\n(" + tostring(aaa) + ")")
        n += 1000
    if(sellsignal)
        strategy.entry("SHORT", strategy.short, comment = tostring(a) + "\n(" + tostring(aaa) + ")")
        n += 1000

//лонги орні       
    if(rsi < 15 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("LONG", strategy.long, comment = "ЙОБАНИЙ НАСРАВ ТА БЕРИ ЛОНГ НА ВСЬО ШО Є НАХУЙ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
    if(rsi < 20 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("LONG", strategy.long, comment = "ЛОНГ НА ВСЮ КОТЛЄТУ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
//шорти орні
    if(rsi > 85 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("SHORT", strategy.short, comment = "ЙОБАНИЙ НАСРАВ ТА БЕРИ ШОРТ НА ВСЬО ШО Є НАХУЙ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
    if(rsi > 80 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("SHORT", strategy.short, comment = "ШОРТ НА ВСЮ КОТЛЄТУ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")


//стоп-лосс і ціль

//rsi
rsion = input(defval = false, title = "Тейк-профіт по RSI")
rcl = input(defval = 73.0, title = "RSI тейк по лонгу")
rcs = input(defval = 44.0, title = "RSI тейк по шорту")
possize = input(defval = 250.0, title = "Маржа")
posp = input(defval = 3.0, title = "Плече")

//tick
ut = input(defval = false, title = "Тейк-профіт")
tar = input(defval = 4500.0, title = "Тейк-профіт у тіках")
us = input(defval = false, title = "Стоп-лосс")
stop = input(defval = 0.0, title = "Стоп-лосс у тіках")
tar:=tar/syminfo.mintick
stop:=stop/syminfo.mintick

if(ut==true and us==false)
    strategy.exit(id="LX", from_entry = "LONG", profit = tar, comment = "ТейкL")
    strategy.exit(id="SX", from_entry = "SHORT", profit = tar, comment = "ТейкS")
if(us==true and ut==false)
    strategy.exit(id="LX", from_entry = "LONG", loss = stop, comment = "СтопL")
    strategy.exit(id="SX", from_entry = "SHORT", loss = stop, comment = "СтопS")
    
if(ut==true and us==true)
    strategy.exit(id="LX", from_entry = "LONG", profit = tar, loss = stop, comment ="Тейк/СтопL")
    strategy.exit(id="SX", from_entry = "SHORT", profit = tar, loss = stop, comment ="Тейк/СтопS")
    
//закриття по rsi
if(rsion == 1 )
    pr = round(((a / strategy.position_avg_price - 1) * possize * posp), 2)
    ppr = round(((a / strategy.position_avg_price - 1) * 100 * posp), 2)
    spr = round((1 - (a / strategy.position_avg_price)) * possize * posp, 2)
    sppr = round((100 - (a / strategy.position_avg_price * 100)) * posp, 2)
    
    if(rsi > rcl)
        strategy.close(id="LONG", comment = "LT\n" + tostring(ppr) + "%\n" + tostring(pr) + "$\n" + tostring(a))
    if(rsi < rcs)
        strategy.close(id="SHORT", comment = "ST\n" + tostring(sppr) + "%\n" + tostring(spr) + "$\n" + tostring(a))