
이 강화형 돌파 전략은 가격 돌파의 핵심 수준에 기반한 거래 시스템으로, 동적 목표와 중지 손실 설정을 결합한다. 이 전략은 초기 몇 개의 K 선의 최고 가격과 최저 가격을 관찰하여 돌파 수준을 결정하고, 가격이 이러한 수준을 돌파 할 때 거래한다. 이 전략의 독특한 점은 동적 이익 목표와 중지 손실 설정을 통해, 이러한 설치는 실제 입문 가격에 기반하지 않고 미리 설정된 고정 가격 수준이다.
이 전략의 핵심 원칙은 가격이 중요한 수준을 돌파한 후의 동력을 포착하는 것이다. 그것은 먼저 초기 몇 개의 K선 (사용자가 설정한) 의 최고 가격과 최저 가격을 관찰하고, 그 다음에는 이러한 가격에 기초하여 일정 비율을 더하여 상하의 돌파 수준을 설정한다. 가격이 이러한 수준을 돌파할 때, 전략은 상대로 상장하거나 상장을 한다.
각 거래에는 동적인 목표 가격과 중지 가격이 있습니다. 이 가격은 고정된 가격 수준이 아닌 실제 입시 가격의 비율에 따라 계산됩니다. 이 방법은 입시 가격에 관계없이 각 거래의 위험 / 이익 비율이 항상 동일하게 유지되도록합니다.
이 전략에는 중요한 보안 장치도 포함되어 있습니다. 포지션이 파격되고 포지션이 열리면 포지션이 평정되기 전까지는 새로운 거래 신호를 다시 유발하지 않습니다. 이것은 격렬한 시장에서 과도한 거래를 방지하는 데 도움이됩니다.
동적 적응성: 초기 몇 개의 K 라인을 사용하여 돌파구를 설정하여 전략은 다른 시장 환경과 변동성에 적응할 수 있습니다.
위험 관리: 동적으로 설정된 스톱 로즈와 타겟 가격은 각 거래의 위험과 수익 비율이 일관되게 유지되도록 하고, 장기적인 안정성을 도모한다.
과도한 거래 보호: 한 번에 한 번의 거래만 허용하는 메커니즘은 노이즈 거래와 과도한 거래의 위험을 줄이는 데 도움이됩니다.
유연성: 전략의 여러 매개 변수는 거래자가 특정 요구와 시장 조건에 따라 조정할 수 있도록 허용한다.
명확한 진출 및 출전 규칙: 명확하게 정의된 돌파수 수준과 탈퇴 조건은 전략을 이해하기 쉽고 실행할 수 있도록 한다.
가짜 브레이크 (false breakout): 불안정한 시장에서는 여러 개의 가짜 브레이크가 발생할 수 있으며, 이로 인해 연속적으로 소액 손실이 발생할 수 있습니다.
슬라이드 포인트 위험: 유동성이 낮은 시장에서 실제 실행 가격은 신호 가격과 현저하게 차이가 있을 수 있다.
시장 환경 의존성: 이 전략은 트렌드가 뚜렷한 시장에서 잘 작동하지만 수평적으로 정리된 시장에서는 좋지 않을 수 있습니다.
변수 민감성: 전략의 성과는 변수 설정에 크게 의존하며, 잘못된 변수는 과도한 거래 또는 중요한 기회를 놓치게 할 수 있습니다.
트렌드 추적 능력의 부족: 고정된 수익 목표가 강한 트렌드에서 조기 퇴출을 초래할 수 있다.
트렌드 필터를 도입합니다. 이동 평균이나 ADX와 같은 지표를 추가하여 주요 트렌드 방향으로만 거래되는 것을 보장합니다.
동적 조정 파라미터: 시장의 변동성 (ATR 지표와 같은) 에 따라 동적으로 조정할 수 있는 돌파율과 목표 중지 손실 비율.
다중 시간 프레임 분석: 거래 신호의 질을 높이기 위해 더 높은 시간 프레임 분석과 결합.
거래량 확인을 추가: 거래 신호를 발동할 때 거래량 변화를 고려하여 신호의 신뢰성을 높인다.
부분적 제동을 실현하기: 수익을 달성한 후, 더 큰 상승 공간을 확보하면서 수익을 보호하기 위해 상쇄를 고려할 수 있다.
이 강화형 돌파구 전략은 유연하고 강력한 거래 프레임워크를 제공하며, 특히 큰 가격 움직임을 포착하는 데 적합합니다. 동적인 위험 관리 방법과 명확한 거래 규칙은 잠재적으로 안정적인 거래 시스템으로 만듭니다. 그러나 모든 거래 전략과 마찬가지로 일부 고유한 위험과 한계에 직면합니다.
/*backtest
start: 2024-08-26 00:00:00
end: 2024-09-24 08:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Enhanced Breakout Strategy with Targets and Stop Loss", overlay=true)
// Input parameters using input.float() for percentage inputs
percentage_up = input.float(0.09, title="Percentage Up", step=0.01) / 100
percentage_down = input.float(0.09, title="Percentage Down", step=0.01) / 100
target_percentage = input.float(0.45, title="Target Percentage", step=0.01) / 100
stop_loss_percentage = input.float(0.18, title="Stop Loss Percentage", step=0.01) / 100
// Use input.int() for initial candles
initial_candles = input.int(5, title="Number of Initial Candles")
// Initialize variables
var float highest_high = na
var float lowest_low = na
var float upper_level = na
var float lower_level = na
var bool breakout_occurred = false
// Track the high and low for the first `initial_candles`
if (bar_index < initial_candles)
highest_high := na(highest_high) ? high : math.max(highest_high, high)
lowest_low := na(lowest_low) ? low : math.min(lowest_low, low)
// Ensure calculations are done after the first `initial_candles` are formed
if (bar_index >= initial_candles)
upper_level := highest_high * (1 + percentage_up)
lower_level := lowest_low * (1 - percentage_down)
// Plot the breakout levels
plot(upper_level, color=color.green, title="Upper Level", linewidth=2, style=plot.style_line)
plot(lower_level, color=color.red, title="Lower Level", linewidth=2, style=plot.style_line)
// Trading Conditions
long_condition = not breakout_occurred and close > upper_level
short_condition = not breakout_occurred and close < lower_level
// Execute trades based on conditions
if (long_condition)
strategy.entry("Long", strategy.long)
breakout_occurred := true
// Exit using position_avg_price for accurate target and stop-loss
strategy.exit("Exit Long", from_entry="Long", limit=strategy.position_avg_price * (1 + target_percentage), stop=strategy.position_avg_price * (1 - stop_loss_percentage))
if (short_condition)
strategy.entry("Short", strategy.short)
breakout_occurred := true
// Exit using position_avg_price for accurate target and stop-loss
strategy.exit("Exit Short", from_entry="Short", limit=strategy.position_avg_price * (1 - target_percentage), stop=strategy.position_avg_price * (1 + stop_loss_percentage))
// Reset breakout after the trade is closed
if (strategy.opentrades == 0)
breakout_occurred := false
// Alerts
alertcondition(long_condition, title="Long Signal", message="Breakout above upper level: Consider a long trade!")
alertcondition(short_condition, title="Short Signal", message="Breakout below lower level: Consider a short trade!")