다중 시간 프레임 TEMA 크로스오버에 기반한 전략을 따르는 경향

저자:차오장, 날짜: 2023-12-25 14:20:36
태그:

img

전반적인 설명

이 전략은 여러 시간 프레임에 걸쳐 TEMA 지표의 크로스오버를 기반으로 시장 트렌드 방향을 식별하고, 특정 진입 및 출구 지점을 찾기 위해 더 낮은 시간 프레임에서 TEMA 크로스오버를 사용합니다. 전략은 길게만, 짧게만 또는 양쪽 방향으로 구성 될 수 있습니다.

전략 논리

이 전략은 두 개의 TEMA 지표를 사용하며, 하나는 5 및 15 기간에 기반한 빠르고 느린 라인, 다른 하나는 매일 또는 주간과 같은 사용자 정의의 더 높은 시간 프레임을 기반으로합니다. 더 높은 시간 프레임 TEMA의 크로스오버는 전체 트렌드 편향을 결정하며, 느린 라인의 위의 빠른 라인 크로스오버는 상승 시선을 나타냅니다. 아래는 하향 시선을 나타냅니다. 더 낮은 시간 프레임 TEMA 크로스오버는 구체적인 입출 시기를 찾기 위해 사용됩니다.

더 높은 타임프레임 TEMA 빠른 라인이 느린 라인을 넘을 때, 더 낮은 타임프레임 TEMA 빠른 라인이 느린 라인을 넘을 때 긴 엔트리가 유발될 수 있다. 빠른 라인이 느린 라인을 넘을 때 출구 신호가 주어진다. 마찬가지로, 더 높은 타임프레임 빠른 라인이 느린 라인을 넘을 때, 더 낮은 타임프레임 TEMA 하향 크로스오버에서 짧은 엔트리가 유발되고 상승 크로스오버가 발생하면 출구가 발생한다.

장점

  1. TEMA 크로스오버를 기반으로 노이즈 간섭을 피합니다.
  2. 멀티 타임프레임 설계는 높은 사이클과 낮은 사이클을 결합하여 정확성을 향상시킵니다.
  3. 융통성 있는 구성: 길게만, 짧게만 또는 양쪽 방향으로만
  4. 간단하고 이해하기 쉽고 적용하기 쉬운 규칙

위험 분석

  1. TEMA는 지연 효과를 가지고, 초기 가격 변화를 놓칠 수 있습니다.
  2. 더 높은 TF에 대한 단기 수정으로 인해 불필요한 역거래가 발생할 수 있습니다.
  3. 부적절한 높은 TF 설정은 실제 추세를 반영하지 않습니다.
  4. 부적절한 낮은 TF 설정은 중지 손실 위험을 증가시킵니다.

위험 해결 방법:

  1. 균형에 대한 TEMA 매개 변수 정조
  2. 스톱 로스 마진을 완화시키십시오
  3. 높은 낮은 사이클 설정을 최적화
  4. 시험 매개 변수 안정성

더 나은 기회

  1. 감수성 최적화를 위해 TEMA 매개 변수를 동적으로 조정
  2. 트렌드를 놓치지 않도록 모멘텀 필터를 추가합니다.
  3. 동적 스톱 로스 크기를 위한 변동성 인덱스를 추가합니다.
  4. 매개 변수 최적화를 위한 기계 학습

요약

전체적인 전략은 단순하고 논리적으로 명확하며, 여러 시간 프레임에서 TEMA 크로스오버를 통해 트렌드 편향을 식별하고, 시간 항목에 낮은 TF에 추가 크로스오버에 의존합니다. 특정 장점이 있지만 개선의 여지가 있습니다. 전체적으로 양 거래 관행에 귀중한 참조를 제공합니다.


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

더 많은