
상위 평균선과 흡수형태의 양적화 전략은 다중 기술 지표가 결합된 거래 시스템으로, 주로 이동 평균선, 흡수형태의 도표 모형 및 가격 구조의 돌파구를 기반으로 거래 신호를 결정한다. 이 전략은 다중 요인의 집합점을 찾아 거래의 신뢰성을 높이고, 트렌드 따라가는 사고방식을 사용하여 확인된 시장 방향에서 진입 기회를 찾는다. 핵심 논리는 66주기와 85주기의 간단한 이동 평균선으로 전체 트렌드 방향을 판단하고, 흡수형태의 도표가 제공하는 단기 역전 신호를 결합하고, 돌파구 (< 돌파구 전기의 최고점 또는 최저점) 을 통해 트렌드의 지속성을 확인하여 종합적인 거래 의사결정 시스템을 형성한다.
이 전략의 핵심 원칙은 여러 기술 지표의 공조적 인증을 기반으로 하며, 다음과 같은 몇 가지 핵심 구성 요소를 포함합니다.
이중 이동 동선 시스템전략: 66주기 및 85주기 간단한 이동 평균 (SMA) 을 사용하여 시장의 전반적인 추세 방향을 결정한다. 가격이 두 개의 평균선 위에있을 때, 낙점 추세로 간주되며, 가격이 두 개의 평균선 아래에있을 때, 낙점 추세로 간주됩니다.
형태를 인식하는 것을 삼키고:
가격 구조의 획기적인 발견:
다중 인증 메커니즘전략은 4가지 조건 중 적어도 2가지가 충족되어야 거래 신호가 생성됩니다.
냉각기전략은 방향 냉각 메커니즘을 구현하여 거래 신호를 유발한 후 지정된 K 라인 수 내에서 동일한 방향으로 거래 신호를 반복적으로 생성하지 않도록합니다.
다중 인증 메커니즘: 적어도 두 가지 기술 지표가 동시에 충족되어야 거래 신호가 생성됩니다. 이는 가짜 신호의 가능성을 크게 줄이고 신호의 신뢰성을 높입니다.
추세와 반전의 결합: 이동 평균선을 통해 중·장기 트렌드를 포착하고, 동시에 포식 형태를 이용하여 단기 반전 기회를 포착하여, 트렌드 및 반전 전략의 유기적인 결합을 실현한다.
가격 구조 분석: 시장 구조 분석을 통합하여 고점과 저점의 돌파구를 식별하여 트렌드의 지속성을 확인합니다. 이것은 더 고급 기술 분석 방법입니다.
냉각 장치: 냉각기 기능을 설계하여 연속 신호로 인한 과도한 거래 문제를 효과적으로 방지하고 거래 주파수를 제어하는 데 도움이됩니다.
매개 변수 조정전략의 핵심 매개 변수 (예: 평균주기, 냉각기 길이는) 는 다른 시장과 시간 프레임에 따라 조정될 수 있으며, 잘 적응할 수 있다.
위험과 수익률의 최적화전략 테스트에 따르면, 약 30%의 승률이 있지만, 수익 거래는 손실 거래에 비해 상당한 장점이 있으며, “이윤을 달리고 손실을 통제”하는 거래 원칙에 부합합니다.
가짜 침입 위험가격 구조의 돌파구: 가짜 돌파구가 발생할 수 있으며, 특히 변동성이 높은 시장에서 잘못된 거래 신호로 이어질 수 있습니다. 해결책은 돌파구 이후의 지속성을 요구하는 확인 메커니즘을 추가하거나 거래량 분석을 통합하는 것입니다.
평균선 뒤떨어짐이동 평균선은 본질적으로 지연 지표이며, 급변하는 시장에서 가격 변화를 적시에 반영하지 못할 수 있으며, 입시 신호 지연을 초래한다. 이 문제를 완화하기 위해 더 민감한 지표인 EMA 또는 평균선 주기를 조정하는 것을 고려할 수 있다.
과도한 거래의 위험냉각 장치가 있음에도 불구하고, 전략 작성자는 이 전략이 더 많은 신호를 생성할 것이라고 언급했으며, 거래가 너무 자주 발생할 수 있다고 언급했다. 더 엄격한 필터링 조건을 추가하거나 냉각 기간을 연장하는 것이 좋습니다.
시장환경의존성: 이 전략은 트렌드가 명확한 시장에서 잘 작동하지만, 수평 정리 또는 높은 변동성 시장에서 더 많은 잘못된 신호를 일으킬 수 있습니다. 시장 환경 식별 장치를 추가하여 다양한 시장 상태에서 전략 매개 변수를 조정하거나 거래를 중지 할 수 있습니다.
손해 방지 장치의 부재: 코드에서 명확하게 중지 손실 전략이 설정되지 않아 단일 손실이 너무 커질 수 있습니다. ATR 기반의 중지 또는 고정 비율 중지와 같은 엄격한 중지 메커니즘을 구현하는 것이 좋습니다.
피포나치 회귀 지역을 개선하기: 현재 코드의 피보나치 리콜 검사는 위치 기호인 ((forever returns true) 로 실제 피보나치 리콜 영역 식별을 가능하게 하고, 입구에 대해 보다 정확한 가격 수준을 지원한다.
볼륨 증가 확인거래량 분석을 전략에 포함하면 가격 돌파구의 유효성을 확인하고 가짜 돌파구의 위험을 줄일 수 있습니다. 특히 구조적 돌파구에서 배포량과 함께 돌파구의 신뢰성을 높일 수 있습니다.
동적 조정 변수: 시장의 변동성 (ATR 지표와 같은) 을 기반으로 평균 주기와 냉각 기간의 길이를 동적으로 조정하여 전략이 다른 시장 환경에 더 잘 적응 할 수 있도록합니다.
스피드 메커니즘을 추가: 위험 관리에 기반한 스톱 스톱 전략, 예를 들어 ATR 기반의 동적 스톱, 또는 초기 지지 저항 지점을 스톱 스톱 지점으로 사용한다.
시장 환경 필터링: 시장 환경 인식 모듈을 추가하여, 예를 들어 ADX 지표를 사용하여 시장이 트렌드 상태인지 판단하고, 트렌드 없는 시장에서 거래를 중지하거나 전략 파라미터를 조정합니다.
시간 필터거래 시간 필터를 늘리고, 주요 경제 데이터 발표 또는 시장 개시 및 종료 시기와 같은 높은 변동성이나 낮은 유동성을 피하십시오.
신호 강도 등급: 조건을 충족하는 수와 강도에 따라 신호를 등급화하고, 이에 따라 포지션 크기를 조정하여 더 정밀한 포지션 관리를 구현한다.
상위 평균선과 흡수 형태를 결합한 양적 전략은 여러 가지 기술적 분석 방법을 결합한 통합 거래 시스템으로, 이동 평균선, 흡수 형태 및 가격 구조의 돌파구의 연동 작용을 통해 잠재적인 거래 기회를 식별합니다. 이 전략의 주요 장점은 여러 가지 확인 메커니즘으로, 가짜 신호를 효과적으로 줄이고 거래 품질을 향상시킵니다. 동시에, 전략의 냉각 메커니즘은 거래 주파수를 제어하고 과도한 거래를 피하는 데 도움이됩니다.
그러나, 이 전략은 또한 몇 가지 위험이 있습니다. 가짜 돌파, 평균선 뒤떨어짐 및 시장 환경 의존과 같은 문제. 피보나치 회귀 지역 식별을 개선, 거래량 확인을 증가, 동적으로 조정하는 매개 변수 및 더 나은 위험 관리 메커니즘을 추가하는 등의 최적화 조치를 통해 전략의 성능이 더욱 향상될 전망이다.
전체적으로, 이 전략은 좋은 이론적 기반과 실용적인 잠재력을 가지고 있으며, 특히 다중 기술 지표를 사용하여 거래 결정을 내리는 것을 선호하는 거래자들에게 적합합니다. 그러나 주의해야 할 점은, 모든 거래 전략은 실제 적용되기 전에 충분한 피드백과 검증이 필요하며, 개인의 위험 감수성과 시장 환경에 따라 적절하게 조정됩니다.
/*backtest
start: 2024-07-28 00:00:00
end: 2025-07-26 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © IamKRfx
//@version=6
//@version=6
strategy("Refined MA + Engulfing (M5 + Confirmed Structure Break)", overlay=true, default_qty_type=strategy.fixed, default_qty_value=5)
// === INPUTS ===
ma1Len = input.int(66, title="MA1 Length")
ma2Len = input.int(85, title="MA2 Length")
cooldownBars = input.int(5, title="Directional Cooldown (bars)")
// === MOVING AVERAGES ===
ma1 = ta.sma(close, ma1Len)
ma2 = ta.sma(close, ma2Len)
plot(ma1, color=color.orange, title="MA 66")
plot(ma2, color=color.blue, title="MA 85")
aboveMAs = close > ma1 and close > ma2
belowMAs = close < ma1 and close < ma2
// === ENGULFING LOGIC ===
bullEngulf = close > open and close > close[1] and open <= close[1]
bearEngulf = close < open and close < close[1] and open >= close[1]
// === SWING HIGH/LOW DETECTION ===
pivotHigh = ta.pivothigh(high, 2, 2)
pivotLow = ta.pivotlow(low, 2, 2)
var float lastSwingHigh = na
var float lastSwingLow = na
var string marketStructure = "none" // can be "bullish", "bearish", or "none"
var bool structureConfirmed = false
// Track last swing points
if not na(pivotHigh)
lastSwingHigh := pivotHigh
if not na(pivotLow)
lastSwingLow := pivotLow
// Confirm structure breaks
bullBreakConfirmed = not na(lastSwingHigh) and close > lastSwingHigh
bearBreakConfirmed = not na(lastSwingLow) and close < lastSwingLow
if bullBreakConfirmed
marketStructure := "bullish"
structureConfirmed := true
if bearBreakConfirmed
marketStructure := "bearish"
structureConfirmed := true
bullishStructure = marketStructure == "bullish" and structureConfirmed
bearishStructure = marketStructure == "bearish" and structureConfirmed
// === PLACEHOLDER FOR FIB CONFLUENCE ===
inFibLong = true
inFibShort = true
// === CONFLUENCE CHECK (2 of 4) ===
longConfluence = 0
longConfluence += bullEngulf ? 1 : 0
longConfluence += bullishStructure ? 1 : 0
longConfluence += aboveMAs ? 1 : 0
longConfluence += inFibLong ? 1 : 0
shortConfluence = 0
shortConfluence += bearEngulf ? 1 : 0
shortConfluence += bearishStructure ? 1 : 0
shortConfluence += belowMAs ? 1 : 0
shortConfluence += inFibShort ? 1 : 0
longReady = longConfluence >= 2
shortReady = shortConfluence >= 2
// === COOLDOWN TRACKING ===
var int lastLongBar = na
var int lastShortBar = na
canLong = na(lastLongBar) or (bar_index - lastLongBar >= cooldownBars)
canShort = na(lastShortBar) or (bar_index - lastShortBar >= cooldownBars)
// === FINAL ENTRY CONDITIONS ===
longCondition = longReady and canLong and bullishStructure and aboveMAs
shortCondition = shortReady and canShort and bearishStructure and belowMAs
if (longCondition)
strategy.entry("Long", strategy.long)
lastLongBar := bar_index
if (shortCondition)
strategy.entry("Short", strategy.short)
lastShortBar := bar_index