이것은 다른 촛불 패턴을 거래 신호로 사용하는 전략입니다. 9개의 일반적인 촛불 패턴을 감지하고 그 패턴에 기반하여 구매 및 판매 신호를 생성할 수 있습니다.
이 전략의 핵심 논리는 도지, 해머, 모닝 스타 등을 포함한 다른 촛불 패턴을 식별하는 것입니다. 상승 패턴이 확인되면 구매 신호가 유발됩니다. 하락 패턴이 확인되면 판매 신호가 유발됩니다.
예를 들어, 3개의 연속 하얀 촛불이 더 높은 최고와 더 높은 최저로 감지되면, 황소 시장을 나타내는 3개의 하얀 병사 신호를 제공합니다. 이 경우 구매 신호가 생성됩니다.
또한, 예를 들어, 긴 하향 촛불이 이전 상승 촛불의 몸체를 완전히 삼키면, 하향 삼키기 패턴을 형성하여 트렌드 반전을 암시합니다. 이 경우 판매 신호가 유발됩니다.
이 유형의 패턴 인식 전략은 단기적 반전 지점을 파악할 수 있으며 특히 단기적 거래에 적합합니다. 정확한 패턴 신호를 식별하면 가격 반전을 적시에 파악하고 수익성 방향으로 갈 수 있습니다.
이동 평균과 같은 간단한 기술 지표 전략과 비교하면 촛불 패턴 전략은 가격 행동과 시장 정서 판단을 통합하여 거래 신호를 더 정확하고 신뢰할 수 있습니다.
이 전략은 주로 촛불 패턴의 정확한 식별에 의존합니다. 검출이 잘못되면 잘못된 거래 신호를 생성하고 손실을 유발하는 것이 쉽습니다.
또한 어떤 기술 분석 전략도 거래에 영향을 줄 수 있는 정책 영향, 블랙 스완 이벤트 등과 같은 체계적 위험을 완전히 피할 수 없습니다.
위험은 스톱 로스로 제어 될 수 있습니다. 가격이 반대 방향으로 범위를 통과 할 때, 스톱 로스는 적시에 진출 지위를 유발할 수 있습니다.
더 효율적인 촛불 패턴은 신호 확인을 위해 Hammer, Inverted Hammer, Separating Lines 등을 추가 할 수 있습니다.
다른 지표는 신호 필터링을 위해 통합 될 수 있으며 불확실한 시장 환경에서 신호를 취하지 않도록합니다. MACD, RSI와 같은 지표의 신호는 낮은 품질의 촛불 신호를 필터링하는 데 사용할 수 있습니다.
스톱 로스 로직은 가격이 반대 방향으로 범위를 벗어날 때 트리거되도록 최적화 할 수 있습니다. 변동성 지표와 결합하여 스톱 로스 범위를 동적으로 조정합니다.
이것은 매우 실용적인 단기 거래 전략입니다. 그것은 거래 신호를 생성하고 단기 반전 기회를 포착하기 위해 일반적인 촛불 패턴을 식별합니다. 또한 잠재적인 위험을 알아보고 위험을 제어하고 효율성을 향상시키기 위해 적절히 최적화해야합니다.
/*backtest start: 2022-12-12 00:00:00 end: 2023-12-18 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 //Dan Pasco strategy("Candlestick Signals Strategy" , shorttitle="Candlestick Signal Strategy $1000", overlay = true , initial_capital = 1000) //Settings input menu dojicon = input(title = "Show Doji's", type=bool, defval = true) gravedojicon = input(title = "Gravestone Doji/Dragonfly Doji", type=bool, defval = true) tbctwscon = input(title = "3 Red Crows/3 Green Soldiers", type=bool, defval = true) tlscon = input(title = "Three Line Strike", type=bool, defval = true) pcon = input(title = "Piercing/Dark Cloud", type=bool, defval = true) mscon = input(title = "Morning Star", type=bool, defval = true) escon = input(title = "Evening Star", type=bool, defval = true) econ = input(title = "Engulfing", type=bool, defval = true) hcon = input(title = "Hammer", type=bool, defval = true) fscon = input(title = "Falling Star", type=bool, defval = true) //Doji Up dojiup = (open-close)>0 ? (high-open)>(open-close) and (close-low)>(open-close) and (close-low)>(high-open) and (open-close)<((high-open)/8) : (open-low)>(close-open) and (high-close)>(close-open) and (open-low)>(high-close) and (close-open)<((high-close)/8) and dojicon == true plotshape(dojiup, style=shape.cross,location=location.belowbar, text="Doji", color=black) //Doji Down dojidown = (open-close)>0 ? (high-open)>(open-close) and (close-low)>(open-close) and (high-open)>(close-low) and (open-close)<((close-low)/8) : (open-low)>(close-open) and (high-close)>(close-open) and (high-close)>(open-low) and (close-open)<((high-close)/8) and dojicon == true plotshape(dojidown, style=shape.cross,location=location.abovebar, text="Doji", color=black) //Gravestone Doji Bull gravedojibull = (close-open)>0 and ((high-close)/8)>(close-open) and ((high-close)/5)>(open-low) and gravedojicon == true plotshape(gravedojibull, style=shape.arrowdown,location=location.abovebar, text="Gravestone Doji", color=red) //Gravestone Doji Bear gravedojibear = (open-close)>0 and ((high-open)/8)>(open-close) and ((high-open)/5)>(close-low) and gravedojicon == true plotshape(gravedojibear, style=shape.arrowdown,location=location.abovebar, text="Gravestone Doji", color=red) //Dragonfly Doji Bull dragondojibull = (close-open)>0 and ((open-low)/8)>(close-open) and ((open-low)/5)>(high-close) and gravedojicon == true plotshape(dragondojibull, style=shape.arrowup,location=location.belowbar, text="Dragonfly Doji", color=green) //Dragonfly Doji Bear dragondojibear = (open-close)>0 and ((close-low)/8)>(open-close) and ((close-low)/5)>(high-open) and gravedojicon == true plotshape(dragondojibear, style=shape.arrowup,location=location.belowbar, text="Dragonfly Doji", color=green) //Three Black Crows tbc = (low[2]<low[3] and low[1]<low[2] and low<low[1] and high[2]<high[3] and high[1]<high[2] and high<high[1] and (close[3]-open[3])>0 and (open[2]-close[2])>0 and (open[1]-close[1])>0 and (open-close)>0 and (open-close)>(close-low) and (open-close)>(high-open) and (open[1]-close[1])>(close[1]-low[1]) and (open[1]-close[1])>(high[1]-open[1]) and (open[2]-close[2])>(close[2]-low[2]) and (open[2]-close[2])>(high[2]-open[2]) and tbctwscon == true) plotshape(tbc, style=shape.arrowdown,location=location.abovebar, text="3 Red Crows", color=red) //Three White Soldiers tws = (high[2]>high[3] and high[1]>high[2] and high>high[1] and low[2]>low[3] and low[1]>low[2] and low>low[1] and (open[3]-close[3])>0 and (close[2]-open[2])>0 and (close[1]-open[1])>0 and (close-open)>0 and (close-open)>(open-low) and (close-open)>(high-close) and (close[1]-open[1])>(open[1]-low[1]) and (close[1]-open[1])>(high[1]-close[1]) and (close[2]-open[2])>(open[2]-low[2]) and (close[2]-open[2])>(high[2]-close[2]) and tbctwscon == true) plotshape(tws, style=shape.arrowup,location=location.belowbar, text="3 Green Soldiers", color=green) //Three Line Strike Up tlsu = ((close-open)>0 and (open[1]-close[1])>0 and (open[2]-close[2])>0 and (open[3]-close[3])>0 and open<close[1] and low[1]<low[2] and low[2]<low[3] and high>high[3] and low<low[1] and tlscon == true) plotshape(tlsu, style=shape.arrowup,location=location.belowbar, text="3 Line Strike", color=green) //Three Line Strike Down tlsd = ((open-close)>0 and (close[1]-open[1])>0 and (close[2]-open[2])>0 and (close[3]-open[3])>0 and open>close[1] and high[1]>high[2] and high[2]>high[3] and low<low[3] and high>high[1] and tlscon == true) plotshape(tlsd, style=shape.arrowdown,location=location.abovebar, text="3 Line Strike", color=red) //Piercing Up pu = ((open[1]-close[1])>0 and (close-open)>0 and (open[1]-close[1])>(high[1]-open[1]) and (open[1]-close[1])>(close[1]-low[1]) and (close-open)>(high-close) and (close-open)>(open-low) and open<close[1] and ((open[1]+close[1])/2)<close and ((close-open)/2)>(high-close) and close<open[1] and (high<high[1] or low>low[1]) and pcon == true) plotshape(pu, style=shape.arrowup,location=location.belowbar, text="Piercing Up", color=green) //Dark Cloud dc = ((close[1]-open[1])>0 and (open-close)>0 and (close[1]-open[1])>(high[1]-close[1]) and (close[1]-open[1])>(open[1]-low[1]) and (open-close)>(high-open) and (open-close)>(close-low) and open>close[1] and ((open[1]+close[1])/2)>close and ((open-close)/2)>(close-low) and close>open[1] and (high<high[1] or low>low[1]) and pcon == true) plotshape(dc, style=shape.arrowdown,location=location.abovebar, text="Dark Cloud", color=red) //Morning Star 1 Up ms1u = ((open[2]-close[2])>0 and (close-open)>0 and (open[1]-close[1])>=0 and (open[2]-close[2])>(high[2]-open[2]) and (open[2]-close[2])>(close[2]-low[2]) and (close-open)>(high-close) and (close-open)>(open-low) and (close-open)>(open[1]-close[1]) and (open[2]-close[2])>(open[1]-close[1]) and open[1]<close[2] and open[1]<open and open[1]!=close[1] and mscon == true) plotshape(ms1u, style=shape.arrowup,location=location.belowbar, text="Morning Star", color=green) //Morning Star 2 Up ms2u = ((open[2]-close[2])>0 and (close-open)>0 and (close[1]-open[1])>=0 and (open[2]-close[2])>(high[2]-open[2]) and (open[2]-close[2])>(close[2]-low[2]) and (close-open)>(high-close) and (close-open)>(open-low) and (close-open)>(close[1]-open[1]) and (open[2]-close[2])>(close[1]-open[1]) and close[1]<close[2] and close[1]<open and open[1]!=close[1] and mscon == true) plotshape(ms2u, style=shape.arrowup,location=location.belowbar, text="Morning Star X2", color=green) //Evening Star 1 Down es1d = ((close[2]-open[2])>0 and (open-close)>0 and (close[1]-open[1])>=0 and (close[2]-open[2])>(high[2]-close[2]) and (close[2]-open[2])>(open[2]-low[2]) and (open-close)>(high-open) and (open-close)>(close-low) and (open-close)>(close[1]-open[1]) and (close[2]-open[2])>(close[1]-open[1]) and open[1]>close[2] and open[1]>open and escon == true) plotshape(es1d, style=shape.arrowdown,location=location.abovebar, text="Evening Star", color=red) //Evening Star 2 Down es2d = ((close[2]-open[2])>0 and (open-close)>0 and (open[1]-close[1])>=0 and (close[2]-open[2])>(high[2]-close[2]) and (close[2]-open[2])>(open[2]-low[2]) and (open-close)>(high-open) and (open-close)>(close-low) and (open-close)>(open[1]-close[1]) and (close[2]-open[2])>(open[1]-close[1]) and close[1]>close[2] and close[1]>open and close[1]!=open[1] and escon == true) plotshape(es2d, style=shape.arrowdown,location=location.abovebar, text="Evening X2", color=red) //Bullish Engulfing beu = (open[1]-close[1])>0 and (close-open)>0 and high>high[1] and low<low[1] and (close-open)>(open[1]-close[1]) and (close-open)>(high-close) and (close-open)>(open-low) and econ == true plotshape(beu, style=shape.arrowup,location=location.belowbar, text="Engulfing", color=green) //Bearish Engulfing bed = (close[1]-open[1])>0 and (open-close)>0 and high>high[1] and low<low[1] and (open-close)>(close[1]-open[1]) and (open-close)>(high-open) and (open-close)>(close-low) and econ == true plotshape(bed, style=shape.arrowdown,location=location.abovebar, text="Engulfing", color=red) //Bullish Hammer Up bhu1 = (close-open)>0 and ((close-open)/3)>(high-close) and ((open-low)/2)>(close-open) and (close-open)>((open-low)/8) and hcon == true plotshape(bhu1, style=shape.arrowup,location=location.belowbar, text="Hammer", color=green) //Bearish Hammer Up bhu2 = (open-close)>0 and ((open-close)/3)>(high-open) and ((close-low)/2)>(open-close) and (open-close)>((close-low)/8) and hcon == true plotshape(bhu2, style=shape.arrowup,location=location.belowbar, text="Hammer", color=green) //Bullish Falling Star bfs1 = (close-open)>0 and ((close-open)/3)>(open-low) and ((high-close)/2)>(close-open) and (close-open)>((high-close)/8) and fscon == true plotshape(bfs1, style=shape.arrowdown,location=location.abovebar, text="Falling Star", color=red) //Bearish Falling Star bfs2 = (open-close)>0 and ((open-close)/3)>(close-low) and ((high-open)/2)>(open-close) and (open-close)>((high-open)/8) and fscon == true plotshape(bfs2, style=shape.arrowdown,location=location.abovebar, text="Falling Star", color=red) //Declaring the buy signals buy = (dragondojibear == true and gravedojicon == true) or (dragondojibull == true and gravedojicon == true) or (tws == true and tbctwscon == true) or (tlsu == true and tlscon == true) or (pu == true and pcon == true) or (ms1u == true and mscon == true) or (ms2u == true and mscon == true) or (beu == true and econ == true) or (bhu1 == true and hcon == true) or (bhu2 == true and hcon == true) //Declaring the sell signals sell = (gravedojibear == true and gravedojicon == true) or (gravedojibull == true and gravedojicon == true) or (tbc == true and tbctwscon == true) or (tlsd == true and tlscon == true) or (dc == true and pcon == true) or (es1d == true and escon == true) or (es2d == true and escon == true) or (bed == true and econ == true) or (bfs1 == true and fscon == true) or (bfs2 == true and fscon == true) //Execute historic backtesting ordersize = floor(strategy.equity/close) // To dynamically calculate the order size as the account equity increases or decreases. strategy.entry("long",strategy.long,ordersize,when=buy) // Buy strategy.close("long", when=sell) //Sell