전략에 따른 EMA 오시레이터 트렌드

저자:차오장, 날짜: 2023-11-06 09:53:27
태그:

img

전반적인 설명

이 전략은 가격 동향을 식별하기 위해 EMA 지표를 사용하고 거래 후 트렌드를위한 구매 및 판매 신호를 계산하기 위해 표준편차를 결합합니다. 주요 아이디어는 폐쇄 가격과 EMA 사이의 차이를 계산하고 주문을 유발하는 문턱을 설정하는 것입니다.

전략 논리

전략은 먼저 긴 ema_length의 닫기 가격과 EMA 사이의 차이점을 계산합니다. 그 다음은 ema_length 기간 동안 v의 표준편차 dev를 계산합니다. 다음으로 길이를 위해 k=1과 짧은 것을 위해 k=-1로 방향 계수를 결정합니다. 구매 신호 임계 dev_limit은 k * dev * 인자 제한으로 계산됩니다. v가 dev_limit을 넘을 때 구매 신호가 유발됩니다. 출구 신호는 v가 0을 넘을 때입니다.

이 전략은 두 가지 방법을 제시합니다.

  1. 하락 추세를 따르기 위해 v가 마이너스 dev_limit 아래로 넘어가면 단축을 구매하고, 단축을 할 때 단축을 할 수 있습니다.

  2. 길게 사서, 길게 가자, v가 양적 dev_limit을 넘으면 상승 추세를 따르기 위해

요약하자면, 전략은 임계치를 설정하기 위해 가격과 EMA 사이의 차이의 표준편차를 동적으로 계산하고 트렌드를 따르고 있습니다. 요인은 구매 신호의 민감도를 제어합니다. ema_length는 EMA 기간을 결정합니다. 구매 모드는 주문 방향을 제어합니다.

이점 분석

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

  1. EMA는 가격 평형화를 통해 유행 방향을 잘 파악합니다.

  2. 표준편차에 기반한 동적 임계값은 고정 임계값보다 더 잘 적응합니다.

  3. 두 가지 구매 방식이 상승 추세나 하락 추세를 따라갈 수 있습니다.

  4. 이 요인은 구매 감수성을 조정하는 데 유연성을 제공합니다. ema_length는 EMA 기간 최적화를 허용합니다.

  5. 논리는 간단하고 이해하기 쉽고 수정할 수 있습니다.

  6. 포지션 사이징은 공격적인 트렌드를 따라 유연하게 구성될 수 있습니다.

위험 분석

전략의 위험성:

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

  2. 파라미터 최적화에 의존합니다. 부적절한 설정은 불충분한 민감성 또는 과민성으로 이어집니다.

  3. 트렌드를 따라가면 트렌드가 역전될 때 더 큰 손실을 입을 위험이 있습니다.

  4. 빈번한 롱/코트 스위치는 거래 빈도를 증가시킵니다.

  5. 다양한 시장에서 자주 신호를 보내는 것은 비용을 증가시킵니다.

리스크를 해결하기 위해 스톱 로스, 최적화 매개 변수, 과잉 거래 방지 필터 등을 추가하는 것을 고려하십시오.

최적화 방향

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

  1. 최적의 길이를 찾기 위해 다른 EMA 기간을 테스트합니다.

  2. 가장 좋은 감수성을 찾기 위해 다른 요인 값을 테스트합니다.

  3. 위치 크기를 최적화하는 전략, 예를 들어 피라미드

  4. 필터를 추가하여 불투명한 시장에서 잘못된 거래를 피합니다.

  5. 단일 거래 손실을 통제하기 위해 Stop Loss를 포함합니다.

  6. 두 가지 구매 방식에 대해 매개 변수를 개별적으로 최적화합니다.

  7. 트렌드 뒤집기 신호를 조사해서 트렌드 추종을 막기 위해서요.

결론

이 전략은 EMA와 트렌드를 식별하고 트렌드를 따르기 위해 동적 임계 명령을 생성합니다. 논리는 간단하고 명확합니다. 트렌드를 추격하기 위해 포지션 사이징이 공격적 일 수 있습니다. 매개 변수 최적화 및 스톱 로스를 통해 해결해야 할 위험이 있습니다. 지표 조합과 매개 변수 조정 학습에 좋은 예로 사용됩니다.


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


더 많은