역전과 비교적 상대적 강도에 기초한 양적 전략

저자:차오장, 날짜: 2023-12-13 17:17:10
태그:

img

전반적인 설명

이 전략은 먼저 울프 젠센의 책?? How I Tripped My Money in the Futures Market?? 183 페이지에서 제안한 반전 전략을 비교 상대 강도 지표와 결합하여 강력한 신호를 얻습니다. 결합 전략은 반전과 비교 상대 강도에 기반한 양적 전략?? 이라고 불립니다.

이 전략의 주요 아이디어는 동시에 여러 가지 요인에 의해 판단하는 것입니다. 역전 요인과 비교 상대 강도 신호를 결합함으로써 전략의 안정성을 향상시키기 위해 둘 다 동일한 신호를 할 때만 구매 또는 판매 명령을 할 것입니다.

전략 원칙

첫 번째 부분은 역전 전략입니다. மூ계 가격이 지난 2 일 동안 지속적으로 상승하고 9 일 스토카스틱 슬로우 라인이 50 이하인 경우 전략이 길어집니다.

두 번째 부분은 비교 상대 강도 지표이다. 이 지표는 목표 주식과 벤치마크 지수 사이의 N 일 폐쇄 가격 변화율의 이동 평균을 계산하고 미리 설정된 구매 구역, 판매 구역 및 폐쇄 구역과 비교한다. 지표가 구매 구역을 넘을 때 길게, 판매 구역 아래로 떨어지면 짧게, 그리고 지표가 닫기 구역 아래로 떨어질 때 길게, 지표가 닫기 구역 아래로 떨어질 때 짧게, 지표가 닫기 구역 위에 올라갈 때 포지션을 닫는다.

이 결합 전략은 동시에 두 당사자의 신호를 판단합니다. 두 사람이 동일한 신호를 (두 사람이 구매하거나 두 사람이 판매) 할 때만 구매 또는 판매 명령을 할 것입니다.

이점 분석

이 전략은 반전 요인과 상대 강도 요인의 장점을 결합합니다. 반전 전략은 단기간에 극단적 인 상황을 포착 할 수 있습니다. 상대 강도 전략은 더 넓은 시장의 주요 추세를 파악 할 수 있습니다. 두 전략의 신호는 신뢰성을 향상시키고 소음으로 인한 일부 잘못된 신호를 필터링 할 수 있습니다.

또한, 과반 구매 및 과반 판매 구역을 구분하는 지표로서 스토카스틱 지표는 반전 지점을 더 잘 결정할 수 있습니다. 이동 평균과 같은 트렌드 지표와 함께 사용하면 더 성숙한 복합 전략을 형성 할 수 있습니다.

위험 분석

역전 전략의 가장 큰 위험은 시장 역전의 시기를 결정할 수 없다는 것입니다. 이는 시장 역전 이후에도 지속적인 손실을 초래할 수 있습니다. 이 경우 상대적 강도 지표가 주요 추세가 변경되었는지 판단 할 수 있습니다.

상대 강도 전략의 위험은 너무 많은 잘못된 신호를 생성 할 수있는 부적절한 매개 변수 설정에 있습니다. 이 경우 역전 전략은 불필요한 거래를 줄이기 위해 필터링 역할을 할 수 있습니다.

최적화 방향

이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.

  1. 더 많은 반전 요인을 테스트하여 더 나은 반전 전략을 찾습니다. 현재는 간단한 N-day 새로운 높은/저한 통계 전략을 사용합니다.

  2. 현재 설정은 주관적이고 최적화되지 않을 가능성이 있기 때문에 최적의 매개 변수 조합을 찾기 위해 상대 강도 지표에 대한 매개 변수를 테스트하고 최적화하십시오.

  3. 스톱 로스 전략을 추가하십시오. 현재 스톱 로스가 없습니다. 합리적인 스톱 로스를 추가하면 하향 위험을 제어 할 수 있습니다.

  4. 서로 다른 벤치마크 인덱스를 테스트하여 대상 주식에 대한 상대적 강도를 계산하고 가장 적합한 인덱스를 찾습니다.

결론

이 전략은 거래에 대한 반전 요인과 상대적 강도 요인을 결합합니다. 신호 품질을 향상시키기 위해 이 둘의 장점을 활용하고 비교적 성숙한 결합 전략입니다. 매개 변수 조정, 스톱 로스 전략을 추가하고 더 나은 결과를 달성하기 위해 전략 조합 방법을 조정하여 최적화 할 수있는 많은 공간이 있습니다.


/*backtest
start: 2022-12-06 00:00:00
end: 2023-12-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 30/10/2019
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
// Comparative Relative Strength Strategy for ES
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos

CRS(a, b, len, BuyBand, SellBand, CloseBand) =>
    pos = 0.0
    as = security(a, timeframe.period, close) 
    bs = security(b, timeframe.period, close) 
    nRes = sma(as/bs, len)
    pos := iff(nRes > BuyBand, 1,
	         iff(nRes < SellBand, -1,
	          iff(pos[1] == 1 and nRes < CloseBand, 0,
    	       iff(pos[1] == -1 and nRes > CloseBand, 0, nz(pos[1], 0)))))
    pos

strategy(title="Combo Backtest 123 Reversal & Comparative Relative Strength", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
a = syminfo.tickerid 
b = input("BTC_USDT:swap", type=input.symbol) 
LengthCRS = input(10) 
BuyBand = input(0.9988, step = 0.0001)
SellBand = input(0.9960, step = 0.0001)
CloseBand = input(0.9975, step = 0.0001)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posCRS = CRS(a, b, LengthCRS, BuyBand, SellBand, CloseBand)
pos = iff(posReversal123 == 1 and posCRS == 1 , 1,
	   iff(posReversal123 == -1 and posCRS == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

더 많은