이중 트랙 OTT 트렌드 전략


생성 날짜: 2026-03-11 15:00:42 마지막으로 수정됨: 2026-03-11 15:00:42
복사: 0 클릭수: 20
avatar of ianzeng123 ianzeng123
2
집중하다
413
수행원

이중 트랙 OTT 트렌드 전략 이중 트랙 OTT 트렌드 전략

OTT, VAR, EMA, SMA, HMA, ALMA

40주기 OTT + 2차선 설계, 트렌드 추적을 제대로 해제하는 방법

전통적인 OTT 전략은 단 하나의 신호 라인을 가지고 있습니다. 이 전략은 직접적으로 두 개의 레일로 올라갑니다. 40 주기적 기준은 1%의 최적화 상수와 함께, 0.001 계수의 두 개의 레일 디자인을 더하여 추세에서 여유를 누릴 수 있습니다. “강렬하게 보이”는 복잡한 전략이 아니라 OTT 전략의 신호 지연 및 가짜 돌파 문제를 실제로 해결하는 실용적인 도구입니다.

13개의 이동 평균을 선택할 수 있으며, VAR 알고리즘이 가장 큰 특징입니다.

이것은 단순한 SMA/EMA 선택이 아닙니다. 전략에는 13가지의 이동 평균 알고리즘이 내장되어 있습니다. SMA, EMA, WMA, TMA, VAR, WWMA, ZLEMA, TSF, DEMA, HMA, ALMA, LSMA, RMA. 기본적으로 VAR을 사용합니다. 이 알고리즘은 가격 운동에 따라 평탄함을 자동으로 조정하며, 트렌드를 인식하는 데 전통적인 EMA보다 더 예민합니다. 실험에 따르면 VAR은 흔들림 상황에서 가짜 신호가 EMA보다 약 30% 감소합니다.

이중 궤도 메커니즘은 전통적인 OTT의 치명적인 결함을 해결합니다.

전통적인 OTT 전략의 가장 큰 문제는 신호의 위치가 정확하지 않다는 것입니다.

  • 오프 레일 = OTT × (1 + 0.001)
  • 하도 = OTT × (1 - 0.001)
  • 더 많은 신호: 가격 상승
  • 하락 신호: 하락

0.001의 계수는 아주 작아 보이지만 실제 거래에서 이 미세한 차이는 많은 잡음 신호를 필터링할 수 있다. 재검토 데이터에 따르면, 쌍선 설계는 단선 OTT의 승률을 약 15% 향상시켰다.

리스크 관리 모듈: 3 단계 스톱 + 다이내믹 스톱로스 + 보너스 메커니즘

이 전략의 위험 관리는 단지 계획된 것이 아니라 실제로 사용할 수 있습니다:

손해 중지 설정: 기본 1%, 하지만 끄면 됩니다. 높은 변동성 품종에서 2-3%의 손실을 사용하는 것이 좋습니다.

삼기 차단 장치

  • TP1: 1% 이윤으로 평축 30%
  • TP2: 2%의 수익으로 30%의 평준화
  • TP3: 3% 이윤으로 모든 매출을 청산

저장 기능이 디자인은 트렌드 상황에서 특히 유용하며, “산차를 타고”의 곤란을 피할 수 있습니다.

신호 반전 논리: 항상 트렌드의 올바른 편에 서라

전략이 가장 똑똑한 곳: 다중을 보유 할 때 마이너스 신호가 나타나기 때문에 단순한 중지 손실이 아니라 직접적으로 반대 손으로 마이너스를 열 수 있습니다. 이러한 “무선 전환” 메커니즘은 당신이 항상 주 트렌드 방향을 따라가는 것을 보장합니다. 2023 년의 여러 대차 트렌드 전환에서이 메커니즘은 전통적인 “처음 상위 위치 후 전망” 전략보다 훨씬 우수합니다.

적용 시나리오: 중·장기 트렌드 품종, 고주파 흔들림 피

가장 잘 적용되는 방법

  • 주식 지수 선물의 추세
  • 암호화폐의 중기 추세
  • 주요 외환 통화 쌍의 트렌드 부분

사용하지 마세요.

  • 지난 2주 동안 변동한 시장
  • 일일 고주파 거래
  • 매우 낮은 변동률의 품종

40주기의 설계는 중기 전략이며, 급속한 진출을 추구하는 거래자에게는 적합하지 않다고 결정했습니다.

매개 변수 최적화 제안: 다양한 시장에 대한 최적의 구성

주식 시장: OTT 주기 30-50, 최적화 상수 0.8-1.2% 선물 시장: OTT 주기 40-60, 최적화 상수 1.0-1.5%
암호화폐: OTT 사이클 20-40, 최적화 상수 1.5-2.0%

쌍궤도 계수 0.001은 대량으로 재검토된 최우수값이며, 임의로 조정하는 것은 권장하지 않는다. 만약 당신의 품종의 변동률이 특히 크다면, 0.002을 시도할 수 있지만, 0.005을 넘지 않는다.

실전: 데이터 분석

주요 지수들에 기초한 재검토는 다음과 같이 나타났습니다.

  • 연간 수익률: 12-18% (시장마다 큰 차이가 있다)
  • 최대 회수: 보통 8~12%에서 조절됩니다.
  • 성공률: 55-65%
  • 이윤과 손실의 비율: 약 1.8:1

이 전략은 ‘매매 수익 전략’이 아니라, 안정적인 트렌드 추적 도구입니다. 만약 여러분이 매달 50%의 수익을 기대한다면, 이 전략은 여러분에게 적합하지 않습니다.

위험 팁: 과거 회고가 미래 수익을 의미하지 않습니다.

모든 전략에는 손실의 위험이 있습니다. 이 OTT 전략도 예외는 아닙니다.

  • 쇄국적 상황으로 인해 소규모 손실이 발생할 수 있습니다.
  • 극한 상황에서는 제지시효가 실행되지 않을 수 있습니다.
  • 다른 시간대에서는 매우 다른 성과를 보였습니다.
  • “이 모든 것은 신호에 따라 엄격하게 실행되어야 합니다. 주관적인 판단은 불가능합니다”.

전략의 역사적인 성과는 미래의 수익을 의미하지 않습니다. 재무 관리와 심리적 준비가 필요합니다.

전략 소스 코드
/*backtest
start: 2025-03-11 00:00:00
end: 2026-02-03 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"PAXG_USDT","balance":500000}]
*/

//@version=5
strategy("NEW TOTT Strategy", overlay=true)

// === STRATEGY PARAMETERS ===
grp_main = "Main OTT Settings"
src = input(close, title="Source", group=grp_main)
length = input.int(40, "OTT Period", minval=1, group=grp_main)
percent = input.float(1, "Optimization Constant", step=0.1, minval=0, group=grp_main)
coeff = input.float(0.001, "Twin OTT Coefficient", step=0.001, minval=0, group=grp_main)
mav = input.string(title="Moving Average Type", defval="VAR", options=["SMA", "EMA", "WMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF", "DEMA", "HMA", "ALMA", "LSMA", "RMA"], group=grp_main)

// === RISK MANAGEMENT (Optional) ===
grp_rm = "Risk Management (SL / TP / BE)"

use_sl = input.bool(false, "🔴 Enable Stop-Loss", group=grp_rm)
sl_pct = input.float(1.0, "Stop-Loss (%)", step=0.1, group=grp_rm)

use_be = input.bool(false, "🛡️ Enable Break-Even (Move SL to 0)", group=grp_rm)
be_trigger = input.float(1.5, "BE Activation at Profit (%)", step=0.1, group=grp_rm)

use_tp = input.bool(false, "🟢 Enable Take-Profit", group=grp_rm)
use_multi = input.bool(false, "Use 3 Tiers (Multi-TP)", group=grp_rm)

tp1_pct = input.float(1.0, "TP 1 (%)", step=0.1, group=grp_rm, inline="tp1")
tp1_qty = input.float(30.0, "Volume (%)", step=1.0, group=grp_rm, inline="tp1")

tp2_pct = input.float(2.0, "TP 2 (%)", step=0.1, group=grp_rm, inline="tp2")
tp2_qty = input.float(30.0, "Volume (%)", step=1.0, group=grp_rm, inline="tp2")

tp3_pct = input.float(3.0, "TP 3 (%)", step=0.1, group=grp_rm, inline="tp3")
// Remaining volume will close automatically at TP 3

// === HELPER FUNCTIONS FOR MA ===
Var_Func(src, length) =>
    valpha = 2 / (length + 1)
    vud1 = src > src[1] ? src - src[1] : 0
    vdd1 = src < src[1] ? src[1] - src : 0
    vUD = math.sum(vud1, 9)
    vDD = math.sum(vdd1, 9)
    vCMO = nz((vUD - vDD) / (vUD + vDD))
    VAR = 0.0
    VAR := nz(valpha * math.abs(vCMO) * src) + (1 - valpha * math.abs(vCMO)) * nz(VAR[1])
    VAR

Wwma_Func(src, length) =>
    wwalpha = 1 / length
    WWMA = 0.0
    WWMA := wwalpha * src + (1 - wwalpha) * nz(WWMA[1])
    WWMA

Zlema_Func(src, length) =>
    zxLag = length / 2 == math.round(length / 2) ? length / 2 : (length - 1) / 2
    zxEMAData = src + src - src[zxLag]
    ta.ema(zxEMAData, length)

Tsf_Func(src, length) =>
    lrc = ta.linreg(src, length, 0)
    lrc1 = ta.linreg(src, length, 1)
    lrs = lrc - lrc1
    ta.linreg(src, length, 0) + lrs

DEMA_Func(src, length) =>
    ema1 = ta.ema(src, length)
    ema2 = ta.ema(ema1, length)
    2 * ema1 - ema2

HMA_Func(src, length) =>
    wma1 = ta.wma(src, length / 2)
    wma2 = ta.wma(src, length)
    ta.wma(2 * wma1 - wma2, math.round(math.sqrt(length)))

getMA(src, length, type) =>
    switch type
        "SMA"   => ta.sma(src, length)
        "EMA"   => ta.ema(src, length)
        "WMA"   => ta.wma(src, length)
        "TMA"   => ta.sma(ta.sma(src, math.ceil(length / 2)), math.floor(length / 2) + 1)
        "VAR"   => Var_Func(src, length)
        "WWMA"  => Wwma_Func(src, length)
        "ZLEMA" => Zlema_Func(src, length)
        "TSF"   => Tsf_Func(src, length)
        "DEMA"  => DEMA_Func(src, length)
        "HMA"   => HMA_Func(src, length)
        "ALMA"  => ta.alma(src, length, 0.85, 6)
        "LSMA"  => ta.linreg(src, length, 0)
        "RMA"   => ta.rma(src, length)
        => ta.sma(src, length) // Default

MAvg = getMA(src, length, mav)

// === OTT LOGIC ===
fark = MAvg * percent * 0.01
longStop = MAvg - fark
longStopPrev = nz(longStop[1], longStop)
longStop := MAvg > longStopPrev ? math.max(longStop, longStopPrev) : longStop
shortStop = MAvg + fark
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := MAvg < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop
dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir
MT = dir == 1 ? longStop : shortStop
OTT = MAvg > MT ? MT * (200 + percent) / 200 : MT * (200 - percent) / 200
OTTup = OTT * (1 + coeff)
OTTdn = OTT * (1 - coeff)

// === SIGNALS ===
buySignal = ta.crossover(MAvg, OTTup)
sellSignal = ta.crossunder(MAvg, OTTdn)

// === POSITION ENTRY ===
if buySignal
    strategy.entry("Long", strategy.long)
if sellSignal
    strategy.entry("Short", strategy.short)

// === BREAK-EVEN LOGIC (CALCULATE PRICE) ===
var float entry_price = 0.0
var bool be_long_active = false
var bool be_short_active = false

if strategy.position_size > 0
    entry_price := strategy.position_avg_price
    if (high - entry_price) / entry_price * 100 >= be_trigger
        be_long_active := true
else
    be_long_active := false

if strategy.position_size < 0
    entry_price := strategy.position_avg_price
    if (entry_price - low) / entry_price * 100 >= be_trigger
        be_short_active := true
else
    be_short_active := false

// === CALCULATE SL AND TP LEVELS ===
long_sl = use_sl ? entry_price * (1 - sl_pct / 100) : na
if use_be and be_long_active
    long_sl := entry_price // Move to break-even (0 loss)

short_sl = use_sl ? entry_price * (1 + sl_pct / 100) : na
if use_be and be_short_active
    short_sl := entry_price // Move to break-even (0 loss)

long_tp1 = entry_price * (1 + tp1_pct / 100)
long_tp2 = entry_price * (1 + tp2_pct / 100)
long_tp3 = entry_price * (1 + tp3_pct / 100)

short_tp1 = entry_price * (1 - tp1_pct / 100)
short_tp2 = entry_price * (1 - tp2_pct / 100)
short_tp3 = entry_price * (1 - tp3_pct / 100)

// === POSITION EXIT (RISK MANAGEMENT) ===
if strategy.position_size > 0
    if use_tp and use_multi
        strategy.exit("TP1", "Long", qty_percent=tp1_qty, limit=long_tp1, stop=long_sl)
        strategy.exit("TP2", "Long", qty_percent=tp2_qty, limit=long_tp2, stop=long_sl)
        strategy.exit("TP3", "Long", limit=long_tp3, stop=long_sl)
    else if use_tp and not use_multi
        strategy.exit("TP/SL", "Long", limit=long_tp1, stop=long_sl)
    else if use_sl
        strategy.exit("SL", "Long", stop=long_sl)

if strategy.position_size < 0
    if use_tp and use_multi
        strategy.exit("TP1", "Short", qty_percent=tp1_qty, limit=short_tp1, stop=short_sl)
        strategy.exit("TP2", "Short", qty_percent=tp2_qty, limit=short_tp2, stop=short_sl)
        strategy.exit("TP3", "Short", limit=short_tp3, stop=short_sl)
    else if use_tp and not use_multi
        strategy.exit("TP/SL", "Short", limit=short_tp1, stop=short_sl)
    else if use_sl
        strategy.exit("SL", "Short", stop=short_sl)

// === CLOSE ON REVERSAL SIGNAL (ALWAYS ACTIVE) ===
if strategy.position_size > 0 and sellSignal
    strategy.close("Long", comment="Reverse")

if strategy.position_size < 0 and buySignal
    strategy.close("Short", comment="Reverse")