다중 시간 프레임 브레이크아웃 전략


생성 날짜: 2023-12-29 16:17:56 마지막으로 수정됨: 2023-12-29 16:18:22
복사: 0 클릭수: 632
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

다중 시간 프레임 브레이크아웃 전략

개요

다중 시간 프레임 브레이킹 전략은 두 개의 다른 시간 프레임에 대한 가격 브레이킹 신호를 조합하여 더 신뢰할 수있는 거래 신호를 생성합니다. 이 전략은 동시에 1 시간, 2 시간, 3 시간 등의 짧은 시간 프레임과 4 시간, 일선과 같은 더 긴 시간 프레임에 대한 가격 브레이킹 신호를 계산합니다. 두 시간 프레임의 신호가 동시화되면 구매 또는 판매 신호를 생성하여 해당 방향의 거래를 수행합니다.

전략 원칙

이 전략의 핵심 논리는 두 개의 다른 시간 프레임에 대해 가격 돌파 신호를 각각 계산하고, 그 다음에 매칭 필터를 수행하는 것입니다. 구체적으로, 전략은 짧은 시간 프레임 (예를 들어 1 시간 라인) 에서 가격이 지정된 수준을 돌파했는지 여부를 계산하며, 더 긴 시간 프레임 (예를 들어 4 시간 라인) 에서도 가격 돌파가 지정된 수준을 계산합니다. 두 시간 프레임의 돌파 신호 방향이 일치하는 경우에만, 즉 두 시간 프레임에서 가격이 지정된 수준을 돌파하거나 넘어가는 경우에만, 전략은 거래 신호를 생성합니다.

구매 신호를 생성하는 조건은, 짧은 시간 프레임과 긴 시간 프레임의 종결 가격 또는 최저 가격이 모두 해당 가격 수준을 돌파하는 것입니다. 판매 신호를 생성하는 조건은, 짧은 시간 프레임과 긴 시간 프레임의 종결 가격 또는 최고 가격이 모두 해당 가격 수준을 돌파하는 것입니다. 전략은 이러한 다중 시간 프레임 매칭 방식을 통해 일부 가짜 신호를 필터링하여 신호를 더 신뢰할 수 있습니다.

우위 분석

이 전략의 가장 큰 장점은 거래 신호의 신뢰성이 높다는 것입니다. 두 시간 프레임 모두에서 가격의 돌파구를 요구함으로써 일부 잡음을 효과적으로 제거하고 잘못된 거래를 방지 할 수 있습니다. 또한, 다른 시간 프레임의 돌파구 신호는 서로 확인하여 거래 기회를 더 효율적으로 만들 수 있습니다. 또한, 이 전략은 두 개의 조합으로 사용되는 시간 프레임과 데이터 소스를 선택할 수 있는 약간의 유연성을 제공하며 사용자는 자신의 필요에 따라 조정할 수 있습니다.

위험 분석

이 전략의 주요 위험은, 시장이 평온한 Zeit 기간에, 두 시간 프레임의 가격이 돌파구가 발생하지 않는 경우가 많습니다. 이 경우, 전략은 거래 신호를 생성하지 않을 것이며, 거래 기회를 놓칠 수 있습니다. 또한, 두 시간 프레임 사이에 약간의 지연이 존재하여 신호의 효율성이 떨어질 수 있습니다. 또한, 전략은 스톱 로직을 설정하지 않고, 큰 위험이 있습니다.

최적화 방향

이 전략은 다음과 같은 몇 가지 측면에서 최적화 할 수 있습니다: 1) 위험을 제어하기 위해 스톱 로직을 추가하십시오; 2) 거래 효율성을 높이기 위해 시간 프레임의 조합을 최적화하십시오; 3) 거래 신호를 더 엄격하게 만들기 위해 더 많은 시간 프레임의 조합을 추가하십시오; 4) 다른 지표와 함께 필터링을 수행하여 신호 품질을 향상하십시오; 5) 수익을 더 잘 제어하기 위해 Exiting 메커니즘을 개발하십시오.

요약하다

다중 시간 프레임 브레이크 전략은 두 시간 프레임의 가격 브레이크 상황을 비교하여 신호 품질을 향상시키는 것으로, 비교적 신뢰할 수 있는 트렌드 추적 전략이다. 그러나 또한 지속적인 최적화를 통해 안정적이고 신뢰할 수 있는 양적 거래 전략이 될 수 있는 몇 가지 결함이 있다.

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

//Noro
//2018

//@version=3
strategy(title = "Noro's Levels Strategy v1.1", shorttitle = "Levels str 1.1", 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, %")
tf1 = input('W', title = "timeframe 1")
tf2 = input('D', title = "timeframe 2")
src = input(ohlc4, "Source")
ap = input(true, defval = true, title = "use saw filter")
cf = input(true, defval = true, title = "гыу color filter")
showlines = input(true, defval = true, title = "Show lines")
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")

//Levels
level1 = request.security(syminfo.tickerid, tf1, src)
level2 = request.security(syminfo.tickerid, tf2, src)
col = showlines ? silver : na
p1 = plot(level1, linewidth = 3, color = col, title = "Level 1")
p2 = plot(level2, linewidth = 3, color = col, title = "Level 2")

//Signals
up1 = close > level1 and ap == false ? true : low > level1 ? true : false
dn1 = close < level1 and ap == false ? true : high < level1 ? true : false
up2 = close > level2 and ap == false ? true : low > level2 ? true : false
dn2 = close < level2 and ap == false ? true : high < level2 ? true : false

//Trading
size = strategy.position_size
lot = 0.0
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]

if up1 and up2 and (close < open or cf == false)
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if dn1 and dn2 and (close > open or cf == false)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()