이 문서는 다중 이동 평균에 기반한 트렌드 거래 전략을 소개한다. 이 전략은 주로 나스닥 선물 시장에 적용되며, 장기, 중, 단기 이동 평균에 대한 가격 위치를 분석하여 시장의 상승 추세를 파악하고 특정 시점의 모든 포지션을 평점화합니다.
이 전략은 세 가지 간단한 이동 평균 (SMA) 을 사용한다: 장기 (임상 200주기), 중기 (임상 21주기) 및 단기 (임상 9주기). 가격이 장기 및 중기 평균보다 높고 단기 평균에서 교차가 발생하면 구매 신호를 유발한다. 또한 전략은 위험을 제어하기 위해 고정된 점의
계산하는 장기 (디폴트 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()