다모델 촛불 패턴 조합 전략

저자:차오장, 날짜: 2023-10-17 15:53:06
태그:

img

전반적인 설명

이 전략은 여러 촛불 패턴 모델을 결합하여 주식을 거래합니다. 그것은 다양한 시장 조건에서 거래 기회를 포착하기 위해 삼키는 패턴, 하라미 패턴 및 하라미 크로스 패턴을 통합합니다.

원칙

이 전략의 핵심 논리는 여러 촛불 패턴 인식 규칙을 구축하고 그 다음이 규칙을 결합하여 거래 신호를 생성하는 것입니다.

첫째, 그것은 촛불 몸의 크기, 오픈 가격, 폐쇄 가격 등과 같은 촛불의 특성을 설명하는 몇 가지 기본 변수를 정의합니다.

그 다음 폐쇄 가격과 개시 가격 사이의 관계를 기반으로 3 가지 유형의 거래 바를 정의합니다. 상승을 위해 1, 하락을 위해 -1 및 변하지 않은 경우 0입니다.

이를 바탕으로 3개의 촛불 패턴 인식 규칙을 구성합니다.

  1. 포식 패턴: 현재 촛불은 이전 촛불을 포식하고 구매 또는 판매 신호를 생성합니다.

  2. 하라미 패턴: 이전 촛불이 현재의 촛불을 삼켜서 구매 또는 판매 신호를 생성합니다.

  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()

더 많은