Trend Mengikut Strategi Berdasarkan TEMA Crossover Multi Timeframe

Penulis:ChaoZhang, Tarikh: 2023-12-25 14:20:36
Tag:

img

Ringkasan

Strategi ini mengenal pasti arah trend pasaran berdasarkan persimpangan penunjuk TEMA dalam beberapa jangka masa, dan menggunakan persimpangan TEMA dalam jangka masa yang lebih rendah untuk mencari titik masuk dan keluar tertentu. Strategi ini boleh dikonfigurasi untuk panjang sahaja, pendek sahaja atau kedua-dua arah.

Logika Strategi

Strategi ini menggunakan dua penunjuk TEMA, satu dengan garis cepat dan perlahan berdasarkan 5 dan 15 tempoh, yang lain berdasarkan jangka masa yang lebih tinggi yang ditakrifkan oleh pengguna seperti harian atau mingguan.

Apabila garisan pantas TEMA jangka masa yang lebih tinggi melintasi garis perlahan, entri panjang boleh dicetuskan apabila garisan pantas TEMA jangka masa yang lebih rendah melintasi garis perlahan; Isyarat keluar diberikan apabila garisan pantas melintasi di bawah garis perlahan.

Kelebihan

  1. Berdasarkan silang TEMA, mengelakkan gangguan bunyi
  2. Reka bentuk pelbagai jangka masa menggabungkan kitaran tinggi dan rendah, meningkatkan ketepatan
  3. Konfigurasi fleksibel untuk panjang sahaja, pendek sahaja atau kedua-dua arah
  4. Peraturan mudah, mudah difahami dan dilaksanakan

Analisis Risiko

  1. TEMA mempunyai kesan kelewatan, mungkin terlepas perubahan harga awal
  2. Pembetulan jangka pendek pada TF yang lebih tinggi boleh menyebabkan perdagangan terbalik yang tidak perlu
  3. Tetapan TF yang lebih tinggi yang tidak betul tidak mencerminkan trend sebenar
  4. Tetapan TF bawah yang tidak betul meningkatkan risiko stop loss

Penyelesaian Risiko:

  1. Parameter TEMA yang halus untuk keseimbangan
  2. Meredakan margin stop loss secara sederhana
  3. Mengoptimumkan tetapan kitaran tinggi rendah
  4. Kekuatan parameter ujian di seluruh produk

Peluang Peningkatan

  1. Sesuaikan parameter TEMA secara dinamik untuk pengoptimuman kepekaan
  2. Tambah penapis momentum untuk mengelakkan kehilangan trend
  3. Tambah indeks turun naik untuk ukuran stop loss dinamik
  4. Pembelajaran mesin untuk pengoptimuman parameter

Ringkasan

Strategi secara keseluruhan adalah mudah dan jelas dalam logik, mengenal pasti bias trend melalui persilangan TEMA pada beberapa bingkai masa, dan bergantung pada persilangan tambahan pada entri TF yang lebih rendah untuk masa. Ia mempunyai kelebihan tertentu sementara juga mempunyai beberapa ruang untuk penambahbaikan. Secara keseluruhan, ia memberikan rujukan yang berharga untuk amalan perdagangan kuant.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-12-24 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Seltzer_

//@version=4
strategy(title="TEMA Cross +HTF Backtest", shorttitle="TEMA_X_+HTF_BT", overlay=true)

orderType = input("Longs+Shorts",title="What type of Orders", options=["Longs+Shorts","LongsOnly","ShortsOnly"])
isLong   = (orderType != "ShortsOnly")
isShort  = (orderType != "LongsOnly")

// Backtest Section {

// Backtest inputs
FromMonth = input(defval=1, title="From Month", minval=1, maxval=12)
FromDay = input(defval=1, title="From Day", minval=1, maxval=31)
FromYear = input(defval=2020, title="From Year", minval=2010)
ToMonth = input(defval=1, title="To Month", minval=1, maxval=12)
ToDay = input(defval=1, title="To Day", minval=1, maxval=31)
ToYear = input(defval=9999, title="To Year", minval=2017)

// Define backtest timewindow
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)  // backtest finish window
window() => true

// }

//TEMA Section {

//LTF Section
xLength = input(20, minval=1, title="Fast Length")
xPrice = close
xEMA1 = ema(xPrice, xLength)
xEMA2 = ema(xEMA1, xLength)
xEMA3 = ema(xEMA2, xLength)
xnRes = (3 * xEMA1) - (3 * xEMA2) + xEMA3
xnResP = plot(xnRes, color=color.green, linewidth=2, title="TEMA1")

yLength = input(60, minval=1, title="Slow Length")
yPrice = close
yEMA1 = ema(yPrice, yLength)
yEMA2 = ema(yEMA1, yLength)
yEMA3 = ema(yEMA2, yLength)
ynRes = (3 * yEMA1) - (3 * yEMA2) + yEMA3
ynResP = plot(ynRes, color=color.red, linewidth=2, title="TEMA2")

fill(xnResP, ynResP, color=xnRes > ynRes ? color.green : color.red, transp=65, editable=true)

//HTF Section
HTFres = input(defval="D", type=input.resolution, title="HTF Resolution")

HTFxLength = input(5, minval=1, title="HTF Fast Length")
HTFxPrice = close
HTFxEMA1 = security(syminfo.tickerid, HTFres, ema(HTFxPrice, HTFxLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFxEMA2 = security(syminfo.tickerid, HTFres, ema(HTFxEMA1, HTFxLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFxEMA3 = security(syminfo.tickerid, HTFres, ema(HTFxEMA2, HTFxLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFxnRes = (3 * HTFxEMA1) - (3 * HTFxEMA2) + HTFxEMA3
HTFxnResP = plot(HTFxnRes, color=color.yellow, linewidth=1,transp=30, title="TEMA1")

HTFyLength = input(15, minval=1, title="HTF Slow Length")
HTFyPrice = close
HTFyEMA1 = security(syminfo.tickerid, HTFres, ema(HTFyPrice, HTFyLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFyEMA2 = security(syminfo.tickerid, HTFres, ema(HTFyEMA1, HTFyLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFyEMA3 = security(syminfo.tickerid, HTFres, ema(HTFyEMA2, HTFyLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFynRes = (3 * HTFyEMA1) - (3 * HTFyEMA2) + HTFyEMA3
HTFynResP = plot(HTFynRes, color=color.purple, linewidth=1, transp=30, title="TEMA2")

fill(HTFxnResP, HTFynResP, color=HTFxnRes > HTFynRes ? color.yellow : color.purple, transp=90, editable=true)
bgcolor(HTFxnRes > HTFynRes ? color.yellow : na, transp=90, editable=true)
bgcolor(HTFxnRes < HTFynRes ? color.purple : na, transp=90, editable=true)

// }

// Buy and Sell Triggers
LongEntryAlert = xnRes > ynRes and HTFxnRes > HTFynRes and window()
LongCloseAlert = xnRes < ynRes and window()
ShortEntryAlert = xnRes < ynRes and HTFxnRes < HTFynRes and window()
ShortCloseAlert = xnRes > ynRes

// Entry & Exit signals
if isLong
    strategy.entry("Long", strategy.long, when = LongEntryAlert)
    strategy.close("Long", when = LongCloseAlert)

if isShort
    strategy.entry("Short", strategy.short, when = ShortEntryAlert)
    strategy.close("Short", when = ShortCloseAlert)

Lebih lanjut