이 전략은 상승/하락 그림자 길이의 비율을 계산하여 현재 트렌드 방향을 판단하고 ATR 지표로 트렌드를 식별합니다. 브레이크아웃 포인트에서 역 포지션을 열고 단기 트렌드를 포착하기 위해 손해를 멈추고 이익을 설정합니다.
이 전략은 주로 상승세/하락세 그림자 비율을 계산하여 현재 경향을 판단합니다. 긴 하락세가 하락세를 나타내고 긴 상승세가 상승세를 나타냅니다.
구체적인 논리는 다음과 같습니다.
위의 것은 기본 거래 논리입니다. 트렌드 검출을 통해 역방향 브레이크오프 포인트를 식별하고 스톱 로스/프로프트로 수익을 최적화합니다.
합리적인 스톱 로스, 매개 변수 최적화 및 적시에 포지션 종료로 위험을 관리 할 수 있습니다.
전략은 다음과 같은 방법으로 최적화 될 수 있습니다.
다면적 테스트와 최적화로 전략 성능을 극대화 할 수 있습니다.
전체적으로, 이 전략은 트렌드 식별 및 리스크 관리를 통해 단기 가격 변동으로부터 이익을 얻습니다. 최적화되면 양 거래에 대한 강력한 단기 브레이크아웃 전략이 될 수 있습니다.
/*backtest start: 2022-11-08 00:00:00 end: 2023-11-14 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © ondrej17 //@version=4 strategy("longWickstrategy", overlay=true ) // Inputs st_yr_inp = input(defval=2020, title='Backtest Start Year') st_mn_inp = input(defval=01, title='Backtest Start Month') st_dy_inp = input(defval=01, title='Backtest Start Day') en_yr_inp = input(defval=2025, title='Backtest End Year') en_mn_inp = input(defval=01, title='Backtest End Month') en_dy_inp = input(defval=01, title='Backtest End Day') sltp_inp = input(defval=0.8, title='N - % offset for N*SL and (2N)*TP')/100 // Dates start = timestamp(st_yr_inp, st_mn_inp, st_dy_inp,00,00) end = timestamp(en_yr_inp, en_mn_inp, en_dy_inp,00,00) canTrade = time >= start and time <= end // Indicators Setup // Strategy Calcuations lowerWick = (open > close) ? close-low : open - low upperWick = (open > close) ? high-open : high-close wickLength = max(lowerWick,upperWick) candleLength = high-low wickToCandleRatio = wickLength / candleLength entryFilterCandleLength = candleLength > 0.75*atr(48) // Entries and Exits longCondition = entryFilterCandleLength and wickToCandleRatio > 0.5 and lowerWick > upperWick and canTrade and strategy.position_size == 0 shortCondition = entryFilterCandleLength and wickToCandleRatio > 0.5 and lowerWick < upperWick and canTrade and strategy.position_size == 0 strategy.entry("pendingLong", strategy.long, limit=low+wickLength/2, when = longCondition) strategy.entry("pendingShort", strategy.short, limit=high-wickLength/2, when = shortCondition) longStop = strategy.position_size > 0 ? strategy.position_avg_price*(1-sltp_inp) : na longTP = strategy.position_size > 0 ? strategy.position_avg_price*(1+2*sltp_inp) : na shortStop = strategy.position_size < 0 ? strategy.position_avg_price*(1+sltp_inp) : na shortTP = strategy.position_size < 0 ? strategy.position_avg_price*(1-2*sltp_inp) : na strategy.exit("longSLTP","pendingLong", stop=longStop, limit = longTP) strategy.exit("shortSLTP","pendingShort", stop=shortStop, limit = shortTP) plot(longStop, color=color.red, style=plot.style_linebr, linewidth=2) plot(shortStop, color=color.red, style=plot.style_linebr, linewidth=2) plot(longTP, color=color.green, style=plot.style_linebr, linewidth=2) plot(shortTP, color=color.green, style=plot.style_linebr, linewidth=2) plotLongCondition = longCondition ? high+abs(open-close) : na plot(plotLongCondition, style=plot.style_circles, linewidth=4, color=color.green) plotShortCondition = shortCondition ? high+abs(open-close) : na plot(plotShortCondition, style=plot.style_circles, linewidth=4, color=color.red)