
この戦略の核心思想は,RSI戦略に基づいて,停止,停止,追跡停止,およびレバレッジ追跡停止を含むいくつかの重要な取引管理ルールを追加しました.これは,戦略を反測期間中にトレンドの状況でより高い利益を得ることができ,衝撃の状況で損失を最小限に抑えるようにします.
この戦略は,まずRSI指標を計算し,RSIが超買線を下回るときは多,超売線上回るときは空にする.
複数のシグナルをトリガーした後,その時の最高価格を追跡ストップの参照点として記録する. 価格が追跡ストップのマイナスストップの幅より低い場合は,平仓を停止する.
空調信号が触発された後,その時の最低価格を追跡ストップの参照点として記録する.価格が追跡ストップのポイントとストップ幅より高い場合は,平仓を停止する.
固定ストップとストップダストを設定する. 価格がストップダストに達した場合,ストップダストをクリアする. ストップダストに達した場合,クリアダストをクリアする.
さらに,レバレッジ設定によるレバレッジ追跡ストップライン. 価格がレバレッジ追跡ストップラインに触れた場合,清算ストップ.
トレンド上行時に最高ストップを追跡し,下行時に最低ストップを追跡することで,固定ストップストップ距離と組み合わせて,トレンド行情でより高い利益を得ることができます.また,レバレッジストップを追跡する設定は,損失の拡大を最大限に防ぐことができます.
この戦略の最大の利点は,RSI戦略の優位性を発揮しながら,より多くの取引管理規則を導入し,リスクをより良く管理できる点にあります.
この戦略の利点は以下の通りです.
トレンドの状況では,トレンドの利益を追跡するストップを継続的に追跡することができ,その結果,より高い利益を得ることができます.
固定ストップ・ストラストは,トレンドが逆転したときに全利益が閉じ込められることを避けるため,利益の一部をロックします.
杆追跡ストップは,損失の拡大を防止し,リスクを制御する.
複数のストップ方法の組み合わせは,異なる市場環境でそれぞれの優位性を発揮し,全体的に戦略の安定性を高めます.
戦略のパラメータは,異なる取引品種と市場環境に対応して柔軟に調整できます.
策略の論理は明確で分かりやすく,検証,最適化,適用が容易です.
この戦略の主なリスクは以下のものです.
RSI戦略には,誤取引のリスクがあり,ストップダスが引き起こされる可能性がある. RSIパラメータを調整することで最適化することができます.
止損点の近くの振動が頻繁に止損を誘発する可能性がある. 止損距離を適切に拡大することで回避できる.
ストップ距離は,トレンドの状況における利益を完全にロックすることはできません.他の指標と組み合わせて,トレンドの終了時刻を判断できます.
固定ストップ距離が小さすぎて,完全に損失を回避できないかもしれない.振動ストップまたは動的ストップを採用することを考えることができる.
値が高すぎると,値追跡ストロップが開設価格に近すぎることになりうる.値設定は適切に低下させるべきである.
回帰の時間帯は,将来の市場状況を完全に代表することはできません. リスク管理をよくし,異なる時間帯の効果を検証する必要があります.
上記のリスクは,パラメータ調整,ストップ・ローズ・メカニズムの最適化,リスクコントロールなどの方法によって緩和できます.しかし,いかなる戦略も,市場リスクを完全に回避することはできません.リスクコントロールを行う必要があります.
この戦略は,以下の方向からさらに最適化できます.
RSIパラメータを最適化し,誤取引の確率を下げる.異なる市場の最適パラメータの組み合わせをテストすることができる.
KD,MACDなど,RSIと組み合わせた複数のフィルターを試す.
機械学習などの方法を使用して,止損停止パラメータを動的に最適化します.
振動停止,平均停止,ダイナミック停止など,より複雑な止損方法を試す.
リベアリングレベルの設定を最適化し,利回りとリスク管理に対する異なるリベアリングの影響.
α-Dual Thrust 等のパラメータを市場環境の変化に応じて自動的に調整する.
取引量エネルギーなどの他の要因と組み合わせてトレンドの持続性を判断する.
ディープラーニングなどの技術を活用して,より安定で説明可能な損失防止方法を開発する.
異なる品種や時期のデータをテストし,戦略の健全性を評価する.
この戦略は,RSI戦略の基礎に複数の止損方法を追加し,トレンドの利益とリスク管理における二重の役割を充分に発揮する.戦略の最適化の余地はまだ広大であり,戦略の優位性を高め,リスクを減らすために多方面から取り組むことができる.止損戦略の思想は汎用性があり,より多くの戦略と取引品種に拡張でき,研究に値する方向です.継続的な最適化と検証により,止損戦略は機械取引システムの非常に重要な環となる.
/*backtest
start: 2022-11-06 00:00:00
end: 2023-11-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("Adding some essential components to a prebuilt RSI strategy", overlay=true)
/////////////// Component Code Start ///////////////
testStartYear = input(2011, "Backtest Start Year")
testStartMonth = input(8, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear = input(2016, "Backtest Stop Year")
testStopMonth = input(9, "Backtest Stop Month")
testStopDay = input(29, "Backtest Stop Day")
// testStopDay = testStartDay + 1
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)
testPeriod() => true
/////////////// Component Code Stop ///////////////
///////////// RSI component /////////////
length = input( 14 )
overSold = input( 30 )
overBought = input( 70 )
price = close
vrsi = rsi(price, length)
notna = not na(vrsi)
/////////////// STRATEGY ///////////////
ts = input(99999, "Trailing Stop") / 100
tp = input(99999, "Take Profit") / 100
sl = input(99999, "Stop Loss") / 100
long = notna and crossover(vrsi, overSold)
short = notna and crossunder(vrsi, overBought)
last_long = long ? time : nz(last_long[1])
last_short = short ? time : nz(last_short[1])
long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)
last_open_long_signal = long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal = short_signal ? open : nz(last_open_short_signal[1])
last_long_signal = long_signal ? time : nz(last_long_signal[1])
last_short_signal = short_signal ? time : nz(last_short_signal[1])
in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal
last_high = not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low = not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])
long_ts = not na(last_high) and high <= (last_high - ts) //and high >= last_open_long_signal
short_ts = not na(last_low) and low >= (last_low + ts) //and low <= last_open_short_signal
long_tp = high >= (last_open_long_signal + tp)
short_tp = low <= (last_open_short_signal - tp)
long_sl = low <= (last_open_long_signal - sl)
short_sl = high >= (last_open_short_signal + sl)
leverage = input(200, "Leverage")
long_call = last_open_long_signal - (0.8 + 0.2 * (1/leverage)) / leverage * last_open_long_signal
short_call = last_open_short_signal + (0.78 + 0.2 * (1/leverage)) / leverage * last_open_short_signal
long_call_signal = low <= long_call
short_call_signal = high >= short_call
if testPeriod()
strategy.entry("Long", strategy.long, when=long_signal)
strategy.entry("Short", strategy.short, when=short_signal)
// plot(long_call, color=red)
// plot(short_call, color=green)
strategy.close("Long", when=long_call_signal)
strategy.close("Short", when=short_call_signal)
strategy.close("Long", when=long_tp)
strategy.close("Short", when=short_tp)
strategy.close("Long", when=long_sl)
strategy.close("Short", when=short_sl)
strategy.close("Long", when=long_ts)
strategy.close("Short", when=short_ts)