
この戦略は,市場におけるトレンドと反転点を識別するために,主にRSIの平均値と価格の突発的な変化を使用します. 核心的な考え方は,RSIが過剰に買い過ぎている場合にポジションを考慮し,突発的な価格の変化が発生したときに反転の機会を探すことである. 同時に,フィルタリング信号のためのEMAの使用を補助します.
RSIの平均値SMAを計算する.RSIのSMAが60を上下すると,超買いと超売り現象とみなされ,反転開設を検討する.
RSIの変動が一定の値を超えると,突発的な変化が発生したと考えられる.実際の閉店価格の検証と組み合わせた後,反転ポジションの確立の信号として.
EMAの多段フィルターを使用すると,価格がより短い周期のEMAを穿過するときにのみ,多頭を構築することを考慮する.価格がより短い周期のEMAを穿過するときにのみ,空頭を構築することを考慮する.
RSIの平均値,突発的な変化,そしてEMAのフィルタリングを組み合わせて,ポジションの最適な位置を探します.
RSIの平均値を使用すると,過剰買いと過剰売りがより正確に判断でき,反転の機会を捉えるのに役立ちます.
価格の急激な変動は,価格の動向や方向の変化を予告する傾向があり,このシグナルを使用すると,入場のタイムライン性が向上する.
EMAの多段フィルタは,誤信号をさらに回避し,不必要な損失を減らすことができます.
戦略の安定性と信頼性を高めるために,複数のパラメータを総合的に判断基準として使用できます.
RSIは不安定で,SMA値のヒット率は低い.RSIのパラメータを適切に最適化したり,他の指標を使用して置き換えることができます.
突発的な変化は短期的な振動であり,本当の反転ではない.感受周期の長さを増やして判断の正確性を高めることができる.
EMAの方向フィルタには遅延性がある.より短い周期のEMAをテストすることで感度が向上する.
全体として,この戦略はパラメータの調整に比較的敏感であり,最適なパラメータの組み合わせを探すために慎重にテストする必要があります. リスク管理のために,ストップと連携する必要があります.
ADX,MACDなどの他の指標をRSIと組み合わせてテストして,より優越した入場ポイントを探してください.
機械学習のアルゴリズムを導入し,モデル訓練により,突発的な買入シグナルの真性と安定性を判断する.
EMA方向のフィルタリングの効果をさらに強化し,例えば,異なる周期EMAの総合判断を改善する.
市場波動の大きさに応じてストップを動的に調整できる自己適応ストップ戦略を追加します.
パーメータを最適化し続け,最適なパラメータの組み合わせを探します.最適化評価基準は,シャープ比率なども考慮できます.
この戦略は,まず,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)