이 전략은 가격 동향을 판단하기 위해 PSAR, 추세 강도를 판단하기 위해 ADX, 과잉 구매 및 과잉 판매 구역을 파악하기 위해 RSI, 그리고 주기를 넘나들며 내일 추세를 따르는 양적 거래 전략을 구축하기 위해 자금 흐름을 판단하기 위해 CMF를 결합합니다. 가격이 통합을 깨고 새로운 추세를 형성 할 때 새로운 추세 방향을 빠르게 파악하고 추세를 추적합니다. 주요 추세 이득이 포착되는 것을 보장하면서 보유 위험을 줄이기 위해 필터링 조건도 설정됩니다.
이 전략의 주요 판단 규칙은 다음과 같습니다.
PSAR 지표를 사용하여 가격이 상승 추세에 있는지 판단합니다. PSAR
RSI가 50의 중간 지점을 넘어야 합니다. 과잉 판매 구역에서 발생하는 가짜 브레이크를 필터링하기 위해서요.
ADX가 EMA 라인 위에 있어야 합니다. 트렌드 분석에서 지속 가능한 신호를 나타냅니다.
CMF가 0보다 크도록 요구합니다. 증가한 자금 유입을 판단합니다.
사기 신호는 위의 네 가지 조건이 모두 충족되면 생성됩니다. 판매 조건은 PSAR가 가격 이상으로 상승하고 RSI가 50 이하로 떨어지고 ADX가 EMA 이하로 떨어지고 CMF가 0 이하로 떨어지면 발생합니다.
이 전략은 거래 규칙을 설정 할 때 가격 트렌드 방향, 트렌드 강도, 과소 구매/ 과소 판매 상태 및 자금 흐름을 포괄적으로 고려합니다. 거래 신호를 생성 할 때 엄격한 논리적 규칙을 설정함으로써 잘못된 브레이크를 효과적으로 필터링하고 높은 확률의 지속 가능한 트렌드 방향을 파악 할 수 있습니다.
이 전략의 주요 장점은 다음과 같습니다.
거래 규칙을 설정하는 데 여러 지표를 결합하면 잘못된 브레이크를 효과적으로 예방하고 신호 품질을 보장 할 수 있습니다.
급속히 성장하는 트렌드 방향을 파악하고 추적하면 대부분의 트렌드 수익을 얻을 수 있습니다.
프로세스 필터링 조건을 설정하면 위험을 효과적으로 제어하고 추적 효과를 보장 할 수 있습니다.
트렌드 강도를 고려하면 거래 범위의 혼잡을 피할 수 있습니다.
이 전략의 주요 위험은 다음과 같습니다.
단일 전략 축적은 포트폴리오 위험을 야기하며 적절한 포지션 크기를 요구합니다.
추적 중 필터링 상태 변경을 면밀히 모니터링하여 취소 시 손실을 피합니다.
이 중장기 전략은 단기적으로 변동에 의해 방해를 받을 수 있고, 스톱 로스 위험을 초래할 수 있습니다.
이에 따른 위험 관리 조치는 다음과 같습니다. 포지션 크기를 최적화하는 규칙, 위험 경고 라인 설정 및 정지 거리를 넓히는 등.
최적화 공간은 다음과 같습니다.
현재 주관적 설정에 따라 기계 학습을 통해 매개 변수 최적화
위치 크기를 측정하는 모듈을 추가합니다.
후속 정지, 시간 정지 또는 브레이크 정지 등의 정지 메커니즘을 강화하십시오.
이 지표를 결합한 전략은 태생적인 트렌드를 빠르게 찾아 추적하는 데 효과적임을 입증했으며, 트렌드와 펀드와 같은 여러 차원에 기반한 양적 거래를 검증했습니다. 기본으로, 그것은 주기에 걸쳐 인덱스 될 수 있습니다. 매개 변수 조정 및 모듈 개선으로 안정적인 중장기 전략이 될 수 있습니다.
/*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)