SMA RSI & 突然の買い売る戦略

作者: リン・ハーンチャオチャン開催日:2023年12月20日 17:33:04
タグ:

img

概要

この戦略は,主にRSIの平均値と急激な価格変動を使用して,市場のトレンドと逆転点を特定する.主なアイデアは,RSIが過買いまたは過売りされたときにポジションを確立することを検討し,急激な価格変動が発生した場合の逆転機会を探すことである.EMAはフィルターとしても使用される.

原則

  1. RSIのSMAを計算します.RSIのSMAが60を超えたり,40を下回ると,oversoldまたはoversoldとみなされ,リバースポジションが考慮されます.

  2. RSIの変化が一定の値を超えると,それは突然の変化とみなされます.実際の接近価格検証と組み合わせると,逆向きのポジションを確立するための信号として機能します.

  3. フィルタリングのために複数の EMA を使用する. 価格が短期間 EMA を越えた場合にのみ,ロングポジションは考慮されます. 価格が短期間 EMA を下回った場合にのみ,ショートポジションは考慮されます.

  4. RSI平均,突然変化,EMAフィルタリングの組み合わせにより,よりよいエントリーポイントを特定できます.

利点分析

  1. RSI平均を使用すると,過剰購入と過剰販売の状況が正確に判断され,逆転の機会を把握するのに役立ちます.

  2. 突然の変化は,価格の傾向と方向の変化を意味する.この信号を使用することで,エントリのタイミングを向上させることができます.

  3. 複数のレベルのEMAフィルタリングにより,誤った信号をさらに回避し,不必要な損失を減らすことができます.

  4. 決定基準として複数のパラメータを組み合わせることで 戦略の安定性と信頼性が向上します

リスクと緩和策

  1. RSIのパフォーマンスは不安定で,SMAのヒットレートは低い場合もあります.RSIパラメータは最適化したり,他の指標で置き換えることもできます.

  2. 突然の変化は 真の逆転ではなく 短期的な変動かもしれません 判断の精度を高めるために センサーサイクルの長さを増やすことです

  3. EMA方向フィルタリングに遅延がある. 感度を向上させるために短期間EMAをテストする.

  4. 一般的に,この戦略はパラメータ調整に非常に敏感である.最適なパラメータ組み合わせを見つけるために注意深いテストが必要です.リスクを制御するためにストップロスを使用します.

最適化 の 提案

  1. ADXやMACDなどの他の指標を RSIと組み合わせてテストして より良いエントリーポイントを見つけます

  2. 突然の買い/売るシグナルの正しさと安定性を判断するための機械学習アルゴリズムを増やす.

  3. 異なる期間のEMAの複合判断を用いたEMAの方向性フィルタリングをさらに強化する.

  4. 市場変動に基づいて停止損失範囲を動的に調整するための適応型ストップ損失戦略を追加します.

  5. パラメータの最適組み合わせを見つけるためにパラメータの最適化を継続する.評価基準はシャープ比率などかもしれません.

結論

この戦略は,まず,RSI平均を使用して過買い/過売り条件を決定する.突然の変化が発生した場合,逆ポジションが確立される. EMAは補助フィルターとしても使用される.適切なパラメータ設定により,この戦略は市場のトレンドシフトを効果的に決定することができます.全体的に言えば,良好な安定性と実用的な価値があります.継続的なテストと最適化を必要とするさらなる改善の余地があります.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © samwillington

//@version=5


strategy("sma RSI & sudden buy and sell Strategy v1", overlay=true)
price = close
length = input( 14 )
inst_length = input( 10 )
var rbc = 0
var float rsiBP = 0.0
var rsc = 0
var float rsiSP = 0.0
bars = input(10)

lookbackno2 = input.int(20)
rsi_buy = 0
rsi_sell = 0



//EMA inputs

input_ema20 = input.int(20)
ema20 = ta.ema(price, input_ema20)
input_ema50 = input.int(50)
ema50 = ta.ema(price, input_ema50)
input_ema100 = input.int(100)
ema100 = ta.ema(price, input_ema100)
input_ema200 = input.int(200)
ema200 = ta.ema(price, input_ema200)
input_ema400 = input.int(400)
ema400 = ta.ema(price, input_ema400)
input_ema800 = input.int(800)
ema800 = ta.ema(price, input_ema800)


vrsi = ta.rsi(price, length)


hi2 = ta.highest(price, lookbackno2)
lo2 = ta.lowest(price, lookbackno2)

buy_diff_rsi = vrsi - ta.rsi(close[1], length)
sell_diff_rsi = ta.rsi(close[1],length) - vrsi


//RSI high low

var int sudS = 0
var int sudB = 0
var float sudSO = 0.0
var float sudSC = 0.0
var float sudBO = 0.0
var float sudBC = 0.0
var sudBuy = 0
var sudSell = 0 
var countB = 0
var countS = 0



var co_800 = false
var co_400 = false
var co_200 = false
var co_100 = false
var co_50 = false
var co_20 = false

co_800 := ta.crossover(price , ema800)
co_400 := ta.crossover(price , ema400)
co_200 := ta.crossover(price , ema200)
co_100 := ta.crossover(price , ema100)
co_50 := ta.crossover(price , ema50)
co_20 := ta.crossover(price , ema20)

if(ta.crossunder(price , ema20))
    co_20 := false
if(ta.crossunder(price , ema50))
    co_50 := false
if(ta.crossunder(price , ema100))
    co_100 := false
if(ta.crossunder(price , ema200))
    co_200 := false
if(ta.crossunder(price , ema400))
    co_400 := false
if(ta.crossunder(price , ema800))
    co_800 := false
    
if((price> ema800) and (price > ema400))
    if(co_20)
        if(co_50)
            if(co_100)
                if(co_200)
                    strategy.close("Sell")
                    strategy.entry("Buy", strategy.long, comment="spl Buy")
                    co_20 := false
                    co_50 := false
                    co_100 := false
                    co_200 := false



// too much rsi

if(vrsi > 90)
    strategy.close("Buy")
    strategy.entry("Sell", strategy.short, comment="RSI too overbuy")
if(vrsi < 10)
    strategy.close("Sell")
    strategy.entry("Buy", strategy.long, comment="RSI too oversold")


var sudbcount = 0  // counting no. of bars till sudden rise
var sudscount = 0  // counting no. of bars till sudden decrease



if(sudB == 1)
    sudbcount := sudbcount + 1
if(sudS == 1)
    sudscount := sudscount + 1


if((buy_diff_rsi > inst_length) and (hi2 > price))
    sudB := 1
    sudBO := open
    sudBC := close
if((sell_diff_rsi > inst_length) )
    sudS := 1
    sudSO := open
    sudSC := close   

if(sudbcount == bars)
    if(sudBC < price)
        strategy.close("Sell")
        strategy.entry("Buy", strategy.long, comment="sudd buy")
        sudbcount := 0
        sudB := 0
    sudbcount := 0
    sudB := 0
if(sudscount == bars) 
    if(sudSC > price)
        strategy.close("Buy")
        strategy.entry("Sell", strategy.short, comment="sudd sell")
        sudscount := 0
        sudS := 0
    sudscount := 0
    sudS := 0


over40 = input( 40 )
over60 = input( 60 )
sma =ta.sma(vrsi, length)
coo = ta.crossover(sma, over60)
cuu = ta.crossunder(sma, over40)

if (coo)
    strategy.close("Sell")
	strategy.entry("Buy", strategy.long, comment="modified buy")
if (cuu)
    strategy.close("Buy")
	strategy.entry("Sell", strategy.short, comment="modefied sell")
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)

もっと