
この戦略は,株式が超買い超売の市場状態を識別するために,RSI指標を使用し,超買区でデッドフォークを形成し,超売り区で金フォークを形成し,指数ベースの反転取引戦略に属します. この戦略は,トレンド追跡ストップと固定ストップストップを組み合わせて,取引リスクを効果的に制御できます.
この戦略の取引シグナルは,RSI指標の金叉死叉に基づくものです. RSI指標は,一般的に30を超売線,70を超買線として使用します. RSI指標の上の超売線を突破すると,買取シグナルが生成されます.
入場後,戦略は,最高価格または最低価格を継続的に更新し,一定パーセントを停止点として残すことで,パーセントのストップ追跡方法を採用する.また,固定のストップストップの距離を採用し,目標利益または最大損失に達したときに停止する.この組み合わせは,取引リスクをうまく制御する.
この戦略の利点は以下の通りです.
RSI指標を使って,超買超売の領域を判断することは,比較的成熟した取引技法であり,市場の逆転点をより正確に捉えることができます.
金叉死叉法により,部分的なノイズ取引信号をフィルターして取引をより信頼性のあるものにする.
トレンド・トラッキング・ストップと組み合わせると,利益を最大限に引き込める一方で,単一損失を減らすために,迅速にストップすることもできます.
固定ストップ・ストップ・ロスの距離は,単一取引のリスクを効果的に制御することもできます.
全体として,この戦略は明確で,理解しやすく,実行しやすく,量子取引の初心者にとって適しています.
この戦略には以下のリスクもあります.
RSI指標は誤信号を発生しやすく,技術的な形状の破裂の可能性が高く,ストップダスのトリガーにつながる可能性があります.
固定ストップ・ストップ・損失距離は,市場の波動程度に合わせて調整できない.早めにストップしたり,ストップ・損失を拡大したりする可能性があります.
パーセンテージ・ストップ・ロスは,価格の最高点や最低点のみを追跡し,過度に過激になり,利益が不足する可能性があります.
追溯データ適合リスク。この戦略のパラメータは,歴史データに対して最適化され,実際のアプリケーションで劣ったパフォーマンスを発揮することがあります。
取引の頻度が高くなり,取引費や滑り場のリスクが増加する可能性があります.
この戦略は以下の方向から最適化できます.
RSIパラメータを最適化して,最適な指標パラメータの組み合わせを探し,信号の質を向上させる.
他の指標のフィルタを追加し,多指標共振を形成し,信号の正確性を向上させる.
市場波動に応じて自動でストップ・ストップの位置を調整する自己適応のストップ・ストップ・メカニズムを採用する.
取引頻度制御モジュールを追加し,取引回数を削減し,取引費用を削減します.
資金管理モジュールを追加し,単一取引の規模を制御し,単一損失を減らす.
より長い時間周期で反測を行い,パラメータの安定性を検査する.
この戦略は,全体として典型的な反転取引戦略であり,RSI指標を使用して超買超売り領域を判定し,金叉死叉方式で取引信号を生成する.および,トレンド追跡ストップと固定ストップストップを使用してリスクを制御する.この戦略の論理は明確で,実行しやすく,量化取引初心者の学習と実践に適しています.しかし,一定の偽信号リスクとパラメータ最適化のリスクも存在し,実際の使用の前に戦略の検証と最適化を継続する必要があります.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// LOVE JOY PEACE PATIENCE KINDNESS GOODNESS FAITHFULNESS GENTLENESS SELF-CONTROL
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// Author: © JoshuaMcGowan
// Taken from https://www.tradingview.com/script/GbZGYi6l-Adding-some-essential-components-to-a-prebuilt-RSI-strategy/
// Just updated to compile in version 4.
//@version=4
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(2100, "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=input.bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)
testPeriod() => true
/////////////// Component Code Stop ///////////////
// Replace RSI Component, Long/Short, and Long Signal/Short Signal conditions with your trade setup components.
///////////// 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
// Update this with your setup.
long = notna and crossover(vrsi, overSold)
short = notna and crossunder(vrsi, overBought)
last_long = 0
last_short = 0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])
// Update this to reflect your setup.
long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)
float last_open_long_signal = 0
float last_open_short_signal = 0
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 = 0
last_short_signal = 0
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
float last_high = 0
float last_low = 0
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=color.red)
// plot(short_call, color=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)