Tren Mengikuti Strategi Berdasarkan Multi Timeframe TEMA Crossover

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

img

Gambaran umum

Strategi ini mengidentifikasi arah tren pasar berdasarkan penyeberangan indikator TEMA di beberapa kerangka waktu, dan menggunakan penyeberangan TEMA dalam kerangka waktu yang lebih rendah untuk menemukan titik masuk dan keluar tertentu.

Logika Strategi

Strategi ini menggunakan dua indikator TEMA, satu dengan garis cepat dan lambat berdasarkan 5 dan 15 periode, yang lainnya berdasarkan jangka waktu yang lebih tinggi yang ditentukan pengguna seperti harian atau mingguan. Perpindahan jangka waktu TEMA yang lebih tinggi menentukan bias tren keseluruhan, dengan garis cepat melintasi di atas garis lambat yang menunjukkan pandangan bullish, dan di bawah yang menunjukkan pandangan bearish. Perpindahan jangka waktu TEMA yang lebih rendah digunakan untuk menemukan waktu masuk dan keluar yang konkret.

Ketika garis cepat TEMA jangka waktu yang lebih tinggi melintasi garis lambat, entri panjang dapat dipicu ketika garis cepat TEMA jangka waktu yang lebih rendah melintasi garis lambat; Sinyal keluar diberikan ketika garis cepat melintasi di bawah garis lambat. Demikian pula, ketika garis cepat jangka waktu yang lebih tinggi turun di bawah garis lambat, entri pendek dipicu pada crossover bearish TEMA jangka waktu yang lebih rendah dan keluar ketika crossover bullish terjadi.

Keuntungan

  1. Berdasarkan TEMA crossover, menghindari gangguan suara
  2. Desain multi timeframe menggabungkan siklus tinggi dan rendah, meningkatkan akurasi
  3. Konfigurasi fleksibel untuk panjang saja, pendek saja atau kedua arah
  4. Aturan sederhana, mudah dimengerti dan diterapkan

Analisis Risiko

  1. TEMA memiliki efek keterlambatan, mungkin melewatkan perubahan harga awal
  2. Koreksi jangka pendek pada TF yang lebih tinggi dapat menyebabkan reverse trading yang tidak perlu
  3. Pengaturan TF yang lebih tinggi yang tidak tepat tidak mencerminkan tren nyata
  4. Pengaturan TF bawah yang tidak benar meningkatkan risiko stop loss

Solusi Risiko:

  1. Parameter TEMA untuk keseimbangan
  2. Meredakan margin stop loss secara moderat
  3. Mengoptimalkan pengaturan siklus tinggi rendah
  4. Ketahanan parameter uji di seluruh produk

Peluang Peningkatan

  1. Mengatur secara dinamis parameter TEMA untuk optimasi sensitivitas
  2. Tambahkan filter momentum untuk menghindari hilangnya tren
  3. Menambahkan indeks volatilitas untuk ukuran stop loss dinamis
  4. Pembelajaran mesin untuk optimasi parameter

Ringkasan

Strategi secara keseluruhan sederhana dan jelas dalam logika, mengidentifikasi bias tren melalui TEMA crossover pada beberapa kerangka waktu, dan mengandalkan crossover tambahan pada TF yang lebih rendah ke entri waktu.


/*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 banyak