동적 채널 이동 평균 트렌드 추적 전략

저자:차오장, 날짜: 2024-02-22 15:51:48
태그:

img

전반적인 설명

이 전략은 동적 채널 및 이동 평균 트렌드 추적의 원칙에 기초하여 설계되었습니다. 동적 가격 채널을 계산하고 채널의 상부 및 하부 레일을 통해 트렌드 방향을 판단하고 이동 평균을 결합하여 가격 변동성을 필터함으로써 거래 신호를 생성합니다. 이 전략은 중장기 및 단기 트렌드 거래에 적합합니다.

원칙

이 전략의 주요 원칙은 다음과 같습니다.

  1. 동적 가격 채널을 계산합니다. 채널 중간 선은 가장 높은 가격과 가장 낮은 가격에서 계산됩니다. 상부 레일은 중간 선 + 가격 변동성 MA, 하부 레일은 중간 선 - 가격 변동성 MA입니다.

  2. 트렌드 방향을 판단합니다. 가격이 상단 레일을 통과하면 상승률로 정의됩니다. 가격이 하단 레일을 통과하면 하락률로 정의됩니다.

  3. 소음 필터: 특정 기간의 가격 변동성 MA를 사용하여 무작위 가격 변동에서 소음을 필터합니다.

  4. 거래 신호를 생성합니다. 상승시, 닫는 가격이 해당 기간 동안 열기 가격보다 낮을 때 구매 신호가 생성됩니다. 하락시, 닫는 가격이 열기 가격보다 높을 때 판매 신호가 생성됩니다.

장점

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

  1. 동적 채널은 실시간으로 가격 추세를 파악할 수 있습니다.
  2. MA 필터는 잘못된 신호를 줄일 수 있습니다.
  3. 트렌드 방향과 K-라인 엔티티 방향을 결합하여 거래 신호를 생성하면 함정에 빠지지 않습니다.

위험성

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

  1. 부적절한 PARAM 선택은 과장 적합으로 이어질 수 있습니다.
  2. 편향 변동성 때 잘못된 신호를 생성하는 것이 쉽습니다.
  3. 극단적인 가격 변동을 예측할 수 없습니다.

해결책:

  1. 엄격한 패람 선택과 테스트
  2. 필터 조건을 추가해서 옆으로 표시합니다.
  3. 리스크를 통제하기 위해 스톱 로스/이익을 설정합니다.

최적화 방향

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

  1. 다른 기간 파라암의 테스트 안정성.
  2. 동력을 판단하기 위해 VOLUME 또는 변동성 지표를 추가합니다.
  3. 진입과 출구를 결정하기 위해 밴드, 채널 등을 결합합니다.

요약

이 전략은 동적 채널과 MA 트렌드 판단의 아이디어를 통합하고 중·단기적으로 트렌드 방향을 잘 파악합니다. 그러나 여전히 더 많은 시장 상황에 적응하기 위해 추가 테스트와 최적화가 필요한 몇 가지 제한 사항이 있습니다.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=2
strategy("Noro's Bands Strategy v1.0", shorttitle = "NoroBands str 1.0", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
color = input(true, "Color")
needbb = input(false, defval = false, title = "Show Bands")
needbg = input(false, defval = false, title = "Show Background")
src = close

//PriceChannel 1
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

//dist
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma

//Trend
trend = close < ld and high < hd ? -1 : close > hd and low > ld ? 1 : trend[1]

//Lines
colo = needbb == false ? na : black
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band")

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 90)

//up =  and trend == 1 ? 1 : 0
//dn =  and trend == -1 ? 1 : 0 

up = close < hd and trend == 1 and (close < open or color == false) ? 1 : 0
dn = close > ld and trend == -1 and (close > open or color == false) ? 1 : 0 

longCondition = up == 1
if (longCondition)
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

shortCondition = dn == 1
if (shortCondition)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)

더 많은