이 전략의 핵심 아이디어는 RSI 전략에 기초하여 몇 가지 중요한 거래 관리 규칙이 추가되었습니다. 그 중 일부는 중지, 중지, 추적 중지, 및 레버로 추적 중지입니다. 이것은 전략이 재검토 기간 동안 추세 상황에서 더 높은 수익을 얻을 수있게하면서 충격적인 상황에서 손실을 최소화합니다.
이 전략은 먼저 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)