
이 전략은 가격 통로 기반의 브레이크 전략 이라고 명명되어 있으며, 주요 아이디어는 가격 통로를 사용하여 시장의 추세와 방향을 판단하고, 가격이 통로를 돌파 할 때 위치를 설정하는 것입니다. 그것은 먼저 가격의 통로의 범위를 그리고, 그 다음 K 라인이 연속적으로 두 개의 빨간색 또는 녹색 K 라인이 나타나는지 판단합니다. 마지막 K 라인이 통로의 절반 이상을 돌파하고 통로를 벗어나면 구매 또는 판매 신호를 발생시킵니다.
이 전략은 highest() 과 lowest() 함수를 사용하여 과거 일정 주기 동안의 최고 가격과 최저 가격을 계산하여 가격 채널의 상하 궤도를 결정한다. 채널의 중간선은 상하 궤도의 평균값으로 정의된다. 그리고 K선 엔터티의 크기를 계산하고, SMA를 통해 평형화하여 마지막 K선 엔터티가 평균 엔터티의 절반보다 크는지 판단한다. 또한 마지막 두 K선 엔터티가 동방향인지 판단한다.
이것은 가격 통로를 이용한 트렌드를 판단하는 획기적인 전략입니다. 다음과 같은 장점이 있습니다:
가격 채널을 사용하여 전체 트렌드 방향을 판단하여 시장 소음을 효과적으로 필터링 할 수 있습니다.
연속으로 두 개의 K선 동방향 돌파 통로가 있어 동력이 강하고 돌파 성공률이 높다는 것을 나타낸다.
K선 엔티티가 평균 엔티티의 절반을 넘는다고 판단하면, 가짜 돌파구 속임수를 피할 수 있다.
전략적 논리는 간단하고 이해하기 쉽고 실행하기 쉽다.
커스터마이징 가능한 매개 변수들, 통로 주기, 거래 종류, 거래 시간 등, 적응성이 강하다.
이 전략에는 몇 가지 잠재적인 위험도 있습니다.
파격 실패의 가능성은 여전히 존재하며, 손실이 발생할 수 있습니다.
이 사건의 진전과 변동에 따라 통로 판단은 무효가 될 수 있습니다.
손실을 통제할 수 없는 제약이 없습니다.
간단한 거래 규칙, 과잉 맞춤의 위험.
더 복잡한 시장 환경에 적응할 수 없습니다.
대응방법은 다음과 같습니다.
개척 성공률을 높이기 위한 최적화 매개 변수
변동성 지표에 가입하여, 흔들림 현상을 피하십시오.
모바일 스톱로스 설정을 추가한다.
복잡성 테스트를 실시하고, 적합성을 확인한다.
기계 학습 알고리즘을 추가하고, 전략의 적응성을 향상시킵니다.
이 전략의 최적화 방향은 다음과 같습니다.
손해 제도를 추가하여 위험을 더 잘 제어할 수 있다. 가격 회귀 손해를 설정할 수도 있고, ATR과 같은 지표를 사용하여 이동 손해를 설정할 수도 있다.
최적화 매개 변수, 통로 주기, 돌파폭 매개 변수 등. 유전자 알고리즘, 격자 검색 등으로 최적의 매개 변수를 찾을 수 있다.
필터링 조건을 추가하여 브레이크의 확실성을 높여줍니다. 예를 들어 거래량과 결합하여 브레이크를 확인 할 수 있습니다.
기계 학습 모델을 추가하여 더 많은 데이터를 사용하여 전략의 예측 능력과 적응력을 향상시킵니다. 예를 들어 LSTM와 같은 딥 러닝은 더 복잡한 상황 패턴을 캡처 할 수 있습니다.
포트폴리오를 최적화하여 다양한 유형의 돌파구 전략을 조합하여 정교화를 실현하고 유사성을 줄입니다.
이 전략은 전체적으로 가격 통로 판단 트렌드를 기반으로, 돌파 신호를 발견하는 정량화 전략이다. 그것은 판단 트렌드를 가지고, 돌파를 확인하는 장점이 있지만, 일부 가짜 돌파의 위험도 존재한다. 우리는 매개 변수 최적화, 손해 중지 설정, 조건 필터링을 추가하는 방법과 같은 방법을 통해 전략을 개선하여 위험을 줄일 수 있다. 또한 기계 학습 모델을 추가하는 것은 전략의 예측 능력을 더욱 향상시킬 수 있다.
/*backtest
start: 2023-12-16 00:00:00
end: 2024-01-15 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.0", shorttitle = "Price Channel str 1.0", 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")
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
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
//Signals
body = abs(close - open)
abody = sma(body, 10)
up = rbars and close > center and body > abody / 2
dn = gbars and close < center and body > abody / 2
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2
//Trading
if up
if strategy.position_size < 0
strategy.close_all()
strategy.entry("Long", strategy.long, needlong == false ? 0 : na)
if dn
if strategy.position_size > 0
strategy.close_all()
strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
if exit
strategy.close_all()