이중 EMA와 대역 패스 필터 기반의 조합 거래 전략

저자:차오장, 날짜: 2024-01-17 11:22:30
태그:

img

전반적인 설명

이 전략은 이중 기하급수적 이동 평균 (DEMA) 및 뱅드 패스 필터 (BPF) 지표를 결합하여 브레이크아웃 구매와 과잉 구매 과잉 판매 이중 필터링을 구현하여 안정적인 거래 신호를 형성하고 최대 수익성을 추구합니다.

전략 원칙

이 전략은 두 가지 하위 전략으로 구성됩니다.

  1. DEMA 전략

    이 지표는 2일 및 20일 이중 기하급수적인 이동 평균을 사용하여 골든 크로스 구매 및 죽은 크로스 판매 신호를 생성합니다. 이 지표는 가격 소음을 필터링하고 트렌드를 발견하는 데 도움이됩니다.

  2. BPF 전략

    BPF 지표는 가격의 순환적 구성 요소를 감지하고 특정 기간 내에 거래 신호를 생성하기 위해 과잉 구매 과잉 판매 구역을 형성하기 위해 수학적 변환을 결합합니다. 이 전략은 0.5 정규화 매개 변수와 함께 20 일 주기로 설정합니다.

이 둘을 결합하면 동시 구매/판매 신호가 나타날 때 트렌드와 순환적 요인의 더 강력한 검증을 제공합니다. 따라서 신뢰도가 높으며 더 안정적인 입출점으로 이어집니다.

이점 분석

이 전략의 가장 큰 장점은 신호를 더 안정적이고 신뢰할 수 있도록 하는 이중 지표 필터링이다. DEMA는 가격을 매끄럽게 하고 트렌드 방향을 식별하며, BPF는 순환적 특징을 인식하고 과잉 구매 과잉 판매 구역을 결정한다. 둘 사이의 교차 검증은 가격 소음과 순환적 조정으로 인한 잘못된 신호를 크게 줄일 수 있다.

또한 전략 자체는 거래 빈도가 드물어 과도한 자본 및 과잉 거래로 인한 수수료 비용을 피할 수 있습니다. 포지션 보유 시간은 대부분 중장기이며 무작위 변동 영향을 피하는 데 도움이됩니다.

위험 분석

이 전략의 가장 큰 위험은 시장 상태를 잘못 판단하는 것입니다. 시장 범위에서 잘못된 신호에 취약하며 트렌드가 역전되면 큰 스톱 손실을 입을 수 있습니다. 또한 매개 변수 설정은 전략 성과에도 크게 영향을 줄 수 있습니다.

이러한 위험을 해결하기 위해, 지표 매개 변수를 최적화, 스톱 손실 / 수익을 설정, 다른 지표를 결합 등과 같은 방법을 채택하여 제어 및 개선 할 수 있습니다. 시장이 다양하고 불안정한 단계에 들어갔다고 판단하면 불리한 시장 조건의 간섭을 피하기 위해 전략을 중단하는 것을 고려하십시오.

최적화 방향

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

  1. 시간 사이클 최적화. 최적의 기간 조합을 결정하기 위해 다른 DEMA와 BPF 매개 변수 설정을 테스트합니다.

  2. 스톱 로스/프로피스 취업 설정을 추가합니다. 손실 확대 방지하기 위해 합리적으로 스톱 로스 진폭을 설정하십시오. 부분적 이윤을 잠금하기 위해 적당하게 이익을 취하십시오.

  3. 부피, MACD 등과 같은 다른 지표 필터를 추가하여 높은 부피 풀기와 포지션 플리핑의 잘못된 신호를 피합니다.

  4. 매개 변수 적응 최적화. 지표의 적시성을 유지하기 위해 최신 시장 조건에 따라 DEMA와 BPF 매개 변수를 조정 할 수 있습니다.

결론

이 전략은 이중 EMA 및 BPF 지표의 강점을 이중 필터링으로 통합하여 신호 품질을 향상시키고 중장기 안정적인 이익을 추구합니다. 위험은 주로 시장 조건의 잘못된 판단과 불충분한 매개 변수 조정에서 발생합니다. 멀티 지표 검증 및 동적 매개 변수 최적화와 같은 방법은 전략을 보다 탄력적이고 적응력이 높게 할 수 있습니다.


/*backtest
start: 2023-01-10 00:00:00
end: 2024-01-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 05/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
// The related article is copyrighted material from
// Stocks & Commodities Mar 2010
//
//
// 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


BPF(Length,Delta,SellZone,BuyZone) =>
    pos = 0.0
    xPrice = hl2
    beta = math.cos(3.14 * (360 / Length) / 180)
    gamma = 1 / math.cos(3.14 * (720 * Delta / Length) / 180)
    alpha = gamma - math.sqrt(gamma * gamma - 1)
    BP = 0.0
    BP := 0.5 * (1 - alpha) * (xPrice - xPrice[2]) + beta * (1 + alpha) * nz(BP[1]) - alpha * nz(BP[2])
    pos:= BP > SellZone ? 1 :
    	   BP <= BuyZone? -1 : nz(pos[1], 0) 
    pos

strategy(title='Combo 2/20 EMA & Bandpass Filter', shorttitle='Combo', overlay=true)
var I1 = '●═════ 2/20 EMA ═════●'
Length = input.int(14, minval=1, group=I1)
var I2 = '●═════ Bandpass Filter  ═════●'
LengthBPF = input.int(20, minval=1, group=I2)
Delta = input(0.5, group=I2)
SellZone = input.float(5, step = 0.01, group=I2)
BuyZone = input.float(-5, step = 0.01, 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)
prePosBPF = BPF(LengthBPF,Delta,SellZone,BuyZone)
iff_1 = posEMA20 == -1 and prePosBPF == -1 and StartTrade ? -1 : 0
pos = posEMA20 == 1 and prePosBPF == 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)

더 많은