
이 전략은 여러 개의 형 모델을 조합하여 주식 거래를 수행한다. 이 전략은 패키지 라인 모델, 공허 모델, 그리고 십자별 모델을 결합하여 다양한 시장 조건에서 거래 기회를 잡을 수 있다.
이 전략의 핵심적인 논리는 여러 개의 형 판단 규칙을 구성하고, 그 다음에는 거래 신호를 생성하기 위해 이 규칙을 통합하는 것이다.
첫째, 그것은 선의 속성을 설명하는 몇 가지 기본 변수를 정의합니다. 예를 들어, 개체 크기, body, 오픈 가격, 클로즈 가격 등이 있습니다.
그 다음, 그것은 의 닫기 가격과 열기 가격의 관계에 따라, 3개의 트레이딩 바 유형을 정의합니다: 1은 을 나타냅니다, -1은 하락을 나타냅니다, 0은 하락하지 않습니다.
그리고 그 기초에 세 가지의 형 판단 규칙을 세웠습니다.
패키지 라인 모델 (Engulfing Pattern): 현재 K 라인이 상위 K 라인을 포괄하여 구매 또는 판매 신호를 생성한다.
공허한 모형 (空心模様, Harami Pattern): 상위 K선이 현재 K선을 포괄하여 구매 또는 판매 신호를 발생시킨다.
십자성 모형 (Harami Cross Pattern): 빈 중심 칸과 십자성 모형의 조합으로 구매 또는 판매 신호를 생성한다.
이러한 형태 규칙에 따라 구매와 판매의 시간을 결정할 수 있으며, 거래 시간 범위 제한과 같은 몇 가지 추가 조건을 결합하여 요구 사항에 부합하지 않는 거래 신호를 필터링 할 수 있습니다.
거래 부분에서, 먼저 포지션 보유 상황을 판단하고, 신호의 방향과 반대되는 경우, 먼저 포지션을 청산하고, 그 다음 신호의 방향에 따라 포지션을 개설한다.
여러 형태가 결합되어 안정성이 강하다. 단일 형태는 특정 시장 환경에 영향을 많이 받을 수 있으며, 조합으로 사용되는 형태는 안정성을 높일 수 있다.
같은 방향의 형태를 확인하고, 종합적인 판단을 하고, 잘못된 판단을 피한다. 다른 형태 모델은 다른 각도에서 경향을 판단하고, 서로 신호를 검증할 수 있다.
매개 변수 조정 가능, 적응력이 강하다. 사용자는 다양한 형태 모델을 자유롭게 조합하고 거래 시간 범위를 조정할 수 있으며 시장 변화에 유연하게 대응할 수 있다.
완벽한 거래 논리. 포지션 판단과 손실 퇴출 논리를 결합하여 위험을 효과적으로 제어 할 수 있습니다.
다중 변수 조합은 복잡성을 증가시킨다. 각 변수 조합의 일치성을 테스트해야 하며, 부적절한 변수 조합은 효과를 떨어뜨릴 수 있다.
shape 파라미터를 설정하는 것은 경험에 의존한다. shape 파라미터는 실물 크기가 적당할지 여부를 조정하기 위해 경험을 축적해야 한다.
일방적인 포지션 보유로 인한 위험. 오버도 또는 오브도 해주는 것은 수익을 얻을 수 있는 공간을 제한한다. 파라미터를 설정하여 동시에 오버도 할 수 있다.
트렌드 반전 지점을 놓칠 수 있다. 이 전략은 형태 인식에 주력하여 트렌드 반전을 효과적으로 판단할 수 없다. 다른 지표와 함께 시기를 판단할 수 있다.
단독 포지션의 위험성을 낮추기 위해 손실을 막는 전략을 추가하십시오.
다른 기술 지표와 결합하여, 큰 트렌드 방향을 판단하고, 역동 거래를 피하십시오. MACD, Bollinger Band 등등.
다양한 품종의 파라미터 선호를 테스트하고, 다양한 품종에 적합한 형태적 조합을 구축한다.
기계 학습 알고리즘을 추가하여 AI를 통해 변수 최적화 및 형태 인식을 보조합니다.
이 전략은 여러 종류의 형태의 장점을 종합적으로 활용하여 비교적 안정적이고 신뢰할 수 있는 단선 거래 시스템을 구축한다. 그러나 일부 파라미터 설정 및 위험 제어는 더 복잡한 시장 환경에 적응하기 위해 추가적으로 최적화되어야 한다. 전체적으로 이 전략은 합리적인 사고방식이며, 충분한 경험과 데이터를 축적하여 기계 학습과 같은 수단을 통해 지능적으로 최적화하면 전망이 넓다.
/*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()