이중 TEMA 크로스오버 거래 전략

저자:차오장, 날짜: 2023-10-12 17:34:19
태그:

전반적인 설명

이중 TEMA 크로스오버 거래 전략은 다른 매개 변수와 함께 두 개의 TEMA (Triple Exponential Moving Average) 라인을 사용하는 일반적인 트렌드 다음 전략이다. 더 빠른 TEMA가 느린 TEMA를 넘을 때 긴 신호를 생성하고 더 빠른 TEMA가 느린 TEMA를 넘을 때 포지션을 닫습니다. 이 전략은 가격 트렌드를 효과적으로 추적하고 트렌드가 명확하면 이익을 얻을 수 있습니다.

전략 논리

이 전략은 TEMA (Triple Exponential Moving Average) 를 주요 기술 지표로 사용합니다. TEMA는 다음과 같이 계산됩니다.

TEMA = (3EMA1) - (3EMA2) + EMA3

여기서 EMA1, EMA2 및 EMA3는 기간 N의 EMA입니다. EMA를 세 번 계산함으로써 TEMA는 가격 변화에 더 빠르게 반응할 수 있습니다.

이 전략은 짧은 기간의 TEMA를 빠른 라인으로, 그리고 긴 기간의 TEMA를 느린 라인으로 사용합니다. 빠른 라인이 느린 라인의 위를 넘어서면 상승 가격 움직임을 나타냅니다. 빠른 라인이 느린 라인의 아래를 넘어서면 하락 가격 움직임을 나타냅니다.

이 전략의 핵심은 매개 변수 조정과 조건 논리입니다. 20 일과 같은 짧은 기간을 가진 빠른 라인은 가격 역학을 빠르게 파악 할 수 있으며, 60 일과 같은 긴 기간을 가진 느린 라인은 잘못된 브레이크오프를 필터 할 수 있습니다. 중요한 가격 상승 추세 또는 하락 추세가 나타나면 빠른 라인은 느린 라인의 위 또는 아래를 빠르게 통과하여 거래 신호를 생성 할 수 있습니다.

이점 분석

이 전략의 장점은 다음과 같습니다.

  1. TEMA는 가격 변화에 더 빠르게 반응하고 트렌드 반전을 감지할 수 있습니다.

  2. 이중 TEMA 구조는 가짜 브레이크오웃을 필터링하고 높은 확률의 트렌드 트레이드를 입력하는 데 도움이됩니다.

  3. 다양한 시장 조건에 적응할 수 있는 유연한 조정 가능한 매개 변수

  4. 단순하고 명확한 논리, 이해하기 쉽고 구현하기 쉬운, 높은 자본 활용.

  5. 트렌드 시장, 특히 강한 트렌드 시장에서 좋은 수익을 얻을 수 있습니다.

위험 분석

이 전략의 위험은 다음과 같습니다.

  1. 범위를 제한하는 시장에서 거래 손실이 자주 발생합니다.

  2. 패러미터가 제대로 조정되지 않으면 과도한 잘못된 신호를 생성 할 수 있습니다.

  3. 갑작스러운 사건과 단기 가격 변동에 효과적으로 대응할 수 없습니다.

  4. 신호가 늦어지면 단기적인 기회를 놓칠 수 있습니다.

  5. 강한 변동에 대비하여 포지션을 개설하는 높은 위험.

  6. 변화하는 시장에 적응하기 위해 매개 변수 최적화에 대한 경험이 필요합니다.

위험 관리 조치:

  1. 과민성을 피하기 위해 매개 변수를 최적화하세요.

  2. 입력 신호를 필터링하기 위해 다른 표시기를 추가합니다.

  3. 단일 거래 손실을 제한하기 위해 스톱 손실을 사용하십시오.

  4. 리스크를 통제하기 위해 포지션 크기를 줄여라

  5. 매개 변수 최적화 규칙과 수동 개입 메커니즘을 추가합니다.

최적화 방향

이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.

  1. 다른 제품 및 시장 조건에 대한 빠른 및 느린 라인 매개 변수를 최적화합니다. 동적 매개 변수 최적화 메커니즘을 도입하십시오.

  2. 신호 유효성을 높이기 위해 MACD, 볼링거 밴드 같은 다른 지표를 포함합니다.

  3. 손실을 통제하기 위해 트레일링 스톱, 타임 스톱, ATR 스톱과 같은 스톱 손실 전략을 추가합니다.

  4. VIX가 높을 때 포지션을 개설하는 것을 피하십시오.

  5. 부피 지표를 추가하고, 명백한 부피 확장에 대해서만 고려하세요.

  6. 고정된 분자 포지션 사이즈, 유출 통제와 같은 돈을 최적화합니다.

  7. 기계 학습을 사용하여 자동으로 매개 변수를 최적화합니다.

요약

이중 TEMA 크로스오버 전략은 트렌드 기술 지표를 이용한 전반적인 트렌드 추후 전략이다. 가격 추세를 파악하고 트렌드를 따라 거래하는 데 도움이 된다. 그러나 부적절한 사용으로 인한 손실을 피하기 위해 위험을 적절히 관리해야 한다. 추가 최적화와 테스트는 더 많은 과학적 매개 변수 조정과 트렌딩 시장에서 더 나은 성과를 가져올 수 있다.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-11 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/
// © nickrober

//@version=4
strategy(title="TEMA Cross Backtest", shorttitle="TEMA_X_BT", overlay=true, commission_type=strategy.commission.percent, commission_value=0, initial_capital = 1000,  default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// 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
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=75, editable=true)

// Buy and Sell Triggers
LongEntryAlert = xnRes > ynRes
LongCloseAlert = xnRes < ynRes
ShortEntryAlert = xnRes < ynRes
ShortCloseAlert = xnRes > ynRes

// Entry & Exit signals
strategy.entry("Long", strategy.long, when = xnRes > ynRes and window()) 
strategy.close("Long", when = xnRes < ynRes)
//strategy.entry("Short", strategy.short, when = xnRes < ynRes and window())
//strategy.close("Short", when = xnRes > ynRes)

더 많은