크로스 사이클 추세 추적 정량적 전략


생성 날짜: 2023-12-15 15:59:37 마지막으로 수정됨: 2023-12-15 15:59:37
복사: 0 클릭수: 369
1
집중하다
1166
수행원

크로스 사이클 추세 추적 정량적 전략

개요

이 전략은 가격 추세를 판단하는 PSAR 지표, 추세 강점을 판단하는 ADX 지표, RSI 지표 오버 바이 오버 세일 영역과 CMF 지표를 판단하는 자금 흐름을 종합적으로 사용하여, 전주기간의 추세를 추적하는 양적 거래 전략을 구성한다. 이 전략은 가격이 교정 돌파구가 발생하여 새로운 추세 방향을 형성하는 것을 판단 할 때 신속하게 위치하고, 후속 추세에서 지속적으로 추적하며, 주요 추세 수익을 확보하는 동시에 프로세스 필터링 조건을 설정하여 포지션 위험을 줄인다.

전략 원칙

이 정책의 주요 판단 규칙은 다음과 같습니다.

  1. PSAR 지표를 사용하여 가격이 상승 추세에 있는지 여부를 판단하고, PSAR 하락은 상승 추세를 끝으로 하락으로 전환하는 것으로 간주됩니다.

  2. RSI 지표는 중도 50보다 높은 것을 요구하며, 오버소드 영역이 형성되는 가짜 브레이크를 필터링합니다.

  3. ADX는 자신의 EMA 평균보다 높게 요구하며, 트렌드 분석 결과가 지속되는 신호를 나타냅니다.

  4. CMF 요구값이 0보다 크면, 자금 유입으로 판단됩니다.

위의 네 가지 조건이 충족되면 구매 신호가 생성됩니다. RSI가 50보다 낮고 ADX가 EMA 평균선보다 낮고 CMF가 0보다 작을 때 판매 신호가 생성됩니다.

이 전략은 종합적으로 가격 추세 방향, 추세 강도, 과매매 상태 및 자본이 여러 차원으로 흐르는 거래 규칙을 설정합니다. 거래 신호를 생성할 때 엄격한 논리적 판단을 설정하여 가짜 돌파구를 효과적으로 필터링하여 높은 확률로 지속 가능한 추세 방향을 확보합니다.

우위 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 다양한 지표 설정 거래 규칙과 결합하여 가짜 침입을 효과적으로 방지하고 거래 신호의 품질을 보장합니다.

  2. 신생 트렌드의 방향을 빠르게 파악하고 이를 추적하여 트렌드 프로세스의 이익을 충분히 파악할 수 있습니다.

  3. 필터링 조건을 추적하는 프로세스를 설정하여 위험을 효과적으로 제어하고 추적 효과를 보장합니다.

  4. 추세 강도 지표 판단과 함께, 교정 곤경에 빠지는 것을 피할 수 있다.

위험 분석

이 전략에는 다음과 같은 위험들이 있습니다.

  1. 단일 전략은 위험을 축적하기 쉽기 때문에 포지션을 적절하게 조정하여 전체적인 위험을 제어해야합니다.

  2. 필터링 조건의 변화에 대해 주의를 기울여야 하며, 조건이 취소되면 손실 삭감이 발생하지 않도록 해야 합니다.

  3. 이 전략은 중장기선을 주로 하고 있으며, 단기 콘텐츠는 변동의 영향을 받기 때문에 손실의 위험이 발생한다.

이에 대응하는 위험 관리 조치에는: 포지션 관리 규칙을 최적화, 위험 예보 라인을 설정, 적절히 느슨한 스톱 라인 거리 등이 포함된다.

최적화 방향

이 정책에는 다음과 같은 최적화 공간이 있습니다.

  1. 최적화 매개 변수 설정, 현재 매개 변수 설정은 상대적으로 주관적이며, 기계 학습 방법을 도입하여 자동으로 최적화 할 수 있습니다.

  2. 포지션 관리 모듈을 추가하여 위험 상황에 따라 포지션을 동적으로 조정할 수 있습니다.

  3. 추적 스톱, 시간 스톱, 브레이크 스톱과 같은 스톱 메커니즘의 최적화를 추가하십시오.

요약하다

이 전략은 다양한 지표 판단 규칙을 통합하여 신생 트렌드의 신속한 위치 및 지속적인 추적을 구현하고, 양적 거래가 트렌드와 자금과 결합한 트렌드 및 자금과 같은 다차원 분석의 효과를 검증합니다. 이 전략은 주기 간 트렌드 추적의 기본 전략으로 지수적으로 사용할 수 있으며, 매개 변수 및 모듈 최적화 후 안정적인 중기간의 수직화 전략으로 구성 할 수 있습니다.

전략 소스 코드
/*backtest
start: 2023-11-14 00:00:00
end: 2023-12-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("psar+ adx + cmf + rsi Strategy", overlay=true,initial_capital = 1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent , commission_value=0.1 )

start = input(1.02)
increment = input(1.02)
maximum = input(1.2)
var bool uptrend = na
var float EP = na
var float SAR = na
var float AF = start
var float nextBarSAR = na
if bar_index > 0
	firstTrendBar = false
	SAR := nextBarSAR
	if bar_index == 1
		float prevSAR = na
		float prevEP = na
		lowPrev = low[1]
		highPrev = high[1]
		closeCur = close
		closePrev = close[1]
		if closeCur > closePrev
			uptrend := true
			EP := high
			prevSAR := lowPrev
			prevEP := high
		else
			uptrend := false
			EP := low
			prevSAR := highPrev
			prevEP := low
		firstTrendBar := true
		SAR := prevSAR + start * (prevEP - prevSAR)
	if uptrend
		if SAR > low
			firstTrendBar := true
			uptrend := false
			SAR := max(EP, high)
			EP := low
			AF := start
	else
		if SAR < high
			firstTrendBar := true
			uptrend := true
			SAR := min(EP, low)
			EP := high
			AF := start
	if not firstTrendBar
		if uptrend
			if high > EP
				EP := high
				AF := min(AF + increment, maximum)
		else
			if low < EP
				EP := low
				AF := min(AF + increment, maximum)
	if uptrend
		SAR := min(SAR, low[1])
		if bar_index > 1
			SAR := min(SAR, low[2])
	else
		SAR := max(SAR, high[1])
		if bar_index > 1
			SAR := max(SAR, high[2])
	nextBarSAR := SAR + AF * (EP - SAR)

//rsi strat
length = input( 50 )
middle_RSI=input(49)
price = close
vrsi = rsi(price, length)

//cmf
lengthCMF = input(20, minval=1)
ad = close==high and close==low or high==low ? 0 : ((2*close-low-high)/(high-low))*volume
mf = sum(ad, lengthCMF) / sum(volume, lengthCMF)

//ADX
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
	minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
ema_length=input(10)
ema_sig= ema(sig,ema_length)


long = not uptrend  and vrsi > middle_RSI and sig > ema_sig   and mf>0 
short= uptrend   and vrsi < middle_RSI and sig<ema_sig and mf<0

strategy.entry("long",1,when=long)
strategy.close('long',when=short)