진동 브레이크아웃 전략


생성 날짜: 2023-10-20 16:37:28 마지막으로 수정됨: 2023-10-20 16:37:28
복사: 0 클릭수: 943
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

진동 브레이크아웃 전략

개요

이 전략은 지그자그 지표를 사용하여 지지선과 저항선을 그리며, 가격이 지지선이나 저항선을 돌파했을 때 그에 따른 상장 또는 하락 작업을 수행합니다.

전략 원칙

이 전략은 먼저 ZigZag 지표를 사용하여 특정 변수 아래 Z 모양의 선을 그린다. 그 다음 ZigZag 지표가 바닥에 나타나면 녹색의 지원선을 그리고, 상단에 나타나면 빨간색의 저항선을 그리는다. 가격이 초록색 선을 통과할 때 더 많이하고, 빨간색 선을 통과할 때 비어있다.

특히, 이 전략의 핵심 논리는 다음과 같습니다.

  1. 이마를 사용하여 클로즈 가격에 대해 3배의 지수 이동 평균을 수행하여 평평한 곡선을 얻습니다.

  2. 평평한 곡선이 상승하는지 판단하기 위해, 상승하고 전 K선이 상승하지 않은 경우, K선의 최저값을 밑으로 적어 둡니다. 떨어지고 전 K선이 상승한 경우, K선의 최고값을 꼭대기로 적어 둡니다. 그렇지 않으면 NaN으로 둡니다.

  3. 이 과정을 반복하면 ZigZag 라인 zigzag 을 얻을 수 있습니다.

  4. 지그자그가 올라갈 때, 현재 상위 점으로 기록하고, 내려갈 때, 현재 하위 점으로 기록한다.

  5. 도트가 올라갈 때, 녹색의 지원선을 uplevel로 그리세요. 도트가 내려갈 때, 빨간색의 저항선을 dnlevel로 그리세요.

  6. 가격대가 초록선을 넘으면 더 많이 하고, 빨간선을 넘으면 더 적게 한다.

우위 분석

이 전략에는 다음과 같은 장점이 있습니다.

  1. 지그자그 지표를 사용하여 중요한 지지를 나타내는 저항 지점을 식별합니다.

  2. ZigZag는 시장의 일부 소음을 없애고 거래 신호를 더 명확하게 만듭니다.

  3. 트렌드 전환을 잡을 수 있는 획기적인 접근법을 도입한다.

  4. 저항선을 지지하는 그림은 간단하고 효과적입니다.

  5. 전략 논리는 명확하고 이해하기 쉽고, 파라미터 최적화 공간은 넓다.

  6. 유연한 거래 종류와 시간 주기, 적응력이 강하다

위험 분석

이 전략에는 몇 가지 위험도 있습니다.

  1. ZigZag 지표 파라미터를 잘못 설정하면 거래 기회를 놓칠 수 있습니다.

  2. 지원 저항 레벨이 뚫린 후 재테스트가 발생할 수 있으며, 위험을 제어하기 위해 손실을 중지하도록 설정한다.

  3. 브레이크 신호는 오해가 있을 수 있으며, 추세와 형태를 결합하여 검증되어야 한다.

  4. 시장이 장기적으로 변동할 수 있고, 이 때 전략은 너무 많은 무효 거래가 발생할 수 있습니다.

  5. 거래 비용의 영향을 고려하고, 너무 자주 거래하는 것을 피해야 합니다.

대응책은 다음과 같습니다:

  1. 지그자그 변수를 최적화하여 최적의 변수 조합을 찾습니다.

  2. 파격 후 단독 손실을 제어하기 위해 제때 스톱로스를 설정한다.

  3. 트렌드 지표와 같은 필터링 신호와 결합하여 정확도를 향상시킵니다.

  4. 이 기간 동안 거래하지 않는 것을 확인하기 위한 조건이 추가되었다.

  5. 부실 거래를 줄이기 위해 부실 거래의 폭을 적절히 완화하십시오.

최적화 방향

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

  1. 지그자그 변수를 최적화하여 최적의 변수 조합을 찾습니다.

  2. 진입을 돌파한 후 다시 테스트할 수 있는 저항 지점을 고려하고, 다시 테스트하는 출구 논리를 설정한다.

  3. MA와 같은 트렌드 지표와 결합하여 낮은 확률의 거래 신호를 필터링합니다.

  4. 갱신 신호를 확인하고 잘못된 신호를 피하기 위해 에너지 지표 등을 증가시킨다.

  5. Lachenbruch에 언급된 dual 방식을 설정하여 잘못된 신호를 필터링하여 수익을 얻습니다.

  6. 기계 학습과 같은 알고리즘을 사용하여 동적으로 최적화 된 파라미터를 고려하십시오.

  7. 스톱로스 전략을 도입하고, 스톱로스 포인트를 설정하여 위험을 통제한다.

요약하다

이 전략은 전반적으로 간단하고 실용적인 충격적 돌파 전략이다. ZigZag 지표를 사용하여 지원 및 저항 라인을 그리고, 가격이 이러한 라인을 돌파 할 때 행동한다. 전략은 강한 적응력을 가지고 있지만, 또한 약간의 위험이 있습니다.

전략 소스 코드
/*backtest
start: 2022-10-13 00:00:00
end: 2023-10-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
// strategy(title = "Noro's ZZ-2 Strategy", shorttitle = "Noro's ZZ-2 Strategy", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
length = input(4, title = "ZigZag length")
Extreme = input(4, title = "ZigZag extreme")
src = input(close, title = "Source")
showzz = input(false, defval = false, title = "Show ZigZag")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//ZigZag
f_zz(_length, _detection)=>
    _hls = ema(ema(ema(src, _length), round(_length*0.66)), round(_length*0.33))
    _isRising = _hls >= _hls[1]
    _zigzag = _isRising and not _isRising[1] ? lowest(_detection) :  not _isRising and _isRising[1] ? highest(_detection) : na
zigzag = f_zz(length, Extreme)
zzcol = showzz ? black : na
plot(zigzag, color = zzcol, linewidth = 2)

//Levels
dot = 0.0
dot := zigzag > 0 ? zigzag : dot[1]
uplevel = 0.0
uplevel := dot > dot[1] ? zigzag : uplevel[1]
dnlevel = 0.0
dnlevel := dot < dot[1] ? zigzag : dnlevel[1]
upcol = na
upcol := dot > dot[1] ? na : lime
plot(uplevel, color = upcol, linewidth = 2)
dncol = na
dncol := dot < dot[1] ? na : red
plot(dnlevel, color = dncol, linewidth = 2)

//Trading
lot = 0.0
lot := strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]
if dot > 0
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = uplevel)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = dnlevel)