이 전략은 여러 촛불 패턴 모델을 결합하여 주식을 거래합니다. 그것은 다양한 시장 조건에서 거래 기회를 포착하기 위해 삼키는 패턴, 하라미 패턴 및 하라미 크로스 패턴을 통합합니다.
이 전략의 핵심 논리는 여러 촛불 패턴 인식 규칙을 구축하고 그 다음이 규칙을 결합하여 거래 신호를 생성하는 것입니다.
첫째, 그것은 촛불 몸의 크기, 오픈 가격, 폐쇄 가격 등과 같은 촛불의 특성을 설명하는 몇 가지 기본 변수를 정의합니다.
그 다음 폐쇄 가격과 개시 가격 사이의 관계를 기반으로 3 가지 유형의 거래 바를 정의합니다. 상승을 위해 1, 하락을 위해 -1 및 변하지 않은 경우 0입니다.
이를 바탕으로 3개의 촛불 패턴 인식 규칙을 구성합니다.
포식 패턴: 현재 촛불은 이전 촛불을 포식하고 구매 또는 판매 신호를 생성합니다.
하라미 패턴: 이전 촛불이 현재의 촛불을 삼켜서 구매 또는 판매 신호를 생성합니다.
하라미 크로스 패턴: 하라미와 도지의 조합으로 구매 또는 판매 신호를 생성합니다.
이러한 촛불 패턴에 따라 구매 및 판매의 시기를 결정할 수 있습니다. 거래 시간 범위 제한과 같은 유효하지 않은 신호를 필터링하기 위해 몇 가지 추가 조건이 결합됩니다.
거래 논리는 먼저 기존 포지션을 확인합니다. 신호 방향과 모순되는 경우, 먼저 현재 포지션을 닫고 신호에 따라 새로운 포지션을 열 것입니다.
조합은 안정성을 향상시킵니다. 단일 패턴은 특정 시장 조건에 취약합니다. 조합은 신뢰성을 향상시킬 수 있습니다.
확인은 정확도를 높이고 다른 패턴이 서로를 확인합니다. 잘못된 신호를 피할 수 있습니다.
유연성: 사용자들은 다양한 시장 역동성에 따라 모델을 자유롭게 조합하고 매개 변수를 조정할 수 있습니다.
리스크 관리. 스톱 로스 및 포지션 처리 로직은 위험을 효과적으로 관리합니다.
복잡성. 더 많은 매개 변수는 더 많은 복잡성을 의미합니다. 부적절한 조합은 성능을 약화시킬 수 있습니다.
매개 변수 조정에는 전문성이 필요하고 적절한 패턴 매개 변수를 설정하는 데는 경험이 필요합니다.
일방적인 보유 위험. 길거나 짧은 이익 잠재력을 제한합니다. 길거나 짧은 둘 다 허용 할 수 있습니다.
역전 지점 을 놓치고 있다. 패턴 에 초점을 맞추는 것 은 트렌드 역전 신호 를 볼 수 없게 한다. 다른 지표 를 추가 하는 것 은 잠재적 인 역전 지점 을 식별 하는 데 도움 이 될 수 있다.
지연 위험을 줄이기 위해 스톱 로스를 추가합니다.
전체 트렌드를 결정하기 위해 다른 기술적 지표를 포함하고 주요 트렌드에 반대하는 거래를 피합니다. 예를 들어 MACD, 볼링거 밴드 등.
다른 제품에서 테스트 모델 매개 변수를 설정하고 각 제품에 맞는 최적의 매개 변수 세트를 설정합니다.
인공지능을 이용한 매개 변수 및 패턴 인식 최적화를 위해 기계 학습을 도입합니다.
이 전략은 여러 촛불 패턴을 결합하여 비교적 안정적인 단기 거래 시스템을 구축합니다. 그러나 매개 변수 조정 및 위험 통제는 더 복잡한 시장에 적응하기 위해 여전히 개선이 필요합니다. 전반적으로 충분한 데이터와 경험을 축적하고 지능적인 최적화를 위해 머신 학습을 활용한 후 탄탄한 논리를 가지고 있으며 큰 잠재력을 가지고 있습니다.
/*backtest start: 2022-10-10 00:00:00 end: 2023-10-16 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=3 strategy(title = "Noro's CandleModels Tests", shorttitle = "CandleModels tests", 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") eng = input(true, defval = true, title = "Model Engulfing") har = input(true, defval = true, title = "Model Harami") harc = input(true, defval = true, title = "Model Harami Cross") 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") rev = input(false, defval = false, title = "Reversive trading") //Body body = abs(close - open) abody = sma(body, 10) //MinMax Bars min = min(close, open) max = max(close, open) //Signals bar = close > open ? 1 : close < open ? -1 : 0 doji = body < abody / 10 up1 = eng and bar == 1 and bar[1] == -1 and min <= min[1] and max >= max[1] dn1 = eng and bar == -1 and bar[1] == 1 and min <= min[1] and max >= max[1] up2 = har and bar == 1 and bar[1] == -1 and min >= min[1] and max <= max[1] dn2 = har and bar == -1 and bar[1] == 1 and min >= min[1] and max <= max[1] up3 = harc and doji and bar[1] == -1 and low >= min[1] and high <= max[1] dn3 = harc and doji and bar[1] == 1 and low >= min[1] and high <= max[1] exit = ((strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1)) and body > abody / 2 and rev == false //Trading if up1 or up2 or up3 if strategy.position_size < 0 strategy.close_all() strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if dn1 or dn2 or dn3 if strategy.position_size > 0 strategy.close_all() strategy.entry("Short", strategy.short, needshort == false ? 0 : na, 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()