평균 회귀 연속 캔들스틱 반전 거래 전략

EMA MR ENTRY EXIT FILTER Trend
생성 날짜: 2025-02-19 10:51:35 마지막으로 수정됨: 2025-02-19 10:51:35
복사: 2 클릭수: 430
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

평균 회귀 연속 캔들스틱 반전 거래 전략

개요

이 전략의 핵심 논리는 3개의 연속적인 하락 K 라인이 나타나면 더 많은 입장을 취하고, 3개의 연속적인 상향 K 라인이 나타나면 더 많은 입장을 취하는 것입니다. 이 전략은 또한 선택적으로 EMA 일률 라인 필터를 결합하여 거래 품질을 향상시킬 수 있습니다.

전략 원칙

이 전략은 다음과 같은 핵심 요소를 기반으로 합니다.

  1. 연속 K 라인 카운터: 각각 연속으로 상승과 하락하는 K 라인의 수를 통계
  2. 입시 조건: 지정된 수량 (기본 3개) 의 연쇄적인 종결 가격 하락 K선 발생 시 다중 신호를 트리거
  3. 출구 조건: 지정된 수량 (기본 3개) 의 연속적인 종식 가격이 K선으로 올라갈 때 평점 신호를 유발합니다.
  4. EMA 필터: 선택적으로 200주기 지수 이동 평균을 트렌드 필터 조건으로 추가
  5. 거래 시간 창: 거래 간격을 제한하기 위해 특정 거래 시작 및 종료 시간을 설정할 수 있습니다.

전략적 이점

  1. 논리 단순 명확: 전략은 간단한 K선 계산 방법을 사용하여 이해하기 쉽고 구현할 수 있습니다.
  2. 적응성: 다른 시간 주기 및 거래 품종에 적용할 수 있습니다.
  3. 매개 변수 유연성: 연속 K선 수, EMA 주기 등의 매개 변수는 필요에 따라 조정할 수 있다.
  4. 리스크 관리가 완성: 시간 창과 트렌드 필터링과 같은 여러 메커니즘을 통해 리스크를 제어하십시오.
  5. 컴퓨팅 효율성: 핵심 논리는 단지 인접한 K 라인 종결 가격을 비교할 필요가 있으며, 운영 부담은 낮습니다.

전략적 위험

  1. 트렌드 시장 위험: 강한 트렌드 시장에서 자주 가짜 돌파구가 발생할 수 있습니다.
  2. 변수 민감성: 연속 K 선의 수에 대한 설정이 정책 성능에 큰 영향을 미칩니다.
  3. 슬라이드 효과: 격렬한 시장에서 더 큰 슬라이드 위험에 직면 할 수 있습니다.
  4. 가짜 신호 위험: 연속적인 K선 형태는 시장 소음으로 방해될 수 있다.
  5. 중단 손실 부족: 전략이 명확한 중지 손실 메커니즘을 설정하지 않았기 때문에 더 큰 철회로 이어질 수 있습니다.

전략 최적화 방향

  1. 스톱 메커니즘 추가: 고정 스톱 또는 추적 스톱을 추가하여 위험을 제어하는 것이 좋습니다.
  2. 최적화된 필터링 조건: 수요량, 변동률 등의 지표가 보조 필터링으로 도입될 수 있다
  3. 동적 변수 조정: 시장 상태에 따라 동적으로 조정되는 연속 K 선 수 요구 사항을 고려
  4. 창고 관리를 늘리십시오: 창고 건설과 창고 감소 메커니즘을 세분화하여 수익을 올릴 수 있습니다.
  5. 시간 관리를 개선: 다른 시간대에 대해 다른 거래 매개 변수를 설정합니다.

요약하다

이것은 합리적으로 설계된 평균값 회귀 전략이며, 단기 가격 오버박스 반발 기회를 포착하여 수익을 얻는다. 전략의 주요 장점은 논리적으로 간단하고 적응력이 강하지만 실제 응용에서는 위험을 제어하는 데 주의를 기울여야 하며, 스톱로스 메커니즘을 추가하고, 필터 조건을 최적화하는 등의 방법으로 전략의 안정성을 향상시키는 것이 좋습니다.

전략 소스 코드
/*backtest
start: 2025-01-19 00:00:00
end: 2025-02-18 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("3 Down, 3 Up Strategy", overlay=true, initial_capital = 1000000, default_qty_value = 200, default_qty_type = strategy.percent_of_equity, process_orders_on_close = true, margin_long = 5, margin_short = 5, calc_on_every_tick = true)


//#region INPUTS SECTION
// ============================================
// Time Settings
// ============================================
startTimeInput = input(timestamp("1 Jan 2014"), "Start Time", group = "Time Settings")
endTimeInput = input(timestamp("1 Jan 2099"), "End Time", group = "Time Settings")
isWithinTradingWindow = true

// ============================================
// Strategy Settings
// ============================================
buyTriggerInput = input.int(3, "Consecutive Down Closes for Entry", minval = 1, group = "Strategy Settings")
sellTriggerInput = input.int(3, "Consecutive Up Closes for Exit", minval = 1, group = "Strategy Settings")

// ============================================
// EMA Filter Settings
// ============================================
useEmaFilter = input.bool(false, "Use EMA Filter", group = "Trend Filter")
emaPeriodInput = input.int(200, "EMA Period", minval = 1, group = "Trend Filter")
//#endregion

//#region INDICATOR CALCULATIONS
// ============================================
// Consecutive Close Counter
// ============================================
var int aboveCount = na
var int belowCount = na

aboveCount := close > close[1] ? (na(aboveCount) ? 1 : aboveCount + 1) : 0
belowCount := close < close[1] ? (na(belowCount) ? 1 : belowCount + 1) : 0

// ============================================
// Trend Filter Calculation
// ============================================
emaValue = ta.ema(close, emaPeriodInput)
//#endregion

//#region TRADING CONDITIONS
// ============================================
// Entry/Exit Logic
// ============================================
longCondition = belowCount >= buyTriggerInput and isWithinTradingWindow
exitCondition = aboveCount >= sellTriggerInput

// Apply EMA Filter if enabled
if useEmaFilter
    longCondition := longCondition and close > emaValue
//#endregion

//#region STRATEGY EXECUTION
// ============================================
// Order Management
// ============================================
if longCondition
    strategy.entry("Long", strategy.long)
    
if exitCondition
    strategy.close_all()
//#endregion