
TMA 전략은 트렌드 트래킹 시스템으로, 다중주기 평행 이동 평균 (SMMA) 과 K선형 분석을 교묘하게 결합하여 높은 확률의 거래 기회를 식별합니다. 이 전략은 21, 50, 100 및 200 주기의 평행 이동 평균을 트렌드 식별 및 지지/저항 영역의 기초로 사용하며, 진입 신호를 확인하기 위해 “삼선 반격”과 “사진 형태”의 두 가지 클래식 K선형 형태를 사용합니다. 가짜 신호를 줄이고 거래 방향이 주류와 일치하도록 하기 위해, 이 전략은 또한 2주기 지수 이동 평균 (EMA) 을 동적 트렌드 필터로 사용합니다.
TMA 전략의 핵심 논리는 다주기 평평한 이동 평균, K선 형태 확인 및 거래 세션 필터링을 중심으로 전개된다. 첫째, 전략은 4개의 다른 주기 ([21 , 50 , 100 및 200]) 의 평평한 이동 평균을 계산하고, 이러한 이동 평균은 시장 추세를 위한 틀을 구성한다. 둘째, 전략은 2주기 EMA를 단기 트렌드 지표로 사용하여 현재 가격 움직임을 판단한다.
입시 조건은 매우 엄격하게 설계되어 있으며, 여러 가지 조건을 동시에 충족시켜야 합니다.
또한, 트레이딩 세션 필터가 활성화되어 있다면, 지정된 트레이딩 시간 내에 입문 작업을 수행해야 합니다. 이러한 다층 조건 필터링 디자인은 잘못된 신호의 발생을 효과적으로 감소시킵니다.
“이런 일이 벌어진다면, 우리는 더 나은 삶을 살 수 있을 것이다.
이 디자인은 트렌드가 충분히 발전할 수 있도록 허용하면서 트렌드 반전의 초기 단계에서 즉시 탈퇴하여 수익을 효과적으로 보호합니다.
TMA 전략은 강력한 트렌드 추적 도구가 되는 여러 장점이 있습니다:
다층적 추세 확인: 여러 기간의 평탄한 이동 평균을 조합하여 전략은 시장 추세의 강도와 지속성을 전체적으로 평가하고 단일 지표로 인한 오해를 줄일 수 있습니다.
K선형 확인이 전략은 기술적인 지표뿐만 아니라, 고전적인 K선 형태 분석과 결합하여, 이중 확인 메커니즘으로 출입 신호의 신뢰성을 크게 향상시켰다.
매우 적응력이 좋다: 조정 가능한 파라미터 설정 (예를 들어, 이동 평균 주기, 거래 세션 시간 등) 은 전략이 다른 시장과 거래 스타일에 적응할 수 있도록 합니다.
개선된 위험 관리: 이동 평균의 교차에 기초한 명확한 출구 조건으로, 거래자에게 객관적인 위험 제어 장치를 제공하여 주관적 판단으로 인해 발생할 수 있는 과도한 포지션을 피한다.
유동성 관리거래 세션 필터를 통해, 전략은 낮은 유동성 시기를 피할 수 있고, 슬라이드 포인트와 가격 조작 위험을 줄일 수 있습니다.
소음을 줄여라: 평평한 이동 평균의 사용은 시장 소음의 영향을 줄이고 트렌드 신호를 더 명확하게 만듭니다.
다 시장 적용성전략 설계는 외환, 주식, 암호화폐와 같은 여러 시장에 적용되며, 특히 더 높은 시간 프레임 (15분, 1시간, 4시간, 일선) 에서 더 효과적입니다.
TMA 전략의 장점은 많지만, 몇 가지 잠재적인 위험도 있습니다.
추세 지연 인식이동 평균을 주요 지표로 사용하기 때문에 트렌드 전환의 신호가 상대적으로 늦어지고 트렌드의 초기 단계의 일부 수익을 놓칠 수 있습니다. 해결 방법: 잠재적인 트렌드 전환을 미리 식별하기 위해 더 민감한 지표 (예를 들어 MACD 또는 RSI) 와 결합하는 것이 고려 될 수 있습니다.
시장의 부진: 트렌드 추적 전략으로, 가로 디스크 정리 또는 자주 흔들리는 시장 환경에서 연속적인 손실 거래가 발생할 수 있습니다. 해결 방법: 시장 모드 필터를 추가하여, 흔들리는 시장이 확인되면 거래를 중지하거나 흔들리는 시장에 적합한 파라미터 설정으로 조정하십시오.
가짜 침입 위험: K선 형태는 삼키기 형태와 3선 반격 같은 경우에 가짜 신호를 생성할 수 있다. 해결 방법: 거래량 확인이나 핵심 가격 수준 돌파 확인과 같은 추가 확인 조건을 추가할 수 있다.
과대 최적화 위험: 여러 개의 조정 가능한 매개 변수가 역사적 데이터에 과도하게 맞출 수 있지만 미래 시장에서 좋지 않은 성능을 나타냅니다. 해결 방법: 다양한 시장과 시간대에 충분한 회귀를 수행하고 매개 변수 설정을 안정적으로 유지하십시오.
세션 필터 시간대 설정거래 세션 필터는 올바른 시간대 설정에 의존하며, 잘못된 구성으로 인해 부적절한 시간대에 거래가 발생할 수 있습니다. 해결 방법: 시간대 설정을 신중하게 확인하여 목표 시장의 활성 시간대에 일치하도록하십시오.
코드에 대한 심층적인 분석을 바탕으로 TMA 전략에는 다음과 같은 몇 가지 최적화 방향이 있습니다.
동적 변수 조정현재 전략은 고정된 이동 평균 주기를 사용하며, 시장의 변동률에 따라 이러한 매개 변수를 자동으로 조정하는 것을 고려할 수 있습니다. 예를 들어, 높은 변동성이있는 시장에서 더 긴 주기를 사용하여 소음을 줄이고, 낮은 변동성이있는 시장에서 더 짧은 주기를 사용하여 민감성을 높입니다.
손해 방지 장치: 현재 전략은 이동 평균 교차를 출전 조건으로만 의존하고 있으며, 고정 중지 또는 추적 중지 기능을 추가하여 단일 거래의 최대 손실을 제한하고 자금을 보호 할 수 있습니다.
변동성 필터 소개: 입시 조건에 변동률 지표를 추가하기 (ATR 또는 표준 차등과 같은), 비정상적인 변동이있는 동안 시장에 진입하는 것을 피하거나, 변동률 수준에 따라 위치 크기를 동적으로 조정하여 더 정교한 위험 관리를 구현하기.
거래량 관리를 최적화: 고정된 자본 비율이 아닌 트렌드 강도 또는 신호 품질에 따라 포지션 크기를 조정하는 것을 고려하십시오. 이것은 높은 확률 거래에서 수익을 높이고 낮은 확률 거래의 위험 틈을 줄일 수 있습니다.
일부 수익 잠금 장치를 추가합니다.: 거래가 어느 정도의 수익을 얻으면, 부분적으로 평점 또는 비용 가격으로 스톱포트를 이동하여 수익의 일부를 잠금하고, 동향에 계속 참여할 기회를 유지할 수 있습니다.
다중 시간 프레임 확인: 더 높은 시간 프레임의 트렌드 분석을 통합하여, 더 높은 시간 프레임의 트렌드 방향이 일치하는 경우에만 참가하면, 이는 성공률을 크게 높이고, 가짜 돌파의 위험을 줄일 수 있다.
TMA 전략은 정교하게 설계된 트렌드 추적 시스템으로, 다중 주기 평평한 이동 평균, K선 형태 확인 및 동적 트렌드 필터의 조합을 통해 거래자에게 시장 추세를 식별하고 포착하는 체계화된 방법을 제공합니다. 이 전략은 확인 메커니즘에 특별한 관심을 기울이며, 거래가 수행되기 전에 동시에 여러 가지 조건이 충족되도록 요구하며, 잘못된 보고율을 효과적으로 감소시킵니다.
트렌드 식별 지연 및 변동 시장의 부실 성능과 같은 몇 가지 고유한 위험이 있음에도 불구하고, 이러한 위험은이 문서에서 제시한 최적화 방향에 의해 완화 될 수 있습니다. 손실 차단 장치, 변동율 필터, 다중 시간 프레임 확인 등의 기능을 추가함으로써 이 전략의 안정성과 적응성이 더욱 향상 될 수 있습니다.
마지막으로, 어떤 거래 전략도 100%의 승률이 없다는 것을 강조해야합니다. TMA 전략도 예외는 아닙니다. 성공적인 거래는 전략 자체뿐만 아니라 거래자의 징계, 위험 관리 능력 및 시장에 대한 이해에 달려 있습니다.
/*backtest
start: 2025-02-26 00:00:00
end: 2025-03-05 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/
//@version=5
strategy("TMA Strategy", shorttitle="TMA Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1)
// Smoothed MAs Inputs
len1 = input.int(21, title="Length 1", group="Smoothed MA Inputs")
src1 = input.source(close, title="Source 1", group="Smoothed MA Inputs")
len2 = input.int(50, title="Length 2", group="Smoothed MA Inputs")
src2 = input.source(close, title="Source 2", group="Smoothed MA Inputs")
h100 = input.bool(true, title="Show 100 Line", group="Smoothed MA Inputs")
len3 = input.int(100, title="Length 3", group="Smoothed MA Inputs")
src3 = input.source(close, title="Source 3", group="Smoothed MA Inputs")
len4 = input.int(200, title="Length 4", group="Smoothed MA Inputs")
src4 = input.source(close, title="Source 4", group="Smoothed MA Inputs")
// Calculate Smoothed MAs
smma1 = ta.sma(src1, len1)
plot(smma1, color=color.white, linewidth=2, title="21 SMMA")
smma2 = ta.sma(src2, len2)
plot(smma2, color=color.green, linewidth=2, title="50 SMMA")
smma3 = ta.sma(src3, len3)
plot(h100 ? smma3 : na, color=color.yellow, linewidth=2, title="100 SMMA")
smma4 = ta.sma(src4, len4)
plot(smma4, color=color.red, linewidth=2, title="200 SMMA")
// Trend Filter
ema2 = ta.ema(close, 2)
// 3 Line Strike Signals
bullSig = close[3] < open[3] and close[2] < open[2] and close[1] < open[1] and close > open[1]
bearSig = close[3] > open[3] and close[2] > open[2] and close[1] > open[1] and close < open[1]
// Engulfing Candles Signals
bullishEngulfing = open <= close[1] and open < open[1] and close > open[1]
bearishEngulfing = open >= close[1] and open > open[1] and close < open[1]
// Trading Session Filter
ts = input.bool(true, title="Enable Session Filter", group="Trade Session")
tz = input.string("America/Chicago", title="Timezone", options=["America/New_York", "America/Chicago", "Europe/London", "Europe/Frankfurt", "Asia/Tokyo", "Asia/Sydney", "UTC"], group="Trade Session")
startH = input.int(8, title="Session Start Hour", minval=0, maxval=23, group="Trade Session")
startM = input.int(30, title="Session Start Minute", minval=0, maxval=59, group="Trade Session")
endH = input.int(12, title="Session End Hour", minval=0, maxval=23, group="Trade Session")
endM = input.int(0, title="Session End Minute", minval=0, maxval=59, group="Trade Session")
startTime = timestamp(year, month, dayofmonth, startH, startM)
endTime = timestamp(year, month, dayofmonth, endH, endM)
inSession = (time >= startTime and time <= endTime)
// Entry Conditions
longCondition = (bullishEngulfing or bullSig) and (ema2 > smma4) and (not ts or inSession)
shortCondition = (bearishEngulfing or bearSig) and (ema2 < smma4) and (not ts or inSession)
// Exit Conditions
exitLong = ta.crossunder(ema2, smma4)
exitShort = ta.crossover(ema2, smma4)
// Strategy Execution
if (longCondition)
strategy.entry("Long", strategy.long, comment="Long Entry")
if (shortCondition)
strategy.entry("Short", strategy.short, comment="Short Entry")
if (exitLong)
strategy.close("Long", comment="Exit Long")
if (exitShort)
strategy.close("Short", comment="Exit Short")
// Debugging Plots
plotshape(series=longCondition, location=location.belowbar, color=color.green, style=shape.labelup, title="Long Signal")
plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.labeldown, title="Short Signal")
// Visuals
plot(ema2, color=color.blue, linewidth=1, title="EMA(2)")
bgcolor(inSession and ts ? color.new(color.blue, 90) : na, title="Session Background")