Donshian 채널 돌파 전략


생성 날짜: 2023-09-19 21:47:41 마지막으로 수정됨: 2023-09-19 21:47:41
복사: 1 클릭수: 823
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

개요

이 전략은 톤샤인 채널 지표를 기반으로, 가격의 채널 상하 궤도를 돌파하는 것을 거래 신호의 방법으로, stock/futures/crypto/forex와 같은 품종의 트렌드 추적 작업을 구현합니다. 중장선 지주들의 트렌드 돌파 전략에 속합니다.

전략 원칙

  1. 주어진 주기 (예: 20일) 의 최고 가격과 최저 가격을 계산하여, 톤시안 통로의 상반 및 하반을 얻는다.

  2. 통로 중간선은 상하 궤도의 평균값이다. 상하 궤도 돌파는 트렌드 전환 다도 신호이며, 하하 궤도 돌파는 트렌드 회전 신호이다.

  3. 가격 마감이 경로를 돌파할 때, 트렌드 시작으로 판단하고, 더 많은 입주를 한다.

  4. 가격이 중도선 아래로 떨어질 때, 상점에서 벗어나는 것으로 간주한다.

  5. 실제 거래 신호를 생성하기 위한 리포트 타임 스펙을 사용할 수 있다.

  6. 선택적으로, 가격 돌파 하락 신호로도 할 수 있다.

이 전략은 채널 판단 트렌드를 돌파하여 중간 라인을 끝으로 출구 지점을 니다. 캡처 중장선 트렌드 상황. 채널 매개 변수는 시장에 맞게 조정할 수 있습니다.

우위 분석

  1. 둥 통로 계산은 간단하고, 지표는 구현하기 쉽다.

  2. 가격 돌파구가 트렌드 변화를 판단할 수 있다.

  3. 통로 중간선은 정지점으로, 설정은 합리적이다.

  4. 거래 신호 규칙은 명확하고 실행하기 쉽습니다.

  5. 다양한 품종과 주기에 적응할 수 있도록 통로 매개 변수를 유연하게 조정할 수 있다.

  6. 장선 또는 단선 거래의 효과를 평가할 수 있다.

  7. 확장할 수 있는 공간이 넓어서 다른 기술 지표들을 도입할 수 있다.

위험 분석

  1. “이번 해협 개척에 걸린 지연으로 인해 초기의 기회를 놓칠 수 있습니다”.

  2. 빗나가는 것을 고려하지 않았기 때문에 잘못된 신호가 발생할 수 있습니다.

  3. 중간선 상쇄 범위는 고정되어 있으며, 시장 충격에 민감하다.

  4. 재검토주기를 잘못 선택하면 과적합으로 이어질 수 있다.

  5. 손실을 막기 위한 전략이 마련되지 않았기 때문에 손실이 커질 수 있는 위험에 주의를 기울여야 합니다.

최적화 방향

  1. 테스트 최적화 채널 사이클 파라미터를 .

  2. 다른 종류의 이동 평균을 평가해 보세요.

  3. 거래량 증가와 같은 지표의 필터링 조건.

  4. 이동식 중지 또는 추적 중지 전략을 설정하십시오.

  5. 기계 학습을 도입하여 가격 돌파를 예측합니다.

  6. 자금 관리 전략을 최적화하고 수익률을 설정합니다.

  7. 긴 줄과 짧은 줄의 혼합작업이나 다중 품종 조합을 고려하십시오.

요약하다

이 전략은 톤히안 통로를 기반으로 트렌드 방향을 판단하고, 돌파구로 동작하는 전형적인 중장선 트렌드 추적 전략에 속한다. 통로 매개 변수를 최적화하고, 다른 기술 지표와 함께, 비교적 안정적인 돌파구 시스템을 형성할 수 있다. 이 전략은 간단하고 명확하며, 확장 가능한 공간이 넓으며, 정량 거래의 기본 전략 모듈로 사용할 수 있으며, 매우 실용적이다.

전략 소스 코드
/*backtest
start: 2023-09-11 00:00:00
end: 2023-09-15 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//future strategy
//strategy(title = "stub", default_qty_type = strategy.fixed, default_qty_value = 1,  overlay = true, commission_type=strategy.commission.cash_per_contract,commission_value=2)
//stock strategy
strategy(title = "dc", default_qty_type = strategy.percent_of_equity, default_qty_value = 100,  overlay = true, commission_type=strategy.commission.cash_per_contract,commission_value=.005)
//forex strategy
//strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100,  overlay = true)
//crypto strategy
//strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100,  overlay = true, commission_type=strategy.commission.percent,commission_value=.25,default_qty_value=10000)


testStartYear = input(2000, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testEndYear = input(2018, "Backtest Start Year")
testEndMonth = input(12, "Backtest Start Month")
testEndDay = input(1, "Backtest Start Day")
testPeriodEnd = timestamp(testStartYear,testStartMonth,testStartDay,0,0)


testPeriod() =>
    true
    //time >= testPeriodStart  ? true : false

dcPeriod = 20

dcUpper = highest(close, dcPeriod)[1]
dcLower = lowest(close, dcPeriod)[1]
dcAverage = (dcUpper + dcLower) / 2

plot(dcLower, style=line, linewidth=3, color=red, offset=1)
plot(dcUpper, style=line, linewidth=3, color=aqua, offset=1)

plot(dcAverage, color=yellow, style=line, linewidth=1, title="Mid-Line Average")

strategy.entry("simpleBuy", strategy.long, when=close >= dcUpper)
strategy.close("simpleBuy",when=close < dcAverage)
    
//strategy.entry("simpleSell", strategy.short,when=close <= dcLower)
//strategy.close("simpleSell",when=close > dcAverage)