Strategi trend OTT dwi-trek


Tarikh penciptaan: 2026-03-11 15:00:42 Akhirnya diubah suai: 2026-03-11 15:00:42
Salin: 0 Bilangan klik: 20
2
fokus pada
413
Pengikut

Strategi trend OTT dwi-trek Strategi trend OTT dwi-trek

OTT, VAR, EMA, SMA, HMA, ALMA

40 kitaran OTT + reka bentuk dua hala, inilah cara yang betul untuk membuka trend

Strategi OTT tradisional hanya mempunyai satu jalur isyarat? Strategi ini memberi anda dua jalur naik dan turun secara langsung. Dengan asas 40 kitaran dengan konstan pengoptimuman 1%, ditambah dengan reka bentuk dua jalur dengan faktor 0.001, anda boleh bergerak dalam trend. Bukan strategi rumit yang “nampak hebat”, tetapi alat praktikal yang benar-benar menyelesaikan masalah ketinggalan isyarat strategi OTT dan pemecahan palsu.

13 purata bergerak boleh dipilih, algoritma VAR adalah yang paling terang

Ini bukan pilihan sederhana SMA / EMA. Strategi ini mempunyai 13 algoritma purata bergerak: SMA, EMA, WMA, TMA, VAR, WWMA, ZLEMA, TSF, DEMA, HMA, ALMA, LSMA, RMA. Secara lalai, VAR digunakan.

Mekanisme Dua Rel Menyelesaikan Kekurangan OTT Tradisional

Masalah utama dengan strategi OTT tradisional adalah bahawa isyarat tidak dapat diletakkan dengan tepat.

  • Laluan atas = OTT × (1 + 0.001)
  • Laluan bawah = OTT × (1 - 0.001)
  • Membuat lebih banyak isyarat: harga naik
  • Sinyal kosong: Harga turun ke bawah

Faktor 0.001 kelihatan kecil, tetapi dalam urus niaga sebenar, perbezaan kecil ini dapat menyaring banyak isyarat bising. Data retrospeksi menunjukkan bahawa reka bentuk dua jalur meningkatkan kadar kemenangan sekitar 15% daripada OTT satu jalur.

Modul Pengurusan Risiko: Tiga Garis Stop + Stop Loss Dinamik + Kaedah Jaminan

Strategi untuk menguruskan risiko bukanlah sesuatu yang mudah, ia benar-benar boleh digunakan:

Tetapan Stop Loss: 1% secara lalai, tetapi boleh dimatikan. Disyorkan untuk menggunakan 2-3% stop loss pada varieti yang berfluktuasi tinggi.

Mekanisme penangguhan tiga peringkat

  • TP1: 30% pada masa keuntungan 1%
  • TP2: 30% selepas keuntungan 2%
  • TP3: 3% keuntungan, semua akaun kosong

Fungsi simpanan: Apabila kenaikan naik mencapai 1.5%, stop loss akan dipindahkan secara automatik ke harga pembukaan, mengunci kerugian sifar. Reka bentuk ini sangat berguna dalam keadaan trend, dan mengelakkan rasa malu “berjalan di atas kereta gunung”.

Logik pembalikan isyarat: Sentiasa berada di sisi yang betul

Di mana strategi ini paling bijak: apabila memegang lebih banyak kepala, isyarat shorting muncul, bukan hanya berhenti, tetapi secara langsung membuka tangan kosong. Mekanisme “switch seamless” ini memastikan anda sentiasa mengikuti arah trend utama.

Skenario yang boleh digunakan: varieti trend jangka menengah dan panjang, mengelakkan frekuensi tinggi

Penggunaan terbaik

  • Trend dalam indeks saham
  • Trend cryptocurrency pada pertengahan tahun
  • Peringkat trend bagi pasangan mata wang utama

Elakkan penggunaan

  • Pasaran yang bergolak lebih dari dua minggu
  • Dagangan frekuensi tinggi dalam sehari
  • Varieti yang mempunyai kadar turun naik yang sangat rendah

Reka bentuk 40 kitaran memutuskan bahawa ini adalah strategi jangka menengah dan tidak sesuai untuk peniaga yang ingin cepat masuk dan cepat keluar.

Cadangan pengoptimuman parameter: konfigurasi terbaik untuk pasaran yang berbeza

Pasaran saham: Siklus OTT 30-50, pengoptimuman berterusan 0.8-1.2% Pasaran berjangkaKitaran OTT 40-60, kekaburan pengoptimuman 1.0-1.5%
Mata wang kriptoKitaran OTT 20-40, kekaburan pengoptimuman 1.5-2.0%

Factor dua hala 0.001 adalah nilai optimum yang telah banyak diuji, dan tidak disyorkan untuk disesuaikan secara tidak sengaja. Jika kadar turun naik jenis anda sangat besar, anda boleh mencuba 0.002, tetapi jangan melebihi 0.005 .

Prestasi dalam pertempuran: data yang diperolehi

Kajian semula berdasarkan indeks utama menunjukkan:

  • Kadar pulangan tahunan: 12-18% (perbezaan besar antara pasaran)
  • Penarikan maksimum: biasanya dikawal dalam 8-12%
  • Peluang menang: 55-65%
  • Nisbah keuntungan dan kerugian: kira-kira 1.8:1

Ini bukan “strategi keuntungan besar”, tetapi alat untuk mengesan trend yang mantap. Jika anda mengharapkan keuntungan 50% sebulan, ini bukan strategi yang sesuai untuk anda.

Petua Risiko: Pemantauan Masa Lalu Tidak Bererti Pendapatan Masa Depan

Mana-mana strategi mempunyai risiko kerugian, dan strategi OTT ini tidak terkecuali. Perhatikan:

  • Keadaan gegaran berturut-turut boleh menyebabkan kerugian kecil.
  • Dalam kes-kes yang melampau, penangguhan kerugian mungkin tidak dapat dilaksanakan pada masa yang tepat.
  • Perkembangan dalam tempoh masa yang berbeza sangat berbeza
  • Ia perlu dilaksanakan mengikut isyarat dan tidak boleh dilihat secara subjektif.

“Kemunculan strategi dalam sejarah tidak bermakna ia akan menguntungkan pada masa hadapan, tetapi anda perlu bersedia untuk menguruskan kewangan dan mental anda”.

Kod sumber strategi
/*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")