Strategi mengikut arah aliran berdasarkan silang penunjuk TEMA berbilang jangka masa


Tarikh penciptaan: 2023-12-25 14:20:36 Akhirnya diubah suai: 2023-12-25 14:20:36
Salin: 0 Bilangan klik: 671
1
fokus pada
1623
Pengikut

Strategi mengikut arah aliran berdasarkan silang penunjuk TEMA berbilang jangka masa

Gambaran keseluruhan

Strategi ini berasaskan kepada TEMA untuk mengenal pasti arah trend pasaran, dan digabungkan dengan TEMA untuk mencari masa masuk dan keluar yang spesifik. Strategi ini boleh dikonfigurasikan untuk melakukan perdagangan hanya lebih, hanya kosong atau dua hala.

Prinsip Strategi

Strategi ini menggunakan dua penunjuk TEMA, satu berdasarkan garis laju dan perlahan 5 dan 15 kitaran, dan yang lain berdasarkan jangka masa kitaran tinggi yang disesuaikan oleh pengguna, seperti garis siang atau garis pusingan. Penunjuk TEMA kitaran tinggi melintasi menentukan arah trend keseluruhan, melintasi bullish dan bearish ketika melintasi garis perlahan pada garis cepat; penunjuk TEMA kitaran rendah melintasi untuk mencari masa masuk dan keluar tertentu.

Apabila melalui jalur perlahan pada TEMA berkala tinggi, TEMA berkala rendah boleh masuk lebih banyak; apabila melalui jalur perlahan pada TEMA berkala rendah, ia harus keluar. Sama, apabila melalui jalur perlahan pada TEMA berkala tinggi, TEMA berkala rendah boleh masuk kosong; apabila melalui jalur perlahan pada TEMA berkala rendah, ia harus keluar.

Kelebihan Strategik

  1. Persaingan berdasarkan petunjuk TEMA untuk mengelakkan gangguan
  2. Pengaturan pelbagai bingkai masa, digabungkan dengan penilaian kitaran tinggi dan rendah, untuk meningkatkan ketepatan
  3. Perdagangan satu arah atau dua arah, konfigurasi fleksibel
  4. Peraturan yang jelas dan mudah difahami

Analisis risiko

  1. Indeks TEMA terlewat, mungkin terlepas peluang awal untuk perubahan harga
  2. Dalam penilaian trend kitaran tinggi, penyesuaian jangka pendek boleh menyebabkan operasi pembalikan yang tidak perlu
  3. Setting Periodikal Tinggi Tidak Dipilih Sepatutnya, Mungkin Tidak Mencerminkan Trend Sebenar
  4. Pengaturan kitaran rendah tidak dipilih dengan betul dan boleh meningkatkan risiko kerugian

Penyelesaian risiko:

  1. Menyesuaikan parameter TEMA dengan betul
  2. Melepaskan Margin Stop Loss yang Sesuai
  3. Optimumkan parameter kitaran rendah dan tinggi
  4. Uji kecergasan parameter pelbagai jenis

Arah pengoptimuman

  1. Secara dinamik menyesuaikan parameter TEMA, mengoptimumkan kepekaan penunjuk
  2. Menambah penapis indikator momentum untuk mengelakkan kehilangan trend
  3. Meningkatkan Indeks Volatiliti, Menyesuaikan Stop Loss Secara Dinamis
  4. Parameter pengoptimuman kaedah pembelajaran mesin

ringkaskan

Konsep keseluruhan strategi ini adalah jelas dan mudah difahami, berdasarkan arah trend penilaian berselang pelbagai kerangka masa TEMA, dan digabungkan dengan berselang kitaran rendah untuk mencari masa masuk. Terdapat kelebihan tertentu, tetapi terdapat juga ruang untuk penambahbaikan. Secara keseluruhan, strategi ini memberikan rujukan yang berharga untuk amalan perdagangan kuantitatif.

Kod 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)