동적 채널 이동 평균 추세 추종 전략


생성 날짜: 2024-02-22 15:51:48 마지막으로 수정됨: 2024-02-22 15:51:48
복사: 0 클릭수: 577
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

동적 채널 이동 평균 추세 추종 전략

개요

이 전략은 동적 채널과 평평선의 트렌드 추적 원리에 기초하여 설계되었다. 가격의 동적 채널을 계산하고, 채널의 오르락 내리락을 통해 가격 트렌드 방향을 판단하고, 평평선 필러브 가격 분산과 결합하여 거래 신호를 생성한다. 이 전략은 중단계 트렌드 거래에 적합하다.

원칙

이 전략은 다음과 같은 원칙에 기초하고 있습니다.

  1. 동적 가격 채널을 계산한다. 최상위 가격과 최저 가격으로 채널의 중선을 계산한다. 채널 상단 궤도는 중간선 + 가격 분산도 평균선, 하단 궤도는 중간선 - 가격 분산도 평균선이다.

  2. 트렌드 방향을 판단한다. 가격이 상단 궤도에 오르면 부진으로 정의되고, 가격이 하단 궤도에 오르면 하락으로 정의된다.

  3. 波噪音. 일정 주기간의 가격 분산도 평균선을 사용하여, 波價格隨機波動에 의한噪音.

  4. 거래 신호를 생성한다. 부진할 때, 해당 주기 종전 가격이 개시 가격보다 낮을 때 구매 신호를 생성한다. 하락할 때, 해당 주기 종전 가격이 개시 가격보다 높을 때 판매 신호를 생성한다.

장점

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

  1. 동적 채널은 가격 동향을 실시간으로 파악할 수 있습니다.
  2. 평선 필터링은 가짜 신호를 줄일 수 있습니다.
  3. 트렌드 방향과 K선 엔티티 방향과 결합하여 거래 신호를 생성하여 피팅을 피하십시오.

위험

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

  1. “Params”를 잘못 선택하면 과잉 최적화가 발생할 수 있습니다.
  2. “이런 일이 벌어진다면, 우리는 더 나은 삶을 살 수 있을 것이다”.
  3. “비슷한 경우, 가격의 급격한 변동은 예측할 수 없습니다”.

대응방법:

  1. 엄격한 Params 선택과 테스트;
  2. 터 조건이 추가되어, 진동의 정렬을 식별할 수 있습니다.
  3. 스탠드피드 스톱을 설정하고, 위험을 통제한다.

최적화 방향

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

  1. 다른 주기 변수의 안정성을 테스트합니다.
  2. 볼륨 또는 변동성 지표의 판단력을 높여줍니다.
  3. 진입과 퇴출을 판단하는 파장, 통로 등과 함께

요약하다

이 전략은 동적 통로와 평선 경향 판단을 통합한 아이디어로, 중·단선에서 트렌드 방향을 잡는 데 좋은 성능을 발휘한다. 그러나 또한 한계가 있으며, 더 많은 시장 상황에 적응하기 위해 추가 테스트 및 최적화가 필요합니다.

전략 소스 코드
/*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)