EMA 지표를 기반으로 한 추세 추종 전략


생성 날짜: 2023-11-06 09:53:27 마지막으로 수정됨: 2023-11-06 09:53:27
복사: 0 클릭수: 691
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

EMA 지표를 기반으로 한 추세 추종 전략

개요

이 전략은 EMA 지표를 사용하여 주식 가격 추세를 식별하고, 표준 격차 계산 구매 판매 신호와 결합하여 추세를 추적하는 거래 전략을 구현합니다. 주요 아이디어는 현재 가격과 EMA의 차이를 계산하고, 값 구매를 설정하는 것입니다.

전략 원칙

전략은 먼저 클로즈 가격과 길이가 ema_length인 EMA의 차이를 계산합니다. v. 그리고 v의 ema_length 주기 표준 차이를 계산합니다. dev. 그리고 구매 방향 계수를 결정합니다. k는 1을 의미하며, k는 1을 의미하며, k는 -1을 의미합니다.

이 전략은 두 가지 모드를 제공합니다.

  1. 하락세를 사서, v가 마이너스 dev_limit을 통과했을 때 사서, 즉 하락세를 추적한다.

  2. 을 구매하면, v에 적당한 dev_limit을 구매하면, 상승 추세를 추적한다.

종합적으로, 이 전략은 동적으로 가격과 EMA 값의 차이의 표준차이를 계산하여, 구매한한값을 설정하여 트렌드를 추적한다. ≪factor 파라미트는 구매한 신호의 감수성을 제어한다. ≫ema_length는 구매한 EMA 주기를 제어한다. ≫ 구매한 패턴은 구매한 방향을 제어한다.

전략적 강점 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. EMA 지표는 가격 트렌드 방향을 식별하고, EMA 지표는 가격을 평평하게 하고, 트렌드 식별 효과가 좋다.

  2. 표준 차이의 동적 절감은 고정 절감보다 시장 변화에 더 잘 적응할 수 있다.

  3. 두 가지 구매 모드는 상승 추세를 추적하거나 하락 추세를 추적 할 수 있습니다.

  4. factor 변수는 구매 민감도를 조정할 수 있는 공간을 제공한다. ema_length 변수는 EMA 주기 최적화 변수를 조정할 수 있다.

  5. 전략 논리는 명확하고 간단하며, 이해하기 쉽고 수정하기 쉽다.

  6. 포지션 관리를 유연하게 설정하여 상승/하락 추세를 따라가는 적극적인 전략을 수립할 수 있다.

위험 분석

이 전략에는 다음과 같은 위험도 있습니다.

  1. EMA 지표는 트렌드 전환점을 놓칠 수 있습니다.

  2. 변수 최적화에 의존하며, 변수가 잘못 설정되면 너무 민감하거나 느려질 수 있다.

  3. 추세를 따라가는 위험, 추세가 역전되면 큰 손실이 발생할 수 있다.

  4. 다중 공간 전환이 자주 발생하면 거래가 자주 발생합니다.

  5. 큰 지진이 발생하면 신호가 자주 발생하고 거래비용이 증가합니다.

이러한 위험들에 대해, 손실을 방지하는 전략의 위험 제어, 최적화된 변수 조합 테스트를 통해 최적의 변수를 찾는 것, 너무 자주 거래되는 것을 방지하는 필터링 조건을 추가하는 것을 고려할 수 있다.

최적화 방향

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

  1. 다양한 EMA 주기들의 파라미터 효과를 테스트하여 최적의 EMA 주기 길이를 찾는다.

  2. 테스트 팩터의 다른 값을 취하여 최적의 절댓값 감수성을 찾습니다.

  3. 포지션 관리 전략을 최적화, 예를 들어 트렌드에 따라 포지션을 추가하는 방법.

  4. 다른 지표 필터를 추가하여 불안정한 상황에서 잘못된 거래를 피하십시오.

  5. 단편적 손실을 통제하기 위한 Stop Loss Strategies를 늘리세요.

  6. 두 가지 구매 모드에 대해 각각 최적화 파라미터를 찾고, 최적의 파라미터 조합을 찾습니다.

  7. 트렌드 반전 신호를 조사하고 트렌드 추적을 종료하십시오.

요약하다

이 전략은 EMA를 기반으로 트렌드 방향을 식별하고, 동적으로 계산한 마진값을 생성하여 구매 판매 신호를 생성하여 트렌드를 추적한다. 전략 논리는 간단하고 명확하며, 적극적으로 트렌드를 추적하는 포지션 관리를 유연하게 구성할 수 있다. 동시에 전략에는 약간의 위험이 있으며, 파라미터 조합에 대한 최적화 테스트가 필요하며, StopIteration 손실 전략에 보조되어 위험을 제어한다. 이 전략은 학습 지표와 결합하여 응용, 최적화 파라미터 세팅의 좋은 사례가 될 수 있다.

전략 소스 코드
/*backtest
start: 2023-10-06 00:00:00
end: 2023-11-05 00:00:00
period: 1h
basePeriod: 15m
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/
// © Azzrael

// Based on EMA and EMA Oscilator https://www.tradingview.com/script/qM9wm0PW-EMA-Oscilator-Azzrael/

// (EMA - close) + Std Dev + Factor = detecting oversell/overbuy
// Long only!
// Pyramiding - sometimes, depends on ...
// There 2 enter strategies in one script 
// 1 - Classic, buy on entering to OverSell zone (more profitable ~> 70%)
// 2 - Crazy, buy on entering to OverBuy zone (catching trend and pyramiding, more net profit)
// Exit - crossing zero of (EMA - close)

//@version=5
strategy("STR:EMA Oscilator [Azzrael]", overlay=false, 
 margin_long=100, 
 margin_short=100, 
 currency=currency.USD,
 default_qty_type=strategy.percent_of_equity,
 default_qty_value=30,
 pyramiding=3)

entry_name="Buy"

ema_length = input.int(200, "Period", minval=2, step=10)
limit = input.float(1.7, "Factor", minval=1, step=0.1, maxval=10)
dno = input.string(defval="Buy on enter to OverSell", title="Model", options=["Buy on enter to OverSell", "Buy on enter to OverBuy"]) == "Buy on enter to OverSell"

v = close - ta.ema(close, ema_length)
dev = ta.stdev(v, ema_length)
k = dno ? -1 : 1
dev_limit = k*dev*limit

cond_long = dno ? ta.crossunder(v, dev_limit) : ta.crossover(v, dev_limit)
cond_close = ta.cross(v, 0) 

// dev visualization
sig_col = (dno and v <= dev_limit) or (not dno and v >= dev_limit) ? color.green : color.new(color.blue, 80)
plot(dev_limit, color=color.green)
plot(k*dev, color=color.new(color.blue, 60))
plot(v, color=sig_col )
hline(0)

// Make love not war
strategy.entry(entry_name, strategy.long, when=cond_long)
strategy.close(entry_name, when=cond_close)