
이 글은 여러 이동 평균을 기반으로 한 트렌드 거래 전략 또는 “다중 평균을 기반으로 한 트렌드 거래 전략”을 소개한다. 이 전략은 주로 나스닥 선물 시장에 적용되며, 가격의 긴, 중간, 단기 이동 평균에 대한 위치를 분석하여 시장의 상승 추세를 포착하고 특정 시간에 모든 위치를 평정한다.
이 전략은 세 가지의 간단한 이동 평균 (SMA) 을 사용한다: 장기 (기본 200주기), 중기 (기본 21주기), 그리고 단기 (기본 9주기). 가격이 장기 및 중기 평균선보다 높을 때, 그리고 단기 평균선에서 교차가 발생하면, 전략은 구매 신호를 유발한다. 또한, 전략은 위험을 제어하기 위해 고정된 포인트의 정지 및 중지 손실을 설정한다. 또한, 이 전략은 각 거래 날의 17:00에 모든 포지션을 청산한다.
장기 (기본 200주기), 중기 (기본 21주기) 및 단기 (기본 9주기) 의 간단한 이동 평균을 계산한다.
현재 가격이 장기 평균선과 중기 평균선보다 높는지 판단한다.
현재 가격이 단기 평균선 위에 교차하는지 판단한다.
조건 2와 조건 3이 동시에 충족되고 현재 포지션이 없는 경우, 구매 신호를 발동한다.
구매 후, 고정 점수의 스톱 및 스톱 손실을 설정하고, 가격이 스톱 또는 스톱 손실 가격을 만지면 청산한다.
거래일마다 17:00에 모든 포지션을 매장한다.
간단하고 이해하기 쉬운: 이 전략은 이동 평균을 기반으로 하고, 원칙은 간단하고 이해하기 쉽고 구현하기 쉽다.
트렌드 추적: 다양한 주기적 평균에 대한 가격의 위치를 분석함으로써 전략은 시장의 상승 추세를 효과적으로 포착할 수 있다.
위험 제어: 전략은 단위 거래의 위험을 제어하는 데 도움이 되는 고정 점수의 스톱과 스톱로스를 설정한다.
자동 평준화: 전략은 거래 당일 특정 시간에 자동 평준화하여 밤새의 위험을 피한다.
매개 변수 최적화: 전략의 성능은 평균선 주기 매개 변수에 민감할 수 있으며, 다른 시장과 품종에 따라 최적화가 필요합니다.
흔들리는 시장: 흔들리는 시장 환경에서, 자주 교차하는 신호는 전략의 부적절한 성과를 초래할 수 있다.
슬라이드 리스크: 시장의 격렬한 변동이 있을 때, 고정 포인트의 스톱과 스로드는 예상대로 실행되지 않을 수 있으며, 슬라이드 리스크가 발생한다.
동적 정지 손실: 시장의 변동성이나 가격 움직임에 따라 동적으로 정지 및 정지 지점을 조정하여 위험 수익률을 최적화합니다.
트렌드 필터: 트렌드 강도를 확인하기 위해 ADX와 같은 다른 기술 지표를 도입하여 위축 시장에서 가짜 신호를 필터링하십시오.
다중 품종 적응: 전략이 다른 선물 품종과 시장 특성에 적응하도록 개선된다.
자금 관리: 포지션 관리 및 위험 제어와 같은 더 복잡한 자금 관리 규칙을 도입하여 전략의 안정성을 향상시킵니다.
“다중평균선 기반의 트렌드 트레이딩 전략”은 시장의 상승 추세를 포착하기 위해 가격의 위치와 관련된 다양한 주기평균선을 분석하는 간단한 트렌드 추적 전략이다. 이 전략은 고정된 포인트의 스톱로드를 설정하고, 매일 특정 시간에 자동으로 포지션을 평정하여 위험을 제어한다. 그러나 전략은 불안한 시장에서 좋지 않은 성능을 발휘할 수 있으며, 변수 최적화 및 슬라이드 위험 등의 문제를 직면 할 수 있다.
/*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()