다중 기간 반전 지점 식별 및 자동 거래 전략

MAGIC-9/13 DRP CROSSOVER CONSECUTIVE PATTERNS STOP-LOSS TAKE-PROFIT
생성 날짜: 2025-06-13 13:58:08 마지막으로 수정됨: 2025-06-13 13:58:08
복사: 0 클릭수: 258
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

다중 기간 반전 지점 식별 및 자동 거래 전략 다중 기간 반전 지점 식별 및 자동 거래 전략

개요

다주기 역전점 인식과 자동 거래 전략은 Magic-913 패턴과 방향 역전점 ((DRP) 식별을 기반으로 한 양적 거래 시스템이다. 이 전략은 가격 연속 패턴과 동력 변화 지점을 식별하여 시장 역전 신호를 포착하고 자동으로 거래를 실행한다. 전략의 핵심은 전통적인 기술 분석 철학과 현대적인 양적 방법을 결합하여 연속 가격 행동을 분석하여 잠재적인 시장 역전점을 식별하여 가격 역전 초기에 시장에 진입하는 것이다. 시스템은 자동으로 손실을 멈추고 수익을 고정하는 기능을 통합하고 있으며, 시각적 지표 (표기 및 그림 색상 변화) 를 통해 직관적인 거래 신호 표시를 제공합니다.

전략 원칙

이 전략의 핵심 원칙은 두 가지 주요 기술 지표에 기반합니다. Magic-913 모드 및 방향 반전점 ((DRP) ) 입니다.

  1. Magic-913 모드 인식:

    • 시스템에서 9개의 연속적인 주기의 가격 행동을 모니터링하여 일관된 가격 패턴을 찾습니다.
    • 고점 모드 ((high_9)): 가격이 9번 연속으로 이전 4주기의 종식 가격보다 높지만 10번을 만족하지 않을 때 형성된다
    • 낮은점 모드 ((low_9)): 가격이 9번 연속으로 이전 4주기의 종점 가격보다 낮아지고, 10번을 만족하지 않을 때 형성된다
  2. 방향 전환점 (DRP) 계산:

    • 지정된 길이 (length_input) 내의 가격과 회귀 길이 (lookback_length) 전의 가격 관계를 분석하여
    • 업카운트 (up_count): 현재 가격이 회수기 가격보다 높을 수 있는 수
    • 하락 카운트 ((down_count) 를 계산한다: 현재 가격이 회수기 가격보다 낮아지는 수
    • down_count가 설정된 길이와 같을 때, 상향 역점으로 표시됩니다.
    • up_count가 설정된 길이와 같을 때, 하향 역점으로 표시됩니다.
  3. 거래 신호 생성:

    • 구매 신호: low_9 패턴을 감지하고 방향 전환점이 마이너스 또는 0 값에서 상향을 통과할 때 트리거
    • 팔기 신호: high_9 모드가 감지되고 방향 전환점이 양치 또는 0 값에서 아래로 통과할 때 트리거
  4. 위험 관리 메커니즘:

    • 자동 중지: 포지션 개시 가격의 반대 방향으로 10 점의 중지 설정
    • 자동 정지: 포지션 개시 가격의 반대 방향으로 10 점의 정지를 설정
  5. 보조 함수:

    • get_first_non_na_value: NA가 아닌 값을 얻는 함수
    • count_consecutive_occurrences: 연속 조건이 발생하는 횟수를 계산한다
    • check_condition_occurrence: 조건이 주어진 주기 동안 발생하는지 확인합니다.
    • filter_occurrences: 회귀 주기 필터링의 발생 횟수

전략적 이점

  1. 시장의 반전 초기 인식Magic-913 모드와 방향 반전 지점의 결합으로 시장 반전의 초기 단계에서 신호를 포착할 수 있으며, 더 나은 진입 시기를 제공합니다.

  2. 다중 인증 메커니즘: 전략 요구 사항은 동시에 두 개의 독립된 조건을 충족시켜서 (마법 모드 및 방향 역점 통과), 가짜 신호의 가능성을 줄이고 거래 품질을 향상시킵니다.

  3. 자동화된 위험 관리: 통합된 Stop Loss 및 Stop Stop 기능으로, 수동 개입 없이 단일 거래의 위험을 제어하고, 감정적인 거래 결정을 방지한다.

  4. 시각화 거래 신호: 태그와 그램 색상의 변화를 통해 거래 신호를 직관적으로 표시하여 거래자가 잠재적인 거래 기회를 신속하게 식별할 수 있도록 도와줍니다.

  5. 매개 변수 조정전략: 전략은 길이와 회귀 길이의 두 가지 핵심 매개 변수의 조정 옵션을 제공하여 거래자가 다른 시장 환경과 거래 품종에 따라 최적화 할 수 있습니다.

  6. 데이터 처리 안정성: NA 값을 처리하는 메커니즘을 포함하고, 다양한 데이터 조건에서 전략의 안정성을 강화한다.

  7. 주기적 적응성: 전략은 분 차트에서 일 일 차트에 사용할 수 있는 다른 시간 주기 차트에 적용할 수 있으며, 거래 시간 프레임의 유연한 선택을 제공합니다.

전략적 위험

  1. 매개변수 민감도전략 성능은 길이와 회귀 길이 파라미터의 설정에 크게 의존합니다. 다른 시장 환경에는 다른 파라미터 조합이 필요할 수 있으며 잘못된 파라미터 설정은 과도한 거래 또는 놓친 거래 기회를 초래할 수 있습니다.

  2. 시장 변동 위험: 높은 변동성 시장에서, 10 점으로 고정된 스톱포인트 설정은 너무 작아서 자주 트리거 될 수 있습니다. 낮은 변동성 시장에서, 이 설정은 너무 커질 수 있습니다. 해결 방법: 스톱포인트 설정은 고정된 점수보다는 시장의 변동성 (예: ATR) 에 기반한 동적 값으로 설정하십시오.

  3. 동향 시장의 성과이 전략은 주로 반전점 설계를 대상으로 하며, 강한 트렌드 시장에서 빈번하게 잘못된 신호가 발생할 수 있다. 해결 방법: 트렌드 필터를 추가하여 시장이 강한 트렌드 상태가 아닌 것을 확인했을 때만 거래 신호를 유발한다.

  4. 슬라이드 포인트와 유동성 위험: 유동성이 낮은 시장에서, 실행 가격은 신호 가격과 현저하게 차이가 있을 수 있다. 해결 방법: 유동성 필터 조건을 증가시키거나, 주문을 실행할 때 슬라이드 요소를 고려한다.

  5. 과도한 적합성의 위험전략은 여러 조건과 매개 변수를 사용하며, 역사 데이터에 대한 과도한 적합성의 위험이 있습니다. 해결 방법: 견본 테스트 (Out-of-sample testing) 와 전향 테스트 (Forward testing) 를 사용하여 전략의 안정성을 검증합니다.

  6. 연속 신호 축적: 특정 시장 조건에서, 같은 방향의 여러 신호가 연속적으로 생성될 수 있으며, 과도한 포지션이 발생할 수 있다. 해결 방법: 신호 필터링 메커니즘을 구현하여 짧은 시간에 같은 방향의 신호의 실행 횟수를 제한한다.

  7. 고정 스톱 스톱 손실 제한: 고정 점수의 스톱 스톱 손실은 모든 시장 환경에 적합하지 않을 수 있으며, 수익 거래를 조기 종료하거나 너무 늦게 종료 할 수 있습니다. 해결 방법: 시장 변동에 기반한 동적 스톱 스톱 손실 장치를 구현하거나, 추적 스톱 손실 전략을 채택하십시오.

전략 최적화 방향

  1. 동적 변수 조정:

    • 시장의 변동에 따라 length_input 및 lookback_length 매개 변수를 자동으로 조정하는 메커니즘을 구현합니다.
    • 원리: 다양한 변동률 환경은 다양한 민감도의 매개 변수를 필요로 하며, 동적으로 조정하면 전략의 적응력을 높일 수 있다
    • 구현 방법: 가장 최근의 N주기의 ATR값을 기반으로 설계 파라미터를 조정할 수 있는 공식
  2. 트렌드 필터 추가:

    • 통합 트렌드 인식 지표 (예를 들어, 이동 평균, ADX 등) 는 트렌드 방향과 일치하는 경우에만 거래를 수행합니다.
    • 원칙: 역전 전략은 트렌드가 뚜렷한 시장에서 일반적으로 더 좋지 않으며, 트렌드 필터는 잘못된 신호를 줄일 수 있습니다.
    • 실행 방법: 트렌드 방향 참조로 장기 이동 평균을 추가하고, 가격이 평균 위에 있을 때만 더 많이 하고, 평균 아래에 있을 때만 적자를 한다
  3. 손절매 및 이익실현 메커니즘 최적화:

    • 고정 점수 설정이 변동율에 기반한 동적 스톱 스톱으로 대체됩니다.
    • 원칙: 시장의 변동률은 시기를 따라 크게 달라지며, 고정 점수는 모든 시장 환경에 적합하지 않습니다.
    • 구현 방법: ATR의 배수를 사용하여 스톱포인트 지점을 설정하는 스톱포인트, 예를 들어 1.5배의 ATR을 스톱포인트로, 3배의 ATR을 스톱포인트로
  4. 거래량 필터링을 늘립니다.:

    • 거래량 요소를 고려하여 거래량이 확인된 경우에만 신호를 실행합니다.
    • 원칙: 거래량은 가격 변화의 효과를 확인하는 중요한 요소이며, 가짜 돌파구를 줄일 수 있습니다.
    • 구현 방법: 신호 발생시 거래량이 이전 N주기의 평균 거래량보다 높지 여부를 검사합니다.
  5. 시간 필터를 구현합니다.:

    • 특정 기간 동안 거래하는 것을 피하십시오 (시장 개시, 종료 시간 또는 중요한 경제 데이터가 발표되기 전과 후)
    • 원칙: 특정 기간 동안 변동성이 이상하거나 방향이 불분명하여 거래 위험이 높습니다.
    • 실행 방법: 시간 조건 판단을 늘리고, 고위험 시간에 새로운 신호 생성을 금지
  6. 포지션 관리 기능 추가:

    • 시장의 변동성과 계좌의 위험 수준에 따라 역동적으로 조정되는 포지션 크기
    • 원칙: 고정된 포지션은 다양한 위험 환경에 적응할 수 없으며, 동적 포지션은 예상 수익을 유지하면서 위험을 제어할 수 있습니다.
    • 구현 방법: 최대 인출 비율에 기반한 포지션 계산 공식을 설계
  7. 신호 강도 점수를 구현:

    • 각 거래 신호에 강도 스코어를 배정하고, 기한 이상의 신호만 실행한다
    • 원칙: 조건이 충족된 모든 신호가 동일한 품질이 아니며, 점수 메커니즘은 높은 품질의 신호를 필터링 할 수 있습니다.
    • 구현 방법: 가격과 평균의 거리, 마직 모드의 명확성, 반전점의 강도 등의 요인에 의한 종합 점수 계산
  8. 관련 시장 확인을 추가:

    • 관련 시장 또는 지수 데이터를 추가 확인 조건으로 도입합니다.
    • 원칙: 관련 시장의 일관성을 확인하는 것은 신호의 신뢰성을 향상시킵니다.
    • 실행 방법: 주요 지수나 관련 시장이 비슷한 반향을 보이는지 확인합니다.

요약하다

다주기 역전점 식별 및 자동 거래 전략은 기술 지표 포트폴리오를 기반으로 한 정량 거래 시스템으로, Magic-913 패턴 식별과 방향 역전점 분석을 결합하여 시장의 잠재적 인 역전 기회를 포착합니다. 이 전략의 핵심 장점은 여러 확인 메커니즘과 통합 된 위험 관리 기능으로, 시장 역전 초기에 비교적 신뢰할 수있는 거래 신호를 제공 할 수 있으며, 자동화 된 스톱 로즈로 위험을 제어합니다.

그러나, 이 전략은 또한 변수 감수성, 시장 환경 적응성 및 고정 중지 손해 차단과 같은 한계에 직면한다. 동적 변수 조정, 트렌드 필터를 추가, 중지 손해 차단 메커니즘을 최적화, 거래량을 확인하는 것을 추가하는 등의 최적화 조치를 시행함으로써 전략의 적응성과 성능 안정성을 크게 향상시킬 수 있다.

거래자에게는 이 전략은 시장의 전환점을 체계적으로 포착하는 프레임워크를 제공하지만, 개인 위험 선호와 시장에 대한 이해와 함께 합리적인 파라미터 조정 및 최적화를 수행해야합니다. 실제 적용 과정에서, 먼저 시뮬레이션 환경에서 충분히 테스트하여 다양한 시장 환경에서 전략의 성능을 이해한 다음 단계적으로 실제 거래에 적용하는 것이 좋습니다. 지속적인 최적화와 개선으로 이 전략은 거래자의 도구 상에 있는 효과적인 도구가 될 수 있습니다. 특히 시장의 전환점을 포착하는 데 있어

전략 소스 코드
/*backtest
start: 2025-06-05 00:00:00
end: 2025-06-05 15:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy('L3 Magic-9/13 Strategy', overlay=true, max_bars_back=4000, max_labels_count=500)

// 输入参数
length_input = input.int(title='Length', defval=9, minval=1)
lookback_length = input.int(title='Lookback Length', defval=4, minval=1)

// 获取第一个非 NA 值的函数
get_first_non_na_value(values, length) =>
    result = float(na)
    if length >= 1
        for i = 0 to length - 1
            if na(result) or not na(values[i])
                result := values[i]
    result

// 计算连续条件出现次数的函数
count_consecutive_occurrences(condition, length) =>
    count = 0
    for i = 1 to length
        if condition[i - 1]
            count += 1
    count

// 检查条件是否在给定周期内出现的函数
check_condition_occurrence(condition, length) =>
    occurrence = count_consecutive_occurrences(condition, length) != 0 ? 1 : 0
    occurrence

// 基于回溯周期过滤出现次数的函数
filter_occurrences(condition, lookback_period) =>
    output = 0.0
    temp = 0
    for i = lookback_period to 0
        if temp > 0
            output := 0.0
            temp := temp[1] - 1
        else
            if not condition[i]
                output := 0.0
            else
                output := 1.0
                temp := lookback_period + 1
    output_bool = output == 1 ? true : false
    output_bool

// Magic-9/13 逻辑
high_9 = count_consecutive_occurrences(close > get_first_non_na_value(close, 4), 9) == 9 and count_consecutive_occurrences(close > get_first_non_na_value(close, 4), 10) == 9
low_9 = count_consecutive_occurrences(close < get_first_non_na_value(close, 4), 9) == 9 and count_consecutive_occurrences(close < get_first_non_na_value(close, 4), 10) == 9

// 计算方向反转点
up_count = 0
down_count = 0
for i = 0 to length_input - 1
    up_count += (nz(close[i]) > nz(close[i + lookback_length]) ? 1 : 0)
    down_count += (nz(close[i]) < nz(close[i + lookback_length]) ? 1 : 0)

directional_reversal_point = down_count == length_input ? 1 : up_count == length_input ? -1 : 0

// 定义交易信号
buy_signal = check_condition_occurrence(low_9, 2) and ta.crossover(directional_reversal_point, 0)
sell_signal = check_condition_occurrence(high_9, 2) and ta.crossunder(directional_reversal_point, 0)

// 执行交易
if (buy_signal)
    strategy.entry("Buy", strategy.long)
    strategy.exit("Take Profit", "Buy", limit=close + 10 * syminfo.pointvalue, stop=close - 10 * syminfo.pointvalue)

if (sell_signal)
    strategy.entry("Sell", strategy.short)
    strategy.exit("Take Profit", "Sell", limit=close - 10 * syminfo.pointvalue, stop=close + 10 * syminfo.pointvalue)

// 绘制标签
labels = buy_signal ? label.new(bar_index, low, 'B', color=color.new(color.red, 40), textcolor=color.white, style=label.style_label_up, yloc=yloc.price, size=size.small) : sell_signal ? label.new(bar_index, high, 'S', color=color.new(color.lime, 40), textcolor=color.white, style=label.style_label_down, yloc=yloc.price, size=size.small) : na

// 绘制蜡烛图颜色
signal = directional_reversal_point > 0 or up_count > down_count ? 1 : directional_reversal_point < 0 or down_count > up_count ? -1 : 0
drp_color = signal > 0 ? color.green : signal < 0 ? color.red : color.black
barcolor(drp_color)