3개의 연속된 검은색 캔들스틱과 이중 이동 평균을 기반으로 한 거래 전략

SMA SMA200
생성 날짜: 2024-05-14 17:30:35 마지막으로 수정됨: 2024-05-14 17:30:35
복사: 3 클릭수: 506
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

3개의 연속된 검은색 캔들스틱과 이중 이동 평균을 기반으로 한 거래 전략

개요

이 전략은 연속적으로 세 개의 음선과 두 개의 평행선을 기반으로 한 거래 전략이다. 전략의 주요 아이디어는: 연속적으로 세 개의 음선이 나타나고 현재 종료 가격이 200 일 평균보다 높을 때, 더 많은 포지션을 열고; 10 일 평균이 가격과 교차하거나 가격이 정지 또는 중지 지점에 도달하면 평행. 이 전략은 지정된 시간 범위 내에서만 작동한다.

전략 원칙

  1. 연속 阴线의 수를 계산한다. 만약 상장 가격이 내려간다면, 연속 阴线의 수를 더하기 1; 그렇지 않으면, 연속 阴线의 수를 0으로 재설정한다.
  2. 10일 평균선과 200일 평균선을 계산한다.
  3. 현재 매출액이 10일 평균보다 높지 않은지 판단한다.
  4. 진입 조건이 충족되는지 판단하기 위해: 연속적으로 3개의 음선, 현재 시간은 지정된 범위 내에서, 그리고 현재 종결 가격은 200일 평균선보다 높습니다.
  5. 출전 조건을 충족하는지 판단하기: 10 일 평균선이 가격과 교차하거나 가격이 스톱 또는 스톱 손실 지점에 도달한다.
  6. 입시 조건이 충족되고 현재 포지션이 없는 경우, 포지션을 더 많이 개설한다.
  7. 출전 조건이 충족되고 현재 지분을 보유하고 있다면, 평지한다.

전략적 이점

  1. 가격의 움직임과 평균선 요소를 고려하여 추세와 변동 상황에서 기회를 잡을 수 있다.
  2. 스티프 스톱 손실을 설정하여 위험을 효과적으로 제어할 수 있습니다.
  3. 전략이 실행되는 기간을 제한하여 특정 기간에 과도한 위험을 감수하는 것을 피할 수 있습니다.
  4. 코드 논리는 명확하고, 읽기 쉽고, 이해하기 쉽고, 최적화하기 쉽습니다.

전략적 위험

  1. 연속적인 음선에 대한 판단은 너무 단순하여 잘못된 신호를 유발할 수 있다.
  2. 정지/손실의 설정은 유연하지 않을 수 있으며, 시장의 변동이 큰 경우, 자주 거래하거나 기회를 놓치게 될 수 있다.
  3. 급격한 사건이나 중요한 소식과 같은 비정상적인 요소에 대한 고려가 부족하여 추가적인 위험을 감수할 수 있습니다.

전략 최적화 방향

  1. RSI, MACD 등과 같은 더 많은 기술 지표를 도입하여 더 안정적인 신호 판단 논리를 구축하는 것을 고려할 수 있습니다.
  2. 스톱 스톱 손실을 최적화 할 수 있으며, 동적 스톱 스톱 손실을 도입하거나 ATR과 같은 변동률 지표에 기반한 스톱 손실을 도입할 수 있습니다.
  3. 다양한 변수 설정이 전략에 미치는 영향을 연구할 수 있다. 예를 들어, 연속 음원수, 평균주기 등으로 최적의 변수 조합을 찾는다.
  4. 포지션 관리에 가입할 수 있으며, 다양한 시장 환경의 동적에 따라 포지션을 조정하여 자금 활용 효율성을 높일 수 있다.

요약하다

이 전략은 연속적인 음과 쌍평등의 조합을 통해 간단하고 이해하기 쉬운 거래 모델을 구축한다. 전략은 트렌드적 기회를 포착하는 동시에, 또한 위험 관리 조치를 설정한다. 그러나, 전략은 신호 판단과 위험 제어 측면에서 추가적인 최적화의 여지가 있다. 더 많은 기술 지표, 최적화된 매개 변수 설정, 동적 스톱 손실 및 포지션 관리 등의 조치를 도입함으로써 전략의 안정성과 수익성을 더욱 향상시킬 수 있다.

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

//@version=5
strategy("Estrategia de Trading", overlay=true)

// Definir el número de cierres de velas decrecientes consecutivas
var int cierres_decrecientes_consecutivos = 0
num_cierres_decrecientes = input.int(3, title="Número de cierres decrecientes", minval=1)

// Definir el porcentaje de cambio para cerrar la operación
porcentaje_cierre_arriba = input.float(1.5, title="Porcentaje de cierre arriba (%)", step=0.1)
porcentaje_cierre_abajo = input.float(1.0, title="Porcentaje de cierre abajo (%)", step=0.1)

// Definir las medias móviles para el cierre de la operación
periodos_media_movil_cierre = input.int(10, title="Períodos de la media móvil para cierre")
periodos_media_movil_200 = input.int(200, title="Períodos de la media móvil de 200")

// Definir el rango de fechas para la simulación
start_date = timestamp(2024, 1, 1, 0, 0)
end_date = timestamp(2024, 12, 31, 23, 59)

// Calcular la media móvil para el cierre de la operación
sma_cierre = ta.sma(close, periodos_media_movil_cierre)
sma_200 = ta.sma(close, periodos_media_movil_200)

// Calcular si el precio está por encima o por debajo de la media móvil para el cierre de la operación
precio_por_encima_sma_cierre = close > sma_cierre
precio_por_debajo_sma_cierre = close < sma_cierre

// Calcular si se han producido num_cierres_decrecientes consecutivos
if (ta.change(close) < 0)
    cierres_decrecientes_consecutivos := cierres_decrecientes_consecutivos + 1
else
    cierres_decrecientes_consecutivos := 0

es_cierres_consecutivos = cierres_decrecientes_consecutivos >= num_cierres_decrecientes

// Definir condiciones de entrada y salida de la estrategia dentro del rango de fechas y con el precio por encima de la SMA de 200
condicion_entrada = es_cierres_consecutivos and close > sma_200
condicion_cierre_sma = (precio_por_encima_sma_cierre[1] and not precio_por_encima_sma_cierre) or (not precio_por_encima_sma_cierre[1] and precio_por_encima_sma_cierre)

// Calcular precios de salida basados en porcentajes
precio_salida_arriba = strategy.position_avg_price * (1 + porcentaje_cierre_arriba / 100)
precio_salida_abajo = strategy.position_avg_price * (1 - porcentaje_cierre_abajo / 100)

// Ejecutar operación en largo dentro del rango de fechas y con el precio por encima de la SMA de 200
if (condicion_entrada and strategy.opentrades == 0)
    strategy.entry("Long", strategy.long)

// Cerrar operación en largo si se cumple la condición de salida por cambio en el cruce de la media móvil dentro del rango de fechas
if (strategy.position_size > 0 and condicion_cierre_sma)
    strategy.close("Long")

// Cerrar operación en largo si el precio alcanza el porcentaje de cierre arriba o abajo dentro del rango de fechas
strategy.exit("Stop Loss", "Long", limit=precio_salida_arriba, stop=precio_salida_abajo)

// Plot para visualizar la media móvil para el cierre de la operación
plot(sma_cierre, color=color.red)

// Plot para visualizar la SMA de 200
plot(sma_200, color=color.blue)