여러 시간 프레임에 기반한 모멘텀 역전 전략

저자:차오장, 날짜: 2024-02-27 14:27:49
태그:

img

전반적인 설명

이 전략은 촛불 몸/위크 비율을 계산하고 RSI 지표를 결합하여 과잉 구매/ 과잉 판매 시장 조건을 감지하여 거래 기회를 식별합니다. 이는 단기에서 중기 기간 동안 가격 동력의 잠재적 인 반전을 포착하는 것을 목표로합니다.

전략 논리

이 전략의 핵심 논리는 다음을 기반으로 합니다.

  1. 촛불의 몸 / wick 비율을 계산하십시오: 오픈, 클로즈, 하이 및 로우 가격을 계산하여 촛불 몸과 윙크가 차지하는 비율을 도출하십시오. 20% 이하의 윙크 비율은 강한 촛불을 나타냅니다.

  2. 촛불 강도 변화 비율을 계산: 촛불 강도를 결정하기 위해 각 촛불의 내부 가격 움직임 크기를 계산합니다. 더 큰 변동은 더 강한 모멘텀을 의미하므로 더 강한 촛불을 나타냅니다.

  3. 과잉 구매/ 과잉 판매 조건을 식별하기 위해 RSI와 결합: RSI를 위해 과잉 구매 및 과잉 판매 임계선을 설정하십시오. 과잉 구매 라인의 위의 RSI는 과잉 구매 상태를 의미하고 반대로 과잉 판매를 의미합니다. 그러한 상태에서 강한 촛불은 반전 가능성이 높습니다.

  4. 반전 신호를 결정합니다. 피크 비율이 < 20%이고 촛불 강도가 > 2 x 평균 강도면, 이전 촛불 닫기보다 높은 현 촛불 닫기와 함께 짧은 상태를 신호합니다. 반대는 긴 상태를 나타냅니다.

  5. 스톱 로스 및 수익을 정의하십시오: 고정된 비율에 기반한 스톱 로스 및 수익 수준을 설정하고 긴 거래와 짧은 거래를 별도로 취합니다.

이점 분석

이 전략의 장점은 다음과 같습니다.

  1. 촛불 몸 / wick 비율을 사용하여 트렌드 및 역전을 효과적으로 식별합니다. 가격 동력과 전환점을 잘 감지합니다.

  2. 촛불 강도 변화와 RSI를 결합하여 역전 신호의 정확도가 높습니다. RSI는 더 많은 최적화 능력을 제공하는 조정 가능합니다.

  3. 합리적인 스톱 로스/프로피트 취득 구성으로 단기적 기회를 활용하고 동시에 무역 위험 노출을 줄입니다.

  4. 다양한 제품과 시간 프레임에 최적화를 위해 파라미터의 유연한 조정성. 높은 실용적 유용성.

위험 분석

이 전략에 포함된 몇 가지 위험:

  1. 강력한 트렌드 브레이크 도중 잠재적 인 잘못된 신호. 촛불 비교 기간 및 RSI 매개 변수를 최적화하여 줄일 수 있습니다.

  2. 실패한 반전의 확률은 완전히 제거 될 수 없습니다. 하락 추세에서 길고 반대로 손실을 유발합니다. 손상을 최소화하기 위해 중지 손실은 그에 따라 조정되어야합니다.

  3. 성능은 제품과 시간 틀에 따라 다릅니다. 매우 휘발성 제품에는 주의가 필요합니다.

더 나은 기회

전략은 다음과 같은 방법으로 최적화 될 수 있습니다.

  1. 최적의 매개 변수 조합을 결정하기 위해 과소 구매/ 과소 판매를 식별하는 데 고려되는 미세 조정 기간.

  2. 제품 특성에 따라 과반 구매/ 과반 판매 RSI 임계치를 최적화합니다.

  3. 이상적인 리스크 관리 계획을 도출하기 위해 스톱 로스/이익 취득 비율을 테스트합니다.

  4. 보다 타겟화된 매개 변수 조정을 위해 변동성에 따라 제품을 분류하십시오.

  5. 다른 지표에 기반한 추가 필터는 견고성을 향상시킬 수 있습니다.

결론

이 전략은 촛불 정보를 이해함으로써 반전을 감지하는 데 매우 실용적입니다. 전형적인 단기 거래 시스템으로서 중장기 트렌드를 추적하기 위해 제품과 환경에 걸쳐 상당한 최적화 능력을 가지고 있습니다. 그러나 중지 손실을 통해 적절한 위험 통제가 필수적입니다.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("mecha larga study",overlay = true,  max_bars_back = 600)
//Porcentaje Mecha cuerpo
bodyPercent = math.abs(open - close) / (high - low) * 100
wickPercent = 100 - bodyPercent

plot(bodyPercent, "Porcentaje del cuerpo", color.rgb(163, 76, 175))
plot(wickPercent, "Porcentaje de la mecha", color.red)

VelaDeFuerza =  math.abs(((high[0] - low[0])*100)/high)//PORCENTAJE DE VARIACION DE UNA VELA
plot(VelaDeFuerza, color = color.purple)

Promedio = ((VelaDeFuerza[0] + VelaDeFuerza[1] + VelaDeFuerza[2] + VelaDeFuerza[3] + VelaDeFuerza[4]  + VelaDeFuerza[5] + VelaDeFuerza[6] + VelaDeFuerza[7] + VelaDeFuerza[8] + VelaDeFuerza[9] + VelaDeFuerza[10] + VelaDeFuerza[11] + VelaDeFuerza[12] + VelaDeFuerza[13]  + VelaDeFuerza[14] ) / 15)
plot(Promedio, color = color.yellow)


// rsi 
per_Rsi = input.int(14, "Periodo RSI",minval= 11, maxval=20) //inicializo el rsi en 14 periodos pero doy la posibilidad al usuario de cambiarlo
rsi_Sc = input.int(75,"Sobre Compra",minval=68,maxval=80) //ENTRADA DE SOBRE COMPRA DE RSI
rsi_Sv = input.int(25,"Sobre Venta",minval=20,maxval=33) //ENTRADA DE SOBRE VENTA DE RSI
rsi= ta.rsi(close,per_Rsi)//guardo el rsi con los paramentros anteriores en una variable

//logica
MayorPromedio =   Promedio + 0.800
plot(MayorPromedio, color = color.green)

Venta =   bodyPercent > 80   and VelaDeFuerza > Promedio * 2  and close < close[1]
Compra =   bodyPercent > 80  and VelaDeFuerza > Promedio * 2 and close > close[1]


precioVenta = Venta? close : na
precioCompra = Compra? close : na

tp1 = 0.00
sl  = 0.00
tp1 := 0.003
sl := 0.010

TP1short = precioVenta - (precioVenta * tp1)
Slshort = precioVenta + (precioVenta * sl)

TP1long = precioCompra + (precioCompra * tp1)
SLlong = precioCompra - (precioCompra * sl)


name1 = "tp1"
name2 = "tp2"
name3= "SL"




if ( precioVenta ) 
    strategy.entry("short", strategy.short , comment = "Sell  SL: " + str.tostring(Slshort, "0.000")  + " TP1: " + str.tostring(TP1short,"0.000") ) 
    strategy.exit("exit" , "short", stop = Slshort , limit = TP1short ,qty_percent = 100 )  
if ( precioCompra ) 
    strategy.entry("long", strategy.long , comment = "Buy   SL: " + str.tostring(SLlong, "0.000")  + " TP1: " + str.tostring(TP1long,"0.000") )
    strategy.exit("exit" , "long", stop = SLlong  , limit = TP1long ,qty_percent = 100 )

더 많은