모멘텀 브레이크업 거래 전략

저자:차오장, 날짜: 2023-09-18 21:28:22
태그:

개요

이 전략은 동력 지표인 브린밴드를 이용해서 브린밴드를 깨는 거래를 하는데, 주로 가격이 브린밴드를 깨고 파는 신호를 보내는지 판단한다.

원리

이 전략은 주로 브린밴드 지표의 경향 방향을 판단하는 데에 기초한다. 브린밴드는 이동 평균선과 그 표준편차로 구성된 띠 모양의 영역이다. 브린밴드 중선은 n일 이동 평균선이며, 상승선은 중간선 +2배 표준편차이며, 하향선은 중간선 +2배 표준편차이다. 가격은 상승선에 가까워지면 과잉 구매, 추락선에 가까워지면 과잉 판매이다.

구체적으로, 전략은 먼저 n일간의 최고가격, 최저가격, 그리고 중간가를 계산한다. 그 다음 종결가격과 중간가격의 거리의 가중화 이동평균을 계산하여 브린 밴드 중선을 구성하고, 중선을 아래로 두 배의 표준차이를 추가하여 하향선을 구성한다.

마감 가격이 궤도를 돌파하면 상승 추세를 나타냅니다. 궤도를 돌파하면 하락 추세를 나타냅니다. 궤도를 돌파하면 더 많이하고, 궤도를 돌파하면 공백합니다.

또한, 전략은 리버스 오픈 메커니즘을 도입했다. 가격이 브린 밴드를 경유할 때, MACD가 하락하는 경우, 역시장 작업을 수행한다.

장점

  1. 브린밴드를 사용하여 트렌드 방향을 판단하고, 특정 트렌드 추적 능력을 가지고 있습니다.

  2. 역동적인 오픈 디자인은 역동적인 수익을 얻을 수 있습니다.

  3. 브린밴드 주기, 표준차 배수 등 파라미터를 사용자 정의하여 다른 주기에 맞게 거래할 수 있다.

  4. 이 경우 리버스 오픈을 닫을 수 있으며 위험을 줄일 수 있습니다.

위험과 대책

  1. 브린밴드는 종종 높은 휘발성 주식에서 사용되며, 주기 긴 자원이나 지수와 같은 품종에 적합하지 않을 수 있습니다.

  2. 파헤치는 신호는 가짜 파헤치는 신호가 될 수 있습니다. 다른 요소와 함께 신호를 필터링 할 수 있습니다.

  3. 리버스 오피닝은 손실을 더 확장시킬 수 있다. 리버스 오피닝 모듈을 닫을 수 있다.

  4. 회수량은 더 커질 수 있습니다.

최적화 방향

  1. 트렌드 필터링을 추가하는 것을 고려하여 불확실한 방향의 불안한 시장을 피할 수 있습니다.

  2. 브린밴드 표준차분배수를 테스트하여 더 적합한 매개 변수를 찾을 수 있습니다.

  3. 단 1개의 손실을 통제하기 위해 손해를 막는 전략을 도입할 수 있습니다.

  4. 거래 신호를 더 명확하게 만들기 위해 포지션 오픈 및 포지션 올림 논리를 최적화 할 수 있습니다.

요약

이 전략은 브린을 기반으로 한 지표로 가격 트렌드 브레이크를 판단하여 거래를 수행합니다. 간단한 매개 변수 설정으로 기본적인 트렌드 추적 전략을 구현 할 수 있습니다. 그러나 특정 허위 브레이크 위험이 있으며 다른 지표와 함께 필터링이 필요합니다. 매개 변수 설정, 중지 손실 전략 등을 추가로 최적화하여 위험을 제어 할 수 있습니다.

전반적인 설명

이 전략은 브레이크아웃 거래를 위해 볼링거 밴드 (Bollinger Bands) 동력 지표를 사용하며, 주로 거래 신호를 위해 가격이 상위 또는 하위 볼링거 밴드 (Bollinger Bands) 를 통과하는지 판단합니다.

원칙

이 전략은 주로 경향 방향을 결정하기 위해 볼링거 밴드 지표에 기반합니다. 볼링거 밴드는 이동 평균과 표준 편차로 정의된 상부/하부 밴드를 기반으로 한 중간 밴드로 구성됩니다. 중간 밴드는 n 기간 이동 평균, 상부 밴드는 중간 밴드 + 2 표준 편차, 하부 밴드는 중간 밴드 - 2 표준 편차입니다. 가격이 상부 밴드에 접근하면 과잉 구매 조건을 나타냅니다. 하부 밴드에 접근하면 과잉 판매 조건을 신호합니다.

구체적으로, 전략은 먼저 지난 n 기간 동안 가장 높은 최고와 가장 낮은 낮은 계산, 그리고 중간 가격 ((최고의 최고 + 가장 낮은 낮은) / 2). 그것은 다음 닫기 가격과 중간 가격 사이의 거리를 계산, 중간 밴드를 형성하는 거리의 기하급수적인 이동 평균을 사용, 그리고 더하기 / 아래 2 번 표준 편차를 더하고 / 빼어 상위와 하위 밴드를 형성합니다.

클로즈 가격이 상위 대역을 넘어서면 상승 추세를 나타냅니다. 하위 대역을 넘어서면 하향 추세를 나타냅니다. 상위 대역이 넘어가면 전략은 길고 하위 대역이 넘어가면 짧습니다.

또한, 전략은 역동 추세 메커니즘을 포함합니다. 가격이 상단 범위를 깨고 MACD가 떨어지면 역동 추세 짧은 지위를 취합니다.

장점

  1. 경향 방향을 결정하기 위해 볼링거 밴드를 사용하는 것은 특정 트렌드를 추적하는 능력을 제공합니다.

  2. 역동적 트렌드 디자인은 역전에서 이익을 얻을 수 있습니다.

  3. 기간과 표준편차 배수와 같은 사용자 정의 가능한 매개 변수로 인해 다른 거래 지평에 적응 할 수 있습니다.

  4. 리스크를 줄이기 위해 반대 트렌드 거래를 비활성화하십시오.

위험 및 완화

  1. 볼링거 밴드는 높은 변동성 주식에서 가장 잘 작동하지만 안정적인 상품이나 지수에 적합하지 않을 수 있습니다. 다른 기간 매개 변수를 테스트 할 수 있습니다.

  2. 파업 신호에는 거짓 파업 신호가 있을 수 있습니다. 다른 지표와 필터를 추가할 수 있습니다.

  3. 반동향 거래는 손실을 더 증가시킬 수 있습니다. 반동향 모듈을 비활성화 할 수 있습니다.

  4. 마감액이 크기도 하고 포지션 크기를 조정할 수도 있습니다.

더 나은 기회

  1. 방향이 아닌 시장에서 윙톱을 피하기 위해 트렌드 필터를 추가하는 것을 고려하십시오.

  2. 최적의 매개 변수를 찾기 위해 다른 표준편차 배수를 테스트합니다.

  3. 단일 거래 손실을 통제하기 위해 스톱 손실을 포함합니다.

  4. 더 명확한 거래 신호를 위해 입력 및 추가 논리를 최적화하십시오.

요약

이 전략은 볼링거 밴드를 주요 지표로 사용하고 트렌드 브레이크아웃을 기반으로 거래합니다. 간단한 매개 변수로 기본 트렌드 다음 기능을 제공합니다. 그러나 잘못된 브레이크아웃 위험이 존재하여 추가 필터가 필요합니다. 매개 변수, 스톱 로스 및 리스크 컨트롤이 향상 될 수 있습니다. 전반적으로 합리적인 기본 브레이크아웃 전략으로 사용됩니다.


/*backtest
start: 2023-08-18 00:00:00
end: 2023-09-17 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy("Noro's Bands Scalper Strategy v1.6", shorttitle = "Scalper str 1.6", 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")
takepercent = input(0, defval = 0, minval = 0, maxval = 1000, title = "take, %")
needbe = input(true, defval = true, title = "Bands Entry")
needct = input(false, defval = false, title = "Counter-trend entry")
bodylen = input(10, defval = 10, minval = 0, maxval = 50, title = "Body length")
trb = input(1, defval = 1, minval = 1, maxval = 5, title = "Trend bars")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
needbb = input(true, defval = true, title = "Show Bands")
needbg = input(true, defval = true, title = "Show Background")
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")
src = close

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

//Distance
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd2 = center + distsma * 2
ld2 = center - distsma * 2

//Trend
chd = close > hd
cld = close < ld
uptrend = trb == 1 and chd ? 1 : trb == 2 and chd and chd[1] ? 1 : trb == 3 and chd and chd[1] and chd[2] ? 1 : trb == 4 and chd and chd[1] and chd[2] and chd[3] ? 1 : trb == 5 and chd and chd[1] and chd[2] and chd[3] and chd[4] ? 1 : 0
dntrend = trb == 1 and cld ? 1 : trb == 2 and cld and cld[1] ? 1 : trb == 3 and cld and cld[1] and cld[2] ? 1 : trb == 4 and cld and cld[1] and cld[2] and cld[3] ? 1 : trb == 5 and cld and cld[1] and cld[2] and cld[3] and cld[4] ? 1 : 0
trend = dntrend == 1 and high < center ? -1 : uptrend == 1 and low > center ? 1 : trend[1]

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

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

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

//Body
body = abs(close - open)
smabody = ema(body, 30) / 10 * bodylen

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up7 = trend == 1 and ((bar == -1 and bar[1] == -1) or (body > smabody and bar == -1)) ? 1 : 0
dn7 = trend == 1 and ((bar == 1 and bar[1] == 1) or (close > hd and needbe == true)) and close > strategy.position_avg_price * (100 + takepercent) / 100 ? 1 : 0
up8 = trend == -1 and ((bar == -1 and bar[1] == -1) or (close < ld2 and needbe == true)) and close < strategy.position_avg_price * (100 - takepercent) / 100 ? 1 : 0
dn8 = trend == -1 and ((bar == 1 and bar[1] == 1) or (body > smabody and bar == 1)) ? 1 : 0

if up7 == 1 or up8 == 1 
    strategy.entry("Long", strategy.long, needlong == false ? 0 : trend == -1 and needct == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, 01, 00, 00) and time < timestamp(toyear, tomonth, 31, 00, 00)))

if dn7 == 1 or dn8 == 1
    strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, 01, 00, 00) and time < timestamp(toyear, tomonth, 31, 00, 00)))
    
if time > timestamp(toyear, tomonth, 31, 00, 00)
    strategy.close_all()

더 많은