이 전략은 쌍 EMA와 Awesome Oscillator 두 지표를 조합하여 트렌드를 식별하고 추적합니다. 이 중 EMA는 최근 트렌드 방향을 빠르게 판단하고 Awesome Oscillator 필터 가짜 돌파구가 진입 시간을 제공합니다. 전략 이름 쌍 신호 트렌드 추적 전략은 전략의 주요 기능을 정확하게 요약 할 수 있습니다.
이 전략은 주로 이중 EMA와 Awesome Oscillator 두 가지 기술 지표를 사용하여 신호 필터링을 수행합니다. 구체적인 논리는 다음과 같습니다:
2주기 및 20주기 EMA를 계산하여, 2주기 EMA가 아래로 올라서 20주기 EMA를 돌파할 때, 상승 추세로 판단하고, 2주기 EMA가 위아래로 내려가 20주기 EMA를 돌파할 때, 하향 추세로 판단한다.
Awesome Oscillator를 계산하여, 빠른 이동 평균을 빼고 느린 이동 평균을 얻으며, 빠른 이동 평균을 빼고 MACD 기둥 도표를 얻습니다. AO 기둥 도표는 빨간색이 파란색으로 바뀌면 구매 신호로 간주되며, 파란색이 빨간색으로 바뀌면 판매 신호로 간주됩니다.
EMA가 상승세를 표시하고 AO가 동시에 구매 신호를 표시했을 때만 최종 구매 신호가 생성됩니다. EMA가 하향세를 표시하고 AO가 동시에 판매 신호를 표시했을 때만 최종 판매 신호가 생성됩니다.
이 이중 신호 필터링 메커니즘을 통해 가짜 돌파 작업을 효과적으로 줄이고 트렌드의 중간 방향을 추적 할 수 있습니다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
쌍선 합동 필터링으로 잡음으로 인한 잘못된 거래를 줄일 수 있다. EMA는 큰 트렌드 방향을 판단하고, AO 필터링은 경기장에 들어가는 시간을 판단하며, 둘을 조합하면 신호의 신뢰성을 높일 수 있다.
반응 Sensitivity 매우 빠르고, 단기간에 트렌드 반전을 적시에 포착할 수 있다. 2주기 EMA는 돌파구에 매우 민감하며, 근기간에 트렌드가 변했는지 신속하게 판단할 수 있다.
Awesome Oscillator는 MACD를 다시 으로써 트렌드 속의 가짜 돌파구를 효과적으로 식별하고 불필요한 역작업을 피할 수 있습니다.
전략 방향이 명확하여 중기 트렌드를 추적한다. EMA는 기본 트렌드 방향을 결정하고, AO는 더 많은 필터링을 통해 중기 트렌드 상황을 지속적으로 포착할 수 있습니다.
전략 파라미터를 선택하여 합리적으로 2주기 및 20주기 EMA를 선택하여 다양한 주기의 가격 변화를 포착하고, 5주기 및 34주기 AO 파라미터를 최적화하여 단기간에 형태적 특성을 더 잘 식별할 수 있습니다.
이 전략에는 몇 가지 위험도 있습니다.
충격적인 상황에서 EMA와 AO는 잘못된 신호를 더 많이 발산하여 불필요한 공상 거래를 초래할 수 있다. EMA 주기 파라미터를 조정하여 잘못된 판단의 위험을 줄일 수 있다.
AO는 어떤 경우에는 EMA를 지연시킬 수 있으며, 신호 발생 시간 차이가 발생할 수 있으며, AO 매개 변수를 적절히 최적화하여 더 빨리 돌파에 대응할 수 있다.
단기 중기 특성을 고려한 EMA와 AO 파라미터를 설정하여 데이터 품질과 컴퓨팅에 대한 요구가 높으며, 다양한 품종의 특성에 따라 조정해야 한다.
자주 거래하면 더 많은 수수료와 슬라이드 포인트 비용이 발생한다. 적절한 방면으로 전략 Exit 기준을 완화하여 지분 기간을 연장할 수 있다.
전략은 대주기 경향과 중요한 지지부진을 고려하지 않고, 거래 방향이 올바른지 확인하기 위해 더 많은 요소를 조합해야 합니다.
이 전략은 다음과 같은 몇 가지 측면에서 최적화될 수 있습니다.
트렌드를 판단하는 지표가 도입되어 EMA가 큰 트렌드 방향을 판단하는 데 도움을 주며, 일반적으로 사용되는 이동 평균 리본, ATR 등의 지표가 보완됩니다.
중요한 지지를 하는 저항 지점 식별 메커니즘을 추가하여, 피보나치 회수선과 같이, 중요한 지점 근처에서만 신호를 발산한다. 불리한 위치에 포지션을 구축하는 것을 피한다.
EMA와 AO의 변수 조합을 최적화하여 둘의 결합 효과를 높인다. 예를 들어, 클래스 유전 알고리즘을 사용하여 최적의 변수 쌍을 자동으로 찾는다.
추가된 Exit mechanism. 가격의 최근 스윙 High/Low을 돌파할 때, 단편적 손실을 제어하기 위해 Exit mechanism를 추가한다.
전단 데이터 세트 검증, 역사 데이터 사용으로 전략 효과를 측정한다. 안정적인 수익을 낼 수 있는지 검증하고, 재검토 결과가 기대에 부합하는지 검증한다.
실드 모의 변수를 조정하여 실드 지표 효과를 높이기 위해 점진적으로 변수를 조정하십시오. 변수의 강도를 확인하여 더 나은 안정적인 변수 조합을 얻습니다.
이 전략의 전체적인 아이디어는 EMA가 큰 트렌드 방향을 판단하기 위해 명확하며, AO 필터 신호의 조합은 두 가지 지표를 사용하여 이중 검증을 수행한다. 트렌드를 효과적으로 식별하고 중기 행세를 추적할 수 있다. 그러나 또한 특정 위험과 부족이 있지만, 안정성을 높이기 위해 테스트를 계속 최적화해야 한다.
/*backtest
start: 2022-10-26 00:00:00
end: 2023-11-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
////////////////////////////////////////////////////////////
// Copyright by HPotter v1.0 27/04/2022
// This is combo strategies for get a cumulative signal.
//
// First strategy
// This indicator plots 2/20 exponential moving average. For the Mov
// Avg X 2/20 Indicator, the EMA bar will be painted when the Alert criteria is met.
//
// Second strategy
// This indicator plots the oscillator as a histogram where blue denotes
// periods suited for buying and red . for selling. If the current value
// of AO (Awesome Oscillator) is above previous, the period is considered
// suited for buying and the period is marked blue. If the AO value is not
// above previous, the period is considered suited for selling and the
// indicator marks it as red.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
EMA20(Length) =>
pos = 0.0
xPrice = close
xXA = ta.ema(xPrice, Length)
nHH = math.max(high, high[1])
nLL = math.min(low, low[1])
nXS = nLL > xXA or nHH < xXA ? nLL : nHH
iff_1 = nXS < close[1] ? 1 : nz(pos[1], 0)
pos := nXS > close[1] ? -1 : iff_1
pos
AC(nLengthSlow,nLengthFast,nLengthMA,nLengthEMA,nLengthWMA,bShowWMA,bShowMA,bShowEMA) =>
pos = 0.0
xSMA1_hl2 = ta.sma(hl2, nLengthFast)
xSMA2_hl2 = ta.sma(hl2, nLengthSlow)
xSMA1_SMA2 = xSMA1_hl2 - xSMA2_hl2
xSMA_hl2 = ta.sma(xSMA1_SMA2, nLengthFast)
nRes = xSMA1_SMA2 - xSMA_hl2
xResWMA = ta.wma(nRes, nLengthWMA)
xResMA = ta.sma(nRes, nLengthMA)
xResEMA = ta.ema(nRes, nLengthEMA)
xSignalSeries = bShowWMA ? xResWMA :
bShowMA ? xResMA :
bShowEMA ? xResEMA : na
pos := xSignalSeries[2] < 0 and xSignalSeries[1] > 0? 1:
xSignalSeries[2] > 0 and xSignalSeries[1] < 0 ? -1 : nz(pos[1], 0)
pos
strategy(title='Combo 2/20 EMA & Bill Awesome Oscillator (AC)', shorttitle='Combo', overlay=true)
var I1 = '●═════ 2/20 EMA ═════●'
Length = input.int(14, minval=1, group=I1)
var I2 = '●═════ Awesome Oscillator (AC) ═════●'
nLengthSlow = input.int(34, minval=1, title="Length Slow", group=I2)
nLengthFast = input.int(5, minval=1, title="Length Fast", group=I2)
nLengthMA = input.int(15, minval=1, title="MA", group=I2)
nLengthEMA = input.int(15, minval=1, title="EMA", group=I2)
nLengthWMA = input.int(15, minval=1, title="WMA", group=I2)
bShowWMA = input.bool( defval=true, title="trading WMA", group=I2)
bShowMA = input.bool( defval=false, title="trading MA", group=I2)
bShowEMA = input.bool( defval=false, title="trading EMA", group=I2)
var misc = '●═════ MISC ═════●'
reverse = input.bool(false, title='Trade reverse', group=misc)
var timePeriodHeader = '●═════ Time Start ═════●'
d = input.int(1, title='From Day', minval=1, maxval=31, group=timePeriodHeader)
m = input.int(1, title='From Month', minval=1, maxval=12, group=timePeriodHeader)
y = input.int(2005, title='From Year', minval=0, group=timePeriodHeader)
StartTrade = time > timestamp(y, m, d, 00, 00) ? true : false
posEMA20 = EMA20(Length)
prePosAC = AC(nLengthSlow,nLengthFast,nLengthMA,nLengthEMA,nLengthWMA,bShowWMA,bShowMA,bShowEMA)
iff_1 = posEMA20 == -1 and prePosAC == -1 and StartTrade ? -1 : 0
pos = posEMA20 == 1 and prePosAC == 1 and StartTrade ? 1 : iff_1
iff_2 = reverse and pos == -1 ? 1 : pos
possig = reverse and pos == 1 ? -1 : iff_2
if possig == 1
strategy.entry('Long', strategy.long)
if possig == -1
strategy.entry('Short', strategy.short)
if possig == 0
strategy.close_all()
barcolor(possig == -1 ? #b50404 : possig == 1 ? #079605 : #0536b3)