이 전략은 30분 촛불을 기반으로 한 쌍방향 거래 시스템으로, 가격 변동성 모니터링을 통해 거래 기회를 찾습니다. 핵심 메커니즘은 포인트 임계치를 사용하여 중요한 가격 움직임을 식별하고 브레이크아웃 확인 후 거래를 실행하는 것입니다. 전략은 엄격한 시간 관리, 스톱 로스/트레이프 메커니즘 및 제어 자동화 거래를위한 거래 관리 프로토콜을 통합합니다.
이 전략은 유효한 거래 신호를 식별하기 위해 여러 필터링 메커니즘을 사용합니다. 30 분 촛불이 닫을 때 각 변동성 범위를 계산하여 범위를 초과 할 때 잠재적 인 거래 기회를 표시합니다. 신호 유효성을 보장하기 위해 전략은 추가 버퍼 포인트를 구현하여 가격이 이 버퍼 구역을 통과 할 때만 실제 거래 신호를 유발합니다. 시스템은 길고 짧은 포지션을 모두 가능하게하며, 상향 브레이크에 장거리 및 하향 브레이크에 짧은 포지션을 입력하여 해당 수익 목표와 스톱-러스 수준을 구현합니다.
이 전략은 명확한 논리를 가진 종합적으로 설계된 자동화 거래 전략이다. 엄격한 조건 필터링과 위험 통제를 통해 전략은 실용적 적용 가능성을 입증한다. 그러나 라이브 트레이딩에서 철저한 테스트와 최적화가 필요하며, 특히 실제 시장 조건에 따라 조정해야 하는 매개 변수 설정 및 위험 관리 측면에 대한 테스트가 필요합니다. 성공적인 전략 구현은 안정적인 시장 조건과 적절한 매개 변수 구성과 라이브 배포 전에 광범위한 백테스팅을 권장합니다.
/*backtest start: 2024-10-01 00:00:00 end: 2024-10-31 23:59:59 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Big Candle Breakout Strategy Both Side", overlay=true) // Input for the point move threshold point_move_in = input.int(100, title="Point Move Threshold") point_target = input.int(100, title="Point Target") point_stoploss = input.int(100, title="Point Stop Loss") point_buffer = input.int(5, title="Point Buffer") point_move = point_buffer + point_move_in // Define the start and end times for trading start_hour = 9 start_minute = 15 end_hour = 14 end_minute = 30 // Function to check if the current time is within the allowed trading window in_time_range = (hour(time('30')) > start_hour or (hour(time('30')) == start_hour and minute(time('30')) >= start_minute)) and (hour(time('30')) < end_hour or (hour(time('30')) == end_hour and minute(time('30')) <= end_minute)) // Retrieve the open, high, low, and close prices of 30-minute candles open_30m = request.security(syminfo.tickerid, "30", open) high_30m = request.security(syminfo.tickerid, "30", high) low_30m = request.security(syminfo.tickerid, "30", low) close_30m = request.security(syminfo.tickerid, "30", close) // Calculate the range of the candle candle_range_long = (close_30m - open_30m) candle_range_short = (open_30m - close_30m) // Determine if the candle meets the criteria to be marked big_candle_long = candle_range_long >= point_move_in big_candle_short = candle_range_short >= point_move_in // Variables to store the state of the trade var float long_entry_price = na var float long_target_price = na var float long_stop_loss_price = na var float short_entry_price = na var float short_target_price = na var float short_stop_loss_price = na // Check if there are no active trades no_active_trades = (strategy.opentrades == 0) // Long entry condition if (big_candle_long and na(long_entry_price) and in_time_range and no_active_trades) long_entry_price := high_30m+point_buffer long_target_price := long_entry_price + point_target long_stop_loss_price := long_entry_price - point_stoploss strategy.entry("Buy", strategy.long, stop=long_entry_price, limit=long_target_price) plot(long_entry_price, style=plot.style_linebr, color=color.blue, linewidth=2, title="Entry Price") plot(long_target_price, style=plot.style_linebr, color=color.green, linewidth=2, title="Target Price") plot(long_stop_loss_price, style=plot.style_linebr, color=color.red, linewidth=2, title="Stop Loss Price") // Short entry condition if (big_candle_short and na(short_entry_price) and in_time_range and no_active_trades) short_entry_price := low_30m - point_buffer short_target_price := short_entry_price - point_target short_stop_loss_price := short_entry_price + point_stoploss strategy.entry("Sell", strategy.short, stop=short_entry_price, limit=short_target_price) plot(short_entry_price, style=plot.style_linebr, color=color.blue, linewidth=2, title="Short Entry Price") plot(short_target_price, style=plot.style_linebr, color=color.green, linewidth=2, title="Short Target Price") plot(short_stop_loss_price, style=plot.style_linebr, color=color.red, linewidth=2, title="Short Stop Loss Price") // Long exit conditions if (not na(long_entry_price)) strategy.exit("Long Exit", from_entry="Buy", limit=long_target_price, stop=long_stop_loss_price) // Short exit conditions if (not na(short_entry_price)) strategy.exit("Short Exit", from_entry="Sell", limit=short_target_price, stop=short_stop_loss_price) // Reset trade status if (strategy.position_size == 0) long_entry_price := na long_target_price := na long_stop_loss_price := na short_entry_price := na short_target_price := na short_stop_loss_price := na // Plot the big candle and entry/exit levels plotshape(series=big_candle_long, location=location.abovebar, style=shape.circle, color=color.green) plotshape(series=big_candle_short, location=location.abovebar, style=shape.circle, color=color.red) //plot(long_entry_price, style=plot.style_stepline, color=color.blue, linewidth=2, title="Entry Price") //plot(long_target_price, style=plot.style_stepline, color=color.green, linewidth=2, title="Target Price") //plot(long_stop_loss_price, style=plot.style_stepline, color=color.red, linewidth=2, title="Stop Loss Price")