Strategi mengikuti tren berdasarkan persilangan indikator TEMA multi-kerangka waktu


Tanggal Pembuatan: 2023-12-25 14:20:36 Akhirnya memodifikasi: 2023-12-25 14:20:36
menyalin: 0 Jumlah klik: 671
1
fokus pada
1623
Pengikut

Strategi mengikuti tren berdasarkan persilangan indikator TEMA multi-kerangka waktu

Ringkasan

Strategi ini didasarkan pada TEMA crossover multi-frame untuk mengidentifikasi arah tren pasar, dan dikombinasikan dengan TEMA crossover pada frame waktu yang lebih rendah untuk mencari waktu masuk dan keluar yang spesifik. Strategi ini dapat dikonfigurasi hanya untuk melakukan over, hanya untuk melakukan short, atau perdagangan dua arah.

Prinsip Strategi

Strategi ini menggunakan dua indikator TEMA, satu berdasarkan garis cepat dan lambat 5 dan 15 siklus, dan yang lain berdasarkan kerangka waktu siklus tinggi yang disesuaikan oleh pengguna, seperti garis siang atau garis sekitar. TEMA indikator siklus tinggi menyeberang menentukan arah tren keseluruhan, ketika garis cepat melewati garis lambat, bullish, dan turun turun; TEMA indikator siklus rendah menyeberang digunakan untuk mencari waktu masuk dan keluar yang spesifik.

Ketika siklus tinggi TEMA garis cepat melewati garis lambat, siklus rendah TEMA garis cepat melewati garis lambat dapat masuk lebih banyak; ketika siklus rendah TEMA garis cepat melewati garis lambat, harus keluar. Sama halnya, ketika siklus tinggi TEMA garis cepat melewati garis lambat, siklus rendah TEMA garis cepat melewati garis lambat dapat masuk kosong; ketika siklus cepat melewati garis lambat harus keluar.

Keunggulan Strategis

  1. Persebrangan berdasarkan indikator TEMA untuk menghindari kebisingan
  2. Pengaturan multi-frame waktu, dikombinasikan dengan penilaian periodik tinggi dan rendah, meningkatkan akurasi
  3. Transaksi unilateral atau bidirectional, konfigurasi fleksibel
  4. Peraturan yang jelas dan mudah dipahami

Analisis risiko

  1. Indikator TEMA terlambat, mungkin melewatkan momen awal perubahan harga
  2. Dalam penilaian tren siklus tinggi, penyesuaian jangka pendek dapat menyebabkan pembalikan yang tidak perlu
  3. Setting Periode Tinggi Tidak Dipilih dengan Tepat, Mungkin Tidak Mencerminkan Tren Nyata
  4. Seting Periode Rendah: Tidak Memilih Seting Periode Rendah yang Tepat, Mungkin Meningkatkan Risiko Stop Loss

Solusi untuk Mengatasi Risiko:

  1. Menyesuaikan parameter TEMA dengan tepat
  2. Meredakan Stop Loss yang Tepat
  3. Optimalkan parameter siklus tinggi dan rendah
  4. Pengujian kekuatan parameter dari berbagai varietas

Arah optimasi

  1. Dinamiskan parameter TEMA untuk mengoptimalkan sensitivitas indikator
  2. Meningkatkan filter indikator momentum untuk menghindari kehilangan tren
  3. Meningkatkan indikator volatilitas, mengadaptasi stop loss secara dinamis
  4. Parameter optimasi metode pembelajaran mesin

Meringkaskan

Konsep keseluruhan strategi ini jelas dan mudah dimengerti, menilai arah tren berdasarkan indikator TEMA multi-frame timeframe crossover, dan digabungkan dengan crossover periode rendah untuk mencari waktu masuk. Ada beberapa keuntungan, tetapi ada juga beberapa ruang untuk perbaikan. Secara keseluruhan, strategi ini memberikan referensi yang berharga untuk praktik perdagangan kuantitatif.

Kode Sumber Strategi
/*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)