더블 이동 평균 교차 추세 추적 양적 거래 전략

SMA MA 趋势跟踪 均线交叉 交易信号 自动反转
생성 날짜: 2025-03-25 14:58:39 마지막으로 수정됨: 2025-03-25 14:58:39
복사: 0 클릭수: 353
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

더블 이동 평균 교차 추세 추적 양적 거래 전략 더블 이동 평균 교차 추세 추적 양적 거래 전략

개요

이 전략은 쌍평균선 교차를 기반으로 한 트렌드 추적 시스템으로, 단기 및 장기간에 걸쳐 두 개의 간단한 이동 평균 ((SMA)) 의 교차를 사용하여 명확한 다중 하위 거래 신호를 생성합니다. 이 전략은 간결하고 이해하기 쉽고 실행이 용이하며, 특히 이동 평균 교차의 기본 원칙을 습득하려는 거래자에게 적합합니다. 전략의 핵심 아이디어는 단기 평균선 아래에서 상향으로 긴 평균선을 통과하면 시스템이 다중 신호를 생성하고, 단기 평균선이 상향으로 긴 평균선을 통과하면 시스템이 빈 신호를 생성합니다.

전략 원칙

이 전략의 핵심은 두 개의 간단한 이동 평균 (SMA) 의 상호 작용에 기반합니다.

  1. 단기 이동 평균: 더 최근의 가격 움직임을 반영하기 위해 기본적으로 9 주기로 설정됩니다.
  2. 장기 이동 평균: 더 장기적인 가격 추세를 반영하기 위해 21 주기로 기본 설정

거래 신호 생성 논리:

  • 다중 조건: 단기 평균선이 장기 평균선을 상향으로 통과할 때 (ta.crossover 함수), 시스템 생성 다중 신호
  • 공백 조건: 단기 평균선이 장기 평균선을 아래로 통과할 때 (ta.crossunder 함수), 시스템에서 공백 신호를 생성한다

트랜잭션 실행 과정:

  • 다중 신호가 발생했을 때, 시스템은 먼저 기존의 공백 포지션을 즉시 평정하고 새로운 다중 포지션을 열고
  • 공백 신호가 발동되면, 시스템은 먼저 즉시 기존의 다중 상위 포지션을 제거하고 새로운 빈 상위 포지션을 열습니다.
  • 시스템은 K선 위에 다목표 표기, K선 아래에 공백표기 표기된 표기들을 통해 차트에 진입 가격을 명확하게 표시합니다.

이 전략은 또한 사용자가 다른 시장 환경이나 거래 스타일에 맞게 가격 소스 (기본 오픈 가격) 및 평균 주기의 길이를 사용자 정의 할 수 있습니다.

전략적 이점

전략 코드를 더 깊이 분석하면 다음과 같은 몇 가지 분명한 장점을 찾을 수 있습니다.

  1. 간단하고 명확하다: 전략 논리가 명확하고 복잡한 지표 조합이나 조건 판단이 없으므로 거래자가 쉽게 이해하고 적용할 수 있습니다.
  2. 시각적 직관: 시스템은 차트에 두 개의 평균선을 그리고, 색상으로 구분한다 (단기 평균선은 빨간색, 장기 평균선은 파란색), 동시에 입장점과 가격을 표기 형태로 직관적으로 표시한다.
  3. 자동 반전 메커니즘: 새로운 신호가 발생하면 전략은 자동으로 역전 포지션을 청산하고 새로운 포지션을 구축하여 거래자가 항상 현재 트렌드 방향을 따르도록 보장합니다.
  4. 사용자 정의: 사용자가 자신의 취향에 따라 가격 원천과 평균 주기를 조정하여 다른 시장 환경이나 거래 시간 프레임에 맞게 조정할 수 있습니다.
  5. 실시간 계산: 전략은 calc_on_every_tick=true 파라미터를 설정하여 모든 가격 변화로 계산을 보장하고 가장 적절한 신호를 제공합니다.
  6. 변수 없는 과장 적합성: 전략은 두 개의 평균 선 변수만을 사용하여 과장 적합성의 위험을 줄이고 다양한 시장 조건에서 전략의 안정성을 강화합니다.
  7. 라벨 팁이 명확하다: 라벨을 다음 K 라인 위치에 미리 배치함으로써 거래자는 출입 가격을 명확하게 볼 수 있으며 위험을 관리할 수 있습니다.

전략적 위험

이 전략은 간단하고 효과적이지만, 다음과 같은 잠재적인 위험이 있습니다.

  1. 흔들리는 시장에서 자주 거래: 가로 수직 정리 또는 흔들리는 시장에서 단기 및 장기 평균이 자주 교차하여 과도한 거래 신호와 불필요한 거래 비용이 발생할 수 있습니다.

    • 해결 방법: ADX 지표가 트렌드 강도를 확인하는 것과 같은 추가 필터 조건을 추가하거나 최소 지분 시간을 설정할 수 있습니다.
  2. 지연성 문제: 이동 평균은 본질적으로 지연 지표이며, 신호는 트렌드가 이미 진행되었거나 종료될 때만 생성될 수 있습니다.

    • 해결 방법: RSI 또는 MACD와 같은 다른 선도적 지표와 결합하거나 더 짧은 평균 주기를 사용하여 지연을 줄이십시오.
  3. 가짜 브레이크 위험: 가격이 일시적으로 평균선을 통과한 후 다시 원래의 추세로 돌아가서 잘못된 신호를 유발할 수 있습니다.

    • 해결 방법: 트레이딩을 촉발하기 위해 가격의 일정 시간 또는 폭을 유지하도록 요구하는 확인 메커니즘을 추가합니다.
  4. 중단 장치의 부재: 현재 전략에는 명확한 중지 설정이 없으며, 강력한 역전 시에는 큰 손실이 발생할 수 있습니다.

    • 해결 방법: 고정 중지 또는 변동성 기반의 동적 중지 전략을 적용하십시오.
  5. 매개 변수 민감성: 전략의 성능은 평균선 주기 길이 선택에 민감하며, 부적절한 매개 변수는 전략 효과를 크게 변화시킬 수 있다.

    • 해결 방법: 여러 시장 조건에서 안정적인 성능을 나타내는 변수 조합을 찾기 위해 재검토 최적화를 수행하십시오.

전략 최적화 방향

코드의 심층적인 분석을 바탕으로 다음과 같은 몇 가지 최적화 방향을 제시합니다.

  1. 트렌드 필터 추가: ADX, 트렌드 강도 지표 또는 가격과 평균선의 상대적 위치를 판단하여 확인된 트렌드 환경에서만 신호를 생성하고, 흔들리는 시장의 빈번한 거래를 피합니다.

    • 설명: 가짜 신호를 줄이고 거래 성공률과 자금 효율성을 높여줍니다.
  2. 다이내믹 스톱 메커니즘을 구현: ATR 또는 다른 변동성 지표에 기반한 다이내믹 스톱 레벨을 설정하여 수익을 보호하고 단일 거래의 최대 위험을 제한합니다.

    • 해설: 효과적인 위험 관리는 장기 거래의 성공에 핵심입니다.
  3. 최적화된 입시 시점: 신호 생성 후 소주기 확인을 사용하거나 다시 입시를 위해 다시 호출을 기다리는 것을 고려하여 더 나은 실행 가격을 얻습니다.

    • 설명: 최적화된 입점 가격으로 장기적인 수익률을 높일 수 있습니다.
  4. 거래량 필터링 증가: 교차 신호에 따라 거래량 확인이 증가하고 거래량이 방향 변화를 지원하는 경우에만 거래가 수행됩니다.

    • 설명: 거래량은 가격변동의 유효성을 확인하는 중요한 요소입니다.
  5. 자율 적응 평행 주기: 시장의 변동성에 따라 평행 주기 길이를 자동으로 조정하여, 높은 변동 환경에서 더 긴 주기를 사용, 낮은 변동 환경에서 더 짧은 주기를 사용

    • 설명: 이것은 전략이 다른 시장 상태와 주기에 더 잘 적응하도록 할 수 있습니다.
  6. 배치된 창고 개설 및 평화 창고 메커니즘을 추가: 한 번에 모든 창고를 구축하는 것이 아니라 단계적으로 창고 및 평화 창고를 구축하여 시점 선택의 위험을 줄입니다.

    • 설명: 이 방법은 거래 결과를 부드럽게하고 단일 입시 지점을 선택하는 행운의 요소를 줄일 수 있습니다.

요약하다

쌍평선 교차 트렌드 추적 전략은 간결하고 강력한 양적 거래 시스템으로, 단기 및 장기 이동 평균의 교차를 통해 명확한 거래 신호를 생성한다. 그것의 주요 장점은 작동의 단순성, 시각적 직관 및 자동 반전 메커니즘에 있으며, 거래자는 객관적으로 시장 추세를 따라갈 수 있다. 그러나, 이 전략은 흔들리는 시장의 빈번한 거래와 신호 지연과 같은 고유한 위험도 있다.

트렌드 필터를 추가하고, 동적 손실 메커니즘을 구현하고, 진입 시기를 최적화하고, 거래량 확인을 증가시키는 등의 방법으로, 이 기본 전략은 크게 강화될 수 있다. 특히, 다른 기술 지표와 결합하여 신호를 필터링하고, 위험 관리를 최적화하는 것은 다양한 시장 환경에서 전략을 향상시키는 데 도움이 될 것이다.

이것은 거래의 양을 측정하려는 초보자에게는 이상적인 출발점이며, 경험이 풍부한 거래자에게는 추가적으로 사용자 정의 및 최적화를 할 수있는 단단한 기반을 제공합니다. 중요한 것은 어떤 개선이 적용되었든 엄격한 역검사 및 전향 검증을 통해 평가되어 전략적 개선이 장기적으로 가치를 실제로 추가하는지 확인하는 것입니다.

전략 소스 코드
/*backtest
start: 2025-01-01 00:00:00
end: 2025-03-24 00:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//@version=6
//
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// @author = Da_mENIZ
// © denis_zvegelj
// last change	20.Mar.2025
//
// Simple MA Crossover strategy that shows on the chart with Long/Short indicators. Feel free to use it to suit 
// your needs
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
strategy("DZ Simple MA Crossover Strategy", shorttitle="DZ_MACross", overlay=true, calc_on_every_tick=true)

// Define the moving average lengths
i_src_price = input.source  (open, "Price source",                                                                                                                     group="Main Settings")
i_shMA_len  = input.int		(9, 	"Short MA Length", 		minval=1,																									group="Main Settings")
i_loMA_len  = input.int		(21,	"Long MA Length", 		minval=6,																									group="Main Settings")

// Calculate the moving averages
short_MA = ta.sma(i_src_price, i_shMA_len)
long_MA = ta.sma(i_src_price, i_loMA_len)

// Plot the moving averages on the chart
plot(short_MA, color=color.red, linewidth=2, title="Short MA")
plot(long_MA, color=color.blue, linewidth=2, title="Long MA")

// Generate the buy and sell signals
long_Cond = ta.crossover(short_MA, long_MA)
short_Cond = ta.crossunder(short_MA, long_MA)

// Place the orders based on conditions
if (long_Cond)
    strategy.close("Short", immediately = true, comment = "Close")
    strategy.entry("Long", strategy.long, comment = "Enter")
    label.new(bar_index+1, open, "Long\n" + str.tostring(open), style=label.style_label_down, color=color.blue, textcolor=color.white, yloc=yloc.abovebar)



if (short_Cond)
    strategy.close("Long", immediately = true, comment = "Close")
//    strategy.entry("Short", strategy.short, comment = "Short\n" + str.tostring(open))
    strategy.entry("Short", strategy.short, comment = "Enter")
    label.new(bar_index+1, open, "Short\n" + str.tostring(open), style=label.style_label_up, color=color.red, textcolor=color.white, yloc=yloc.belowbar)