리소스 로딩... 로딩...

다중 이동 평균 트렌드 거래 전략

저자:차오장, 날짜: 2024-05-11 17:32:49
태그:SMAMA

img

전반적인 설명

이 문서에서는 Multi-Moving Average Trend Trading Strategy라고 불리는 여러 이동 평균에 기반한 트렌드 트레이딩 전략을 소개합니다. 이 전략은 주로 나스닥 선물 시장에 적용되며 장기, 중장기 및 단기 이동 평균에 대한 가격 위치를 분석하여 상승 시장을 포착합니다. 또한 모든 포지션을 매일 특정 시간에 닫습니다.

이 전략은 세 가지 간단한 이동 평균 (SMA) 을 사용한다: 장기 (전환 200 기간), 중기 (전환 21 기간), 단기 (전환 9 기간). 가격은 장기 및 중기 이동 평균 이상으로 단기 이동 평균을 넘어서면 구매 신호가 발생하며, 오픈 포지션이 없는 경우이다. 전략은 또한 위험을 관리하기 위해 고정 포인트 스톱-가너 및 스톱-러스 레벨을 설정한다. 또한 모든 포지션은 매일 거래일 17:00에 종료된다.

전략 원칙

  1. 단기 (전산 200주기), 중기 (전산 21주기) 및 단기 (전산 9주기) 간단한 이동평균을 계산합니다.

  2. 현재 가격이 장기 및 중장기 이동 평균보다 높는지 결정합니다.

  3. 현재 가격이 단기 이동 평균을 넘어서는지 확인하세요.

  4. 조건 2와 조건 3가 모두 충족되고 오픈 포지션이 없을 때 구매 신호가 발사됩니다.

  5. 구매 후, 고정된 포인트 스톱 이윤 및 스톱 손실 레벨을 설정합니다. 가격이 어느 수준에 도달하면 위치를 닫습니다.

  6. 모든 포지션을 매 거래일 17:00에 닫습니다.

전략적 장점

  1. 간단하고 이해하기 쉽다: 전략은 이동 평균에 기반하여 이해하기 쉽고 실행하기 쉽습니다.

  2. 트렌드 추적: 다른 기간의 이동 평균에 대한 가격 위치를 분석함으로써 전략은 시장 상승 추세를 효과적으로 포착합니다.

  3. 리스크 제어: 전략은 고정된 점 스톱 이윤 및 스톱 손실 수준을 포함하고 개별 거래의 위험을 관리하는 데 도움이됩니다.

  4. 자동 포지션 폐쇄: 전략은 자동으로 모든 포지션을 특정 시간에 매 거래일에 폐쇄하여 오버나이트 위험을 피합니다.

전략 위험

  1. 매개 변수 최적화: 전략의 성능은 이동 평균 기간 매개 변수에 민감할 수 있으며, 다른 시장과 도구에 대한 최적화가 필요합니다.

  2. 불안한 시장: 불안한 시장 조건에서 빈번한 크로스오버 신호는 최적의 전략 성과 미만으로 이어질 수 있습니다.

  3. 슬라이드 리스크: 높은 시장 변동성 (high market volatility) 이 있을 때, 고정 포인트 스톱 이윤 및 스톱 손실 수준은 의도한 대로 실행되지 않을 수 있으며, 슬라이드 리스크가 발생할 수 있습니다.

전략 최적화 방향

  1. 동적 스톱-가너와 스톱-러스: 시장 변동성이나 가격 추세에 따라 동적으로 스톱-가너와 스톱-러스 수준을 조정하여 리스크/리워드 비율을 최적화합니다.

  2. 트렌드 필터: ADX와 같은 추가 기술 지표를 포함하여 트렌드 강도를 확인하고 불안정한 시장에서 잘못된 신호를 필터링합니다.

  3. 다중 도구 적응: 다양한 선물 도구와 시장 특성에 적응하기 위한 전략을 정밀화합니다.

  4. 자금 관리: 전략의 탄력성을 높이기 위해 포지션 크기와 위험 통제와 같은 더 정교한 자금 관리 규칙을 도입합니다.

요약

다중 이동 평균 트렌드 트레이딩 전략은 다양한 기간의 이동 평균에 비해 가격 위치를 분석하여 상승 시장을 포착하는 간단하고 이해하기 쉬운 트렌드 추후 전략이다. 이 전략은 고정 포인트 스톱-가너와 스톱-러스 수준을 통합하고 위험을 관리하기 위해 매일 특정 시간에 모든 포지션을 자동으로 닫는다. 그러나 전략은 불안정한 시장에서 저성공할 수 있으며 매개 변수 최적화 및 미끄러짐 위험과 같은 도전에 직면 할 수 있다. 미래 최적화는 동적 스톱-가너와 스톱-러스 수준, 트렌드 필터, 멀티-인스트루먼테이션 및 돈 관리에 초점을 맞추어 전략의 견고성과 적응성을 더욱 향상시킬 수 있다.


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

//@version=5
strategy("Médias Móveis de MarcosJR", overlay=true)

// Inputs para data inicial e final
start_year = input.int(2020, title="Ano Inicial")
start_month = input.int(1, title="Mês Inicial")
start_day = input.int(1, title="Dia Inicial")

end_year = input.int(2020, title="Ano Final")
end_month = input.int(12, title="Mês Final")
end_day = input.int(31, title="Dia Final")

// Convertendo dia, mês e ano para timestamp
start_date = timestamp(start_year, start_month, start_day, 00, 00)
end_date = timestamp(end_year, end_month, end_day, 23, 59)

// Condição para verificar se a data está dentro do intervalo especificado
date_within_range = true

// Parâmetros para os períodos das médias móveis
ma_short_period = input.int(9, title="MA Curta")
ma_medium_period = input.int(21, title="MA Média")
ma_long_period = input.int(200, title="MA Longa")

// Definindo médias móveis
ma_short = ta.sma(close, ma_short_period)
ma_medium = ta.sma(close, ma_medium_period)
ma_long = ta.sma(close, ma_long_period)

// Plotando as médias móveis no gráfico com espessura aumentada
plot(ma_short, color=color.blue, title="MA Curta", linewidth=2)
plot(ma_medium, color=color.orange, title="MA Média", linewidth=2)
plot(ma_long, color=color.red, title="MA Longa", linewidth=2)

// Verificando se o preço está acima das médias móveis
above_ma_long = close > ma_long
above_ma_medium = close > ma_medium

// Verificando se o preço tocou na média móvel curta
touch_ma_short = ta.crossover(close, ma_short)

// Condições de compra
buy_condition = date_within_range and above_ma_long and above_ma_medium and touch_ma_short

// Sinais de entrada e saída de compra
var float entry_price = na
if (buy_condition and strategy.opentrades == 0) // Verifica se não há operações em andamento
    entry_price := close // Define o preço de entrada ao comprar

// Parâmetros para o tamanho do stop gain e stop loss em pontos
stop_gain_points = input.int(100, title="Stop Gain (pontos)", minval=1)
stop_loss_points = input.int(100, title="Stop Loss (pontos)", minval=1)

// Calcular o preço de saída alvo (Stop Gain) e de stop loss
target_price = entry_price + stop_gain_points * syminfo.mintick
stop_loss_price = entry_price - stop_loss_points * syminfo.mintick

// Sair da operação de compra quando o preço atingir o stop gain ou stop loss
if (strategy.position_size > 0)
    strategy.exit("Venda", "Compra", limit=target_price, stop=stop_loss_price)

// Sinais de entrada de compra
if (buy_condition and strategy.opentrades == 0) // Verifica se não há operações em andamento
    strategy.entry("Compra", strategy.long)

// Plotando setas de compra
plotshape(series=buy_condition, title="Sinal de Compra", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)

// Função para verificar se é 17:00 do mesmo dia
is_17_oclock_same_day = hour == 17 and minute == 0 and hour[1] < 17

// Sair de todas as operações às 17:00 do mesmo dia
if (is_17_oclock_same_day)
    strategy.close_all()


관련

더 많은