노로
이 전략은 먼저 중간 가격 채널을 구축하기 위해 특정 기간 동안 가장 높고 가장 낮은 가격의 평균을 계산합니다. 가격이 아래에서 채널을 넘어서면 긴 신호로 간주됩니다. 가격이 위에서 채널 아래로 떨어지면 짧은 신호로 간주됩니다.
동시에 전략은 두 가지 보조 규칙을 포함합니다. 빠른 RSI와 촛불 색상. 빠른 RSI가 25% 이하이면 과판 상태와 가격이 회복될 수 있음을 나타냅니다. 채널 위의 브레이크오웃과 함께 이것은 더 강한 긴 신호를 생성합니다. 반대로 빠른 RSI가 75% 이상이면 과반 상태와 가격이 떨어질 수 있음을 나타냅니다. 채널 아래의 파열과 함께 이것은 더 강한 짧은 신호를 생성합니다. 또한 전략은 최근 두 개의 촛불에서 촛불 색상의 변화를 추적합니다. 두 개의 연속적 빨간 촛불이 짧은 신호를 향상시키고 두 개의 연속적 녹색 촛불이 긴 신호를 향상시킵니다.
이 세 가지 신호 지표 를 결합 함 으로써, 전략 은 중장기 경향 을 효과적으로 식별 하고 그에 따라 위치 를 설정 할 수 있다. 위치 방향 이 최신 촛불 의 색상 과 충돌 할 때, 기존 위치 가 폐쇄 되는 경향 역전 으로 간주 된다.
이 전략의 가장 큰 장점은 트렌드 방향을 결정하고 단기 시장 변동의 소음을 피하기 위해 여러 지표를 통합하는 것입니다. 구체적으로:
가격 채널은 트렌드 방향과 강도를 명확하게 파악합니다. 채널 밴드의 파업은 강력한 신호로 트렌드의 새로운 단계를 나타냅니다.
빠른 RSI 는 전환점 에서 추세 를 쫓는 것 을 피 하기 위해 과잉 구매/ 과잉 판매 상태 를 판단 합니다. 과잉 판매 상태 에서 구매 하고 과잉 구매 상태 에서 판매 하는 것 을 제안 합니다.
촛불 색상 검증은 추세 지속성을 확인합니다. 색상이 변경되면 포지션은 닫습니다.
이 전략은 단기 오스실레이션의 잘못된 신호를 피하는 채널을 깨는 두 개의 같은 색의 촛불을 연속으로 입력합니다.
간단한 평균 스톱 로스는 촛불 색상이 바뀌면 포지션을 닫아 손실을 효과적으로 최소화합니다.
이 전략에는 몇 가지 위험 요소가 있습니다.
부적절한 가격 채널 매개 변수 설정으로 인해 채널이 너무 넓거나 너무 좁거나 트렌드 변화 지점을 놓치거나 과도한 잘못된 신호를 생성할 수 있습니다.
부적절한 빠른 RSI 매개 변수 설정은 과잉 구매/ 과잉 판매 조건을 정확하게 식별하지 못할 수 있으며, 따라서 반전 기회를 놓칠 수 있습니다.
간단한 스톱 로스 메커니즘은 불안정한 트렌드에 너무 민감하여 과도한 포지션 개척 및 폐쇄를 유발할 수 있습니다.
가격 채널을 뚫고도 실제 추세의 지속을 예측할 수 없고 이로 인해 손실이 커질 수 있습니다.
그것은 갑자기 시장에 영향을 미치는 블랙 스완 사건에 적응할 수 없습니다. 엄청난 손실로 이어집니다.
전략 강화의 주요 기회는 다음과 같습니다.
가격 채널 매개 변수를 동적으로 조정하여 다른 기간과 시장의 변동성에 더 잘 적응합니다.
높은 변동성에서 감수성을 낮추고 낮은 변동성에서 감수성을 높이는 RSI 매개 변수를 조정하기 위한 변동성 조치를 포함합니다.
트렌드 변동성에 기반한 스톱 레벨을 가진 트래일링 스톱 메커니즘을 추가하여 과민적인 스톱 아웃을 피합니다.
허위 파업을 피하기 위해 파업 강도와 하락/승등 오차의 식별을 개선합니다.
높은 확률의 트렌드 전환점을 추정하고 입력 정확도를 향상시키기 위해 역사 데이터 훈련 모델을 통합합니다.
위험 조건에 따라 할당을 동적으로 조정하기 위해 포지션 사이징 모델을 최적화합니다.
전체적으로 노로
/*backtest start: 2023-09-23 00:00:00 end: 2023-10-23 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's Price Channel Strategy v1.1", shorttitle = "Price Channel 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") usecol = input(true, defval = true, title = "Use color strategy") usersi = input(true, defval = true, title = "Use RSI strategy") lev = input(1, defval = 1, minval = 1, maxval = 100, title = "leverage") pch = input(30, defval = 30, minval = 2, maxval = 200, title = "Price Channel") showcl = input(true, defval = true, title = "Show center-line") 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") src = close //Price channel lasthigh = highest(src, pch) lastlow = lowest(src, pch) center = (lasthigh + lastlow) / 2 trend = low > center ? 1 : high < center ? -1 : trend[1] col = showcl ? blue : na plot(center, color = col, linewidth = 2) //Bars bar = close > open ? 1 : close < open ? -1 : 0 rbars = sma(bar, 2) == -1 gbars = sma(bar, 2) == 1 //Fast RSI fastup = rma(max(change(src), 0), 2) fastdown = rma(-min(change(src), 0), 2) fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown)) //Signals body = abs(close - open) abody = sma(body, 10) up1 = rbars and close > center and usecol dn1 = gbars and close < center and usecol up2 = fastrsi < 25 and close > center and usersi dn2 = fastrsi > 75 and close < center and usersi exit = (((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2) lot = strategy.equity / close * lev //Trading if up1 or up2 if strategy.position_size < 0 strategy.close_all() 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 or dn2 if strategy.position_size > 0 strategy.close_all() 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) or exit strategy.close_all()