
이 전략은 다중 주기 평균선, 트렌드 식별 및 양적 분석을 기반으로 한 거래 시스템이며, 핵심 아이디어는 단기 및 중기 평균선이 형성된 밀집 구역을 식별하여 장기 평균선 확인과 결합한 트렌드 방향, 가격이 밀집 구역을 뚫은 후 반전 할 때 입문 거래, ATR 동적 중지 및 이동 중지 메커니즘을 적용하여 위험을 관리합니다. 전략은 전통적인 평형 시스템 기반에 최적화되어 있으며, 수량 필터링, 트렌드 필터링 및 정밀 역입 조건이 추가되어 거래 신호를 더 신뢰할 수 있습니다.
이 전략의 핵심은 다음과 같은 몇 가지 핵심 요소에 기반합니다.
평선 밀도 지역 식별전략: 20일 (단기) 와 60일 (중기) 의 평평선이 밀집된 지역을 형성합니다. 이 지역은 일반적으로 시장 참가자들의 합의된 가치 영역을 나타냅니다.
동향 확인60일 (중기) 와 120일 (장기) 의 평균선을 비교하여 전체적인 경향 방향을 결정한다. 중기 평균선이 장기 평균선 위에 있을 때, 상승 경향으로 인식되고, 반대로 하향 경향으로 인식된다.
은 후 다시 밟고 들어갑니다.이 전략의 특이한 점은 바로 돌파구에서 입문하는 것이 아니라, 돌파구 이후 가격이 밀집된 지역으로 돌아가는 동안 다시 입문하는 것이 가짜 돌파구로 인한 위험을 효과적으로 줄일 수 있다는 것입니다.
양수 확인입시 신호는 거래량이 20일 평균 거래량의 1.5배 이상이라는 조건을 충족시켜야 하며, 시장에 충분한 참여가 가격 운동을 지원할 수 있도록 해야 한다.
위험 관리전략: ATR 지표에 기반한 동적 중지 및 이동 중지 메커니즘을 사용하여 시장의 변동성에 따라 자동으로 조정할 수 있도록 중지 중지 수준을 조정합니다.
코드 구현에서 볼 때, 다중 입구 조건은: 전날의 가격이 밀집된 구역을 돌파하여 상향 경로에 올라간다 (smaShort와 smaMid의 최대 값), 그날의 가격이 다시 올라갔지만 여전히 밀집된 구역 안에 있다 (아래 경로보다 낮지 않습니다), 그리고 중간 트렌드는 상승한다 (smaMid > smaLong), 동시에 거래량 조건이 충족된다. 공중 입구 조건은 그 반대이다.
이 전략의 코드 구현을 심층적으로 분석하면 다음과 같은 장점이 있습니다.
다단계 인증 메커니즘전략 종합은 짧은, 중간, 긴 3 시간 주기 평균 지표를 고려하고, 가격 행동과 거래량과 결합하여 다단계 신호 확인 메커니즘을 형성하여 오판률을 효과적으로 감소시킵니다.
리스크를 줄이기 위해이 전략은 기존의 브레이크 전략과 달리 브레이크포인트에서 직접 입문하는 것으로부터 더 나은 입문 가격을 얻을 수 있으며 거래 비용과 위험을 줄일 수 있습니다.
트렌드 필터링으로 승률을 높여라: 중장기평평선관계를 통해 큰 트렌드 방향을 결정하고, 트렌드 방향이 명확할 때만 거래하며, 흔들리는 시장에서 자주 거래되는 손실을 피한다.
동적 위험 관리ATR 기반의 손해 중지 및 이동식 중지 메커니즘은 시장의 변동성에 따라 보호 위치를 자동으로 조정하여 수익을 보호하면서 가격에 충분한 호흡 공간을 제공합니다.
수송량 확인이 신뢰성을 강화거래량이 평균보다 1.5배 이상으로 요구함으로써 거래가 시장 활동이 높은 시기에 이루어지는 것을 보장하고, 유동성이 낮은 환경에서 잘못된 판단을 줄입니다.
강력한 매개변수 조정성전략은 평균 주기, ATR 배수, 거래량 저하 등과 같은 여러 가지 조정 가능한 매개 변수를 제공하여 거래자가 다른 시장 환경과 거래 선호도에 따라 유연하게 조정할 수 있습니다.
이 전략은 포괄적으로 설계되었지만, 다음과 같은 잠재적인 위험들이 있습니다.
평균선 뒤떨어짐: 평균선은 본질적으로 뒤처진 지표이며, 급격한 변동성이있는 시장에서 가격 변화를 적시에 반영하지 못할 수 있으며, 입시 또는 출구 신호 지연을 초래합니다. 해결책은 높은 변동성이있는 시장에서 평균선 주기를 적절히 줄이는 것을 고려하거나 다른 선도적 지표와 결합하여 의사 결정을 보조하는 것입니다.
빈번한 가짜 침입: 수평 변동 시장에서, 가격이 밀집된 영역을 자주 뚫고 다시 돌아 올 수 있으며, 이로 인해 자주 거래되고 손실이 누적됩니다. 추가 필터링 조건을 추가하는 것이 좋습니다.
Stop Loss Range 설정 위험: 고정 배수의 ATR 정지는 다른 시장 환경에서 지나치게 느슨하거나 지나치게 긴밀할 수 있다. 특정 품종의 변동 특성과 역사적인 회귀 결과에 따라 ATR 배수 파라미터를 조정해야 한다.
과도한 거래량 의존: 일부 시장의 거래량 데이터는 충분히 투명하지 않거나 정확하지 않을 수 있으며 거래량 조건에 과도하게 의존하면 유효한 신호를 놓치게 될 수 있습니다. 거래량 조건을 선택적으로 설정하거나 가격 행동 분석과 결합하는 것이 고려 될 수 있습니다.
변수 최적화 오버패칭: 다중 매개 변수 시스템은 과도한 적합 함정에 빠지기 쉽고, 역사 데이터에 대해 잘 수행하지만 실 디스크 효과는 좋지 않습니다. Walk-Forward Analysis를 사용하여 전략의 안정성을 다른 시간 동안 검증하는 것이 좋습니다.
코드 분석을 바탕으로, 이 전략은 다음과 같은 방향으로 최적화될 수 있습니다:
시간 프레임 필터를 추가합니다.: 더 큰 시간 프레임의 트렌드 확인을 추가하는 것을 고려하여 거래 방향이 더 큰 주기적 트렌드와 일치하는지 확인하십시오. 큰 주기적 트렌드가 일반적으로 더 강한 지속성과 신뢰성을 가지고 있기 때문입니다.
가격 변동에 대한 적응 장치를 도입: 최근 시장의 변동에 따라 평균선 주기 및 ATR 배수를 자동으로 조정할 수 있으므로 전략이 다른 시장 환경에서 좋은 성능을 유지할 수 있습니다. 높은 변동률의 시장에서 평균선 주기 적절히 연장하여 신호 주파수를 낮추십시오. 낮은 변동률의 시장에서 평균선 주기 적절히 단축하여 민감성을 향상하십시오.
계절과 시간 필터를 추가하세요.특정 시장에는 계절적 특성이 있거나 일간 시간 효과가 뚜렷하게 나타나기 때문에 시간 필터링 조건을 추가하여 역사적으로 좋지 않은 시기를 피할 수 있습니다.
로그인 확인을 최적화합니다.: 현재 회귀 확인은 가격이 밀집된 지역 안에 있는지 여부에만 기초하고 있습니다. 더 정교한 회귀 깊이 요구 사항을 추가하는 것이 고려될 수 있습니다. 예를 들어, 회귀를 밀집된 지역으로 요구하는 특정 비율 위치 (예: 38.2%, 50% 회귀 위치) 또는 K 선 모양으로 확인 회귀 끝.
자금 관리 모듈을 추가: 현재 전략은 고정 수량 거래를 사용하며, 계좌 규모와 위험 비율에 기반한 역동적인 포지션 관리, 예를 들어 고정 위험 비율 또는 케일리 공식으로 개선할 수 있습니다. 이는 자본 곡선과 최대 인출 통제를 최적화합니다.
시장 환경 인식에 참여시장 환경의 분류를 추가하기 (추진시장/동기시장), 서로 다른 시장 환경에서 서로 다른 매개 변수 설정을 사용하거나 심지어는 서로 다른 거래 전략을 사용함으로써 부적절한 시장 환경에서 자주 거래되는 것을 피할 수 있습니다.
“다중평평선 트렌드 돌파 반발 거래 시스템과 ATR 동적 상쇄”는 기술 분석의 여러 성숙한 개념을 결합한 양적 거래 전략이다. 그것은 평평선 밀집 구역을 통해 가치 영역을 식별하고, 평평선 시스템을 사용하여 트렌드 방향을 결정하고, 돌파 반발의 가격 행동과 거래량 확인을 결합하여 비교적 완벽한 거래 시스템을 구축한다. 이 전략의 장점은 다층의 신호 확인 장치와 유연한 위험 관리 시스템으로 중장기 트렌드 추적 거래에 적합하다.
이 전략은 실제 적용에서 평선 시스템의 지연 문제와 변수 최적화의 과도한 적합성의 위험에 주의를 기울여야 한다. 적응 메커니즘, 시장 환경 인식 및 더 정교한 역전 확인 논리를 추가함으로써 이 전략에 큰 개선 공간이 있다. 또한, 더 나은 자금 관리 시스템과 결합하여 전략의 안정성과 장기 수익성을 더욱 향상시킬 것이다.
전체적으로, 이것은 합리적이고 논리적으로 설계된 거래 시스템입니다. 이것은 “트렌드를 따라 + 동적 위험 관리”의 핵심 거래 철학을 나타냅니다.
/*backtest
start: 2024-03-05 00:00:00
end: 2025-03-03 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/
//@version=5
strategy("均线密集区交易系统(优化版2)", shorttitle="MA_Zone_Opt2", overlay=true, initial_capital=10000, default_qty_type=strategy.fixed, default_qty_value=1000, commission_value=0.1)
// === 输入参数 ===
smaShortPeriod = input.int(20, title="短期SMA周期", minval=1)
smaMidPeriod = input.int(60, title="中期SMA周期", minval=1)
smaLongPeriod = input.int(120, title="长期SMA周期", minval=1)
atrPeriod = input.int(14, title="ATR周期", minval=1)
atrMultiplierStop = input.float(3.0, title="止损ATR倍数", minval=1.0)
atrMultiplierTrail = input.float(2.0, title="移动止盈ATR倍数", minval=1.0)
volPeriod = input.int(20, title="成交量周期", minval=1)
volThreshold = input.float(1.5, title="成交量倍数", minval=1.0)
// === 计算均线 ===
smaShort = ta.sma(close, smaShortPeriod) // MA20
smaMid = ta.sma(close, smaMidPeriod) // MA60
smaLong = ta.sma(close, smaLongPeriod) // MA120
// === 计算 ATR 和成交量 ===
atrValue = ta.atr(atrPeriod)
volAvg = ta.sma(volume, volPeriod)
volCondition = volume > volAvg * volThreshold // 成交量高于平均值 1.5 倍
// === 定义均线密集区(只用 SMA20 和 SMA60) ===
maMax = math.max(smaShort, smaMid)
maMin = math.min(smaShort, smaMid)
// === 趋势过滤:SMA60 和 SMA120 的相对位置 ===
trendUp = smaMid > smaLong // 60日均线上穿120日均线,上升趋势
trendDown = smaMid < smaLong // 60日均线下穿120日均线,下降趋势
// === 交易信号逻辑 ===
// 涨破密集区:K线收盘价突破 maMax
breakUp = ta.crossover(close, maMax)
// 跌破密集区:K线收盘价跌破 maMin
breakDown = ta.crossunder(close, maMin)
// 回踩条件:
// 买入 - 前一根K线跌至密集区内,当前K线仍在密集区内,且趋势向上
pullbackUp = close[1] <= maMax and close[1] >= maMin and close >= maMin and trendUp and volCondition
// 卖出 - 前一根K线涨至密集区内,当前K线仍在密集区内,且趋势向下
pullbackDown = close[1] >= maMin and close[1] <= maMax and close <= maMax and trendDown and volCondition
// === 买卖逻辑 ===
// 买入(多单):涨破后回踩,且趋势向上
if breakUp[1] and pullbackUp
strategy.entry("Long", strategy.long)
// 动态止损和移动止盈
stopLossPrice = strategy.position_avg_price * (1 - atrMultiplierStop * atrValue / close)
trailStopPrice = close * (1 - atrMultiplierTrail * atrValue / close)
strategy.exit("Long_Exit", "Long", stop=stopLossPrice, trail_points=trailStopPrice, trail_offset=0)
// 卖出(空单):跌破后回踩,且趋势向下
if breakDown[1] and pullbackDown
strategy.entry("Short", strategy.short)
// 动态止损和移动止盈
stopLossPriceShort = strategy.position_avg_price * (1 + atrMultiplierStop * atrValue / close)
trailStopPriceShort = close * (1 + atrMultiplierTrail * atrValue / close)
strategy.exit("Short_Exit", "Short", stop=stopLossPriceShort, trail_points=trailStopPriceShort, trail_offset=0)
// === 绘制信号点 ===
plotshape(breakUp[1] and pullbackUp, title="买入信号", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(breakDown[1] and pullbackDown, title="卖出信号", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)