
この戦略は,RSI指標に基づいて多空の自動取引システムを設計した.このシステムは,RSIが超買超売りしたときに自動的に入場し多空をしたり,特定の条件が誘発されたときに積極的に止損を退場させることができる.
この戦略は,RSI指標を使用して市場の超買い超売り現象を判断する.具体的には,RSI指標が設定された超売りラインを下回ったときに多入し,RSI指標が設定された超買いラインを超えたときに空売り入りする.
さらに,この戦略は,出場条件を設定しています. オーバーの後に,RSI指標が再びオーバーバイラインを突破すると,多項のストップオフを誘発します. 同様に,空の後に,RSI指標が再びオーバーセールラインを突破すると,空券のストップオフを誘発します.
この戦略の最大の利点は,RSI指標を用いて市場の過剰買いと過剰売りを判断することにある.これは,量化取引におけるより成熟した信頼性の高い技術分析方法である.この戦略は,単純な移動平均戦略と比較して,市場の転換点をより正確に捕捉し,取引システムの利潤の余地を増やすことができる.
さらに,この戦略は,外場条件を設定し,一方向的な市場状況でもたらされる損失リスクを効果的に制御します.これは,従来のトレンドフォロー戦略と大きく対照的に,ポジションを保持する被套状態の発生を防ぐことができます.
この戦略の最大のリスクは,RSI指標から発せられた取引信号が誤判される可能性がある状況にある.いかなる技術指標も,市場動向を100%正確に判断することはできません.RSI指標も例外ではありません.RSIが誤判して超買い超売り信号を上回ると,この戦略は誤入場を生じます.
このようなリスクを軽減するために,この戦略は止損ラインを設定している.しかし,一方的な状況では,止損ラインが誘発される確率は高くなります.このとき,人工介入が必要で,誤ったポジションを手動で閉鎖します.全体的に,この戦略は自動取引システムであり,最大限の効果を出すために人工監視と調整も必要である.
この戦略は,さらに改善できる余地があります.
複数の指標を組み合わせて入場確認の信号を出し,RSI指標が単独で判断した結果による誤入場を回避する.例えば,移動平均指標なども加えることができる.
RSIパラメータを最適化し,より適切なRSI長さのパラメータを探し,超買超売判断をより正確にする.
ストップラインの設定を最適化し,最大限の損失を回避しながら,ストップラインが過度に敏感でないことを確認してください.
全体として,このRSIベースの自動取引戦略は,過剰買いと過剰販売の市場状況を効果的に識別する利点を持っています. RSIの極端なレベルの間に多頭と空頭位置に入ることで,市場の反転から利益を得ることを目的としています. 止損メカニズムは,強力な一方向のトレンドで損失を制限するのに役立ちます. しかし,RSI信号を誤判するリスクは依然として存在します. 確認された指標,RSIパラメータ,および止損位置のさらなる最適化は,戦略の収益性と風險制御能力を向上させることができます. すべての自動システムと同様に,特別な状況では,市場には依然として人工監視と介入が必要です.
/*backtest
start: 2023-02-22 00:00:00
end: 2024-02-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Soran Strategy 2 - LONG SIGNALS", pyramiding=1, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=50, overlay=false)
// ----------------- Inputs ----------------- //
reso = input(title="Resolution", type=input.resolution, defval="")
length = input(20, title="RSI Length", type=input.integer)
ovrsld = input(30, "RSI Oversold level", type=input.float)
ovrbgt = input(85, "RSI Overbought level", type=input.float)
lateleave = input(28, "Number of candles", type=input.integer)
// lateleave : numbers of bars in overbought/oversold zones where the position is closed. The position is closed when this number is reached or when the zone is left (the first condition).
// best parameters BTCUSDTPERP M15 : 20 / 30 / 85 / 28
stratbull = input(title="Enter longs ?", type = input.bool, defval=true)
stratbear = input(title="Enter shorts ?", type = input.bool, defval=true)
stratyear = input(2020, title = "Strategy Start Year")
stratmonth = input(1, title = "Strategy Start Month")
stratday = input(1, title = "Strategy Start Day")
stratstart = timestamp(stratyear,stratmonth,stratday,0,0)
// --------------- Laguerre ----------------- //
laguerre = input(title="Use Laguerre on RSI ?", type=input.bool, defval=false)
gamma = input(0.06, title="Laguerre Gamma")
laguerre_cal(s,g) =>
l0 = 0.0
l1 = 0.0
l2 = 0.0
l3 = 0.0
l0 := (1 - g)*s+g*nz(l0[1])
l1 := -g*l0+nz(l0[1])+g*nz(l1[1])
l2 := -g*l1+nz(l1[1])+g*nz(l2[1])
l3 := -g*l2+nz(l2[1])+g*nz(l3[1])
(l0 + 2*l1 + 2*l2 + l3)/6
// ---------------- Rsi VWAP ---------------- //
rsiV = security(syminfo.tickerid, reso, rsi(vwap(close), length))
rsiVWAP = laguerre ? laguerre_cal(rsiV,gamma) : rsiV
// ------------------ Plots ----------------- //
prsi = plot(rsiVWAP, color = rsiVWAP>ovrbgt ? color.red : rsiVWAP<ovrsld ? color.green : color.white, title="RSI on VWAP", linewidth=1, style=plot.style_line)
hline = plot(ovrbgt, color = color.gray, style=plot.style_line)
lline = plot(ovrsld, color = color.gray, style=plot.style_line)
fill(prsi,hline, color = rsiVWAP > ovrbgt ? color.red : na, transp = 30)
fill(prsi,lline, color = rsiVWAP < ovrsld ? color.green : na, transp = 30)
// ---------------- Positions: only shows Buy and close Buy positions --------------- //
timebull = stratbull
timebear = stratbear
strategy.entry("Long", true, when = timebull and crossover(rsiVWAP, ovrsld), comment="")
strategy.close("Long", when = timebull and crossover(rsiVWAP, ovrbgt)[lateleave] or crossunder(rsiVWAP, ovrbgt), comment="")