
Стратегия основана на многократном перекрестке временных рамок показателя TEMA для определения направления рыночных тенденций и в сочетании с перекрестком показателя TEMA для более низких временных рамок для поиска конкретных времен входа и выхода на рынок. Стратегия может быть настроена только на лишние, только на открытые или двусторонние сделки.
Стратегия использует два TEMA-индикатора, один основанный на быстрых и медленных линиях 5 и 15 циклов, другой основанный на пользовательских временных рамках высоких циклов, таких как дневная или круговая линия. Высокоциклический TEMA-индикатор определяет направление общей тенденции, проходя через медленную линию на быстрых линиях, чтобы пробиться вниз и вниз; низкоциклический TEMA-индикатор используется для поиска конкретных входных и выходных моментов.
При прохождении медленной линии в высокоциклической TEMA скоростной линии, прохождение медленной линии в низкоциклической TEMA скоростной линии позволяет играть больше; при прохождении медленной линии в низкоциклической TEMA скоростной линии, следует играть. Аналогично, при прохождении медленной линии в высокоциклической TEMA скоростной линии, прохождение медленной линии в низкоциклической TEMA скоростной линии позволяет играть больше; при прохождении медленной линии в короткой линии следует играть.
Решение риска:
Общая концепция стратегии понятна и понятна, она основана на многократных временных рамках по ТЕМА-индикатору для определения направления тенденции и в сочетании с низкими циклами для поиска входных моментов. Есть определенные преимущества, но также есть некоторые возможности для улучшения. В целом, стратегия предоставляет ценные ссылки для практики количественного трейдинга.
/*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)