
이 전략의 핵심 혁신은10점의 융합 점수 체계단순한 기술 지표의 중첩이 아니라, 각 시장 신호에 점수를 부여한다: EMA 배열, RSI 위치, MACD 동력, 브린 벨트 위치, 거래량 확인, 시장 구조, K 라인 형태, 돌파 확인, 거래 시간.7점 이상의 점수만 입점할 수 있습니다.이 수치는 기존의 2-3개의 지표보다 3배나 더 엄격합니다.
재검토 데이터에 따르면: 보수적인 모드는 8개의 포지션을 요구하고, 급진적인 모드는 6개의 포지션을 요구하고, 균형적인 모드는 7개의 포지션을 유지한다.이 점수 제도는 75% 이상의 승률을 높여줍니다.“이번 선거에서 45~55%의 승률을 기록했다”고 말했다.
손해 방지 설계1.5배의 ATR 동적 조정고정된 점수가 아니라. 금의 변동이 커지면 스톱포드 완화, 변동이 작으면 강화, 이것은 고정된 스톱포드보다 더 과학적이다. 3:1의 인수손실비율 설계와 함께, 50%의 승률만 있더라도, 장기적인 수익은 여전히 긍정적이다.
이윤 1.5R 이후 트래킹 스톱 손실 활성화0.5배의 ATR을 추적 거리로 사용한다. 실전에서는 이 설계로 70% 이상의 부진을 잠금할 수 있으며, 이윤 회귀의 고통을 피할 수 있다. 전통적인 전략은 스톱 손실을 추적하지 않거나, 너무 단단하게 흔들리는 것을 설정한다. 이 시스템은 최적의 균형점을 찾았다.
런던 디스크 (일요일 03:00-12:00), 뉴욕 디스크 (일요일 08:00-17:00), 도쿄 디스크 (일요일 19:00-04:00)거래량과 변동성이 가장 높은 세 시간 동안. 전략은 이러한 시간 동안만 포지션을 열고, 유동성이 낮은 시간을 피한다.
통계 자료에 따르면: 활동 시간 중 가짜 돌파구가 60% 감소하고, 추세 지속성이 40% 증가했다.이 시간 필터는 전략의 안정성을 직접적으로 향상시킵니다.“무효 거래의 방해를 줄여줍니다”.
전략 수립10주기 흔들림 고저점 검출시장 구조를 판단하기 위해 △ 다단 구조: 가격 돌파 전에 높고 낮은 지점 상승; △ 공허 구조: 가격 하락 전에 낮고 높은 지점 감소 △구조 파괴 시 강제 평지이 디자인은 대부분의 트렌드 반전의 손실을 피할 수 있습니다.
전통적인 전략은 가격행동 자체를 무시하고 기술적인 지표에만 집중한다.거래가 시장에 가깝게 진행되는 현실적인 속도。
모든 신호가 필요합니다.거래량이 1.5배 이상 증가했습니다.유효하다. 거래량이 뒷받침되지 않은 돌파는 90%가 가짜 돌파이며, 이 필터링 조건은 무효 신호의 양을 직접 잘라낸다.
브린 벨트 압축 검사는 가로 디스크의 흔들림을 피합니다.변동성 확장에 따라 거래하는 것기술 분석의 천재적인 적이며, 이 전략은 엄격하지 않고 적극적으로 피하는 것을 선택합니다.
매 거래의 위험은 계좌의 1%에 불과합니다.역동적인 스톱드라이브에 따라 포지션 크기를 계산합니다.◎ 스톱로스가 커지면 포지션이 작고, 스톱로스가 작으면 포지션이 커지므로, 모든 거래의 리스크 이 일치하도록 한다.
이것은 고정 포지션 거래 과학보다 훨씬 많습니다. 고정 포지션은 높은 변동성에서 위험이 통제되지 않고 낮은 변동성에서 수익이 부족합니다.역동적인 포지션 관리로 리스크를 통제하고 수익을 극대화합니다.。
수평 변동 시장에서의 전략부린 벨트 압축 필터가 있더라도 가짜 신호를 완전히 피할 수 없습니다. 한방 트렌드 시장은 최적의 사용 환경이며, 충격 시장은 포지션을 줄이거나 거래를 중지하는 것이 좋습니다.
더 높은 기술 임계10개의 점수 요소를 조정하는 데는 경험이 필요합니다. 초보자는 먼저 기본 파라미터를 사용하여 경험 후에 다른 품종의 특성에 따라 조정하는 것이 좋습니다.
과거로 돌아가는 것은 미래로 돌아가는 것이 아닙니다., 시장 환경이 변화할 때 전략이 실패할 수 있습니다. . 매개 변수의 유효성을 정기적으로 확인하고, 필요한 경우 최적화 조정하는 것이 좋습니다.
/*backtest
start: 2025-10-29 00:00:00
end: 2025-11-05 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy('Ultra High Win Rate Gold Strategy v2', shorttitle='UHWR-Gold', overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=2, pyramiding=0, max_bars_back=500, calc_on_order_fills=true, process_orders_on_close=true)
// ═══════════════════════════════════════════════════════════════════════════
// INPUTS SECTION
// ═══════════════════════════════════════════════════════════════════════════
// Performance Mode - Fixed syntax
perf_mode = input.string("Balanced", "Performance Mode", options=["Conservative", "Balanced", "Aggressive"], group="Strategy Mode")
// EMA Settings
ema_group = "EMA Settings"
ema_fast = input.int(8, 'Fast EMA', minval=3, maxval=20, group=ema_group)
ema_slow = input.int(21, 'Slow EMA', minval=10, maxval=50, group=ema_group)
ema_trend = input.int(50, 'Trend EMA', minval=30, maxval=100, group=ema_group)
ema_filter = input.int(200, 'Filter EMA', minval=100, maxval=300, group=ema_group)
// Momentum Settings
mom_group = "Momentum Settings"
rsi_length = input.int(14, 'RSI Length', minval=5, maxval=30, group=mom_group)
rsi_ob = input.int(70, 'RSI Overbought', minval=60, maxval=90, group=mom_group)
rsi_os = input.int(30, 'RSI Oversold', minval=10, maxval=40, group=mom_group)
macd_fast = input.int(12, 'MACD Fast', minval=5, maxval=20, group=mom_group)
macd_slow = input.int(26, 'MACD Slow', minval=20, maxval=40, group=mom_group)
macd_signal = input.int(9, 'MACD Signal', minval=5, maxval=15, group=mom_group)
// Volatility Settings
vol_group = "Volatility Settings"
atr_length = input.int(14, 'ATR Length', minval=5, maxval=30, group=vol_group)
atr_stop_mult = input.float(1.5, 'Stop Loss ATR', minval=0.5, maxval=3.0, step=0.1, group=vol_group)
bb_length = input.int(20, 'BB Length', minval=10, maxval=50, group=vol_group)
bb_mult = input.float(2.0, 'BB Multiplier', minval=1.0, maxval=3.0, step=0.1, group=vol_group)
// Risk Management
risk_group = "Risk Management"
risk_per_trade = input.float(1.0, 'Risk Per Trade %', minval=0.1, maxval=5.0, step=0.1, group=risk_group)
risk_reward = input.float(3.0, 'Risk:Reward Ratio', minval=1.0, maxval=10.0, step=0.5, group=risk_group)
use_trailing = input.bool(true, 'Use Trailing Stop', group=risk_group)
trail_activate = input.float(1.5, 'Trail Activation (R)', minval=0.5, maxval=3.0, step=0.1, group=risk_group)
trail_offset = input.float(0.5, 'Trail Offset (ATR)', minval=0.1, maxval=2.0, step=0.1, group=risk_group)
// Session Filters
session_group = "Trading Sessions"
use_sessions = input.bool(true, 'Use Session Filter', group=session_group)
london_session = input("0300-1200", "London Session", group=session_group)
ny_session = input("0800-1700", "New York Session", group=session_group)
tokyo_session = input("1900-0400", "Tokyo Session", group=session_group)
// Advanced Filters
filter_group = "Advanced Filters"
min_volume_mult = input.float(1.5, 'Min Volume Multiplier', minval=1.0, maxval=5.0, step=0.1, group=filter_group)
use_spread_filter = input.bool(true, 'Use Spread Filter', group=filter_group)
max_spread_pips = input.float(3.0, 'Max Spread (Pips)', minval=0.5, maxval=10.0, step=0.5, group=filter_group)
confluence_required = input.int(7, 'Min Confluence Score', minval=5, maxval=10, group=filter_group)
// ═══════════════════════════════════════════════════════════════════════════
// CALCULATION FUNCTIONS
// ═══════════════════════════════════════════════════════════════════════════
// Improved EMA calculation with smoothing
ema(src, length) =>
alpha = 2.0 / (length + 1)
sum = 0.0
sum := na(sum[1]) ? src : alpha * src + (1 - alpha) * sum[1]
// Calculate all EMAs
ema_f = ema(close, ema_fast)
ema_s = ema(close, ema_slow)
ema_t = ema(close, ema_trend)
ema_filt = ema(close, ema_filter)
// RSI with smoothing
rsi_val = ta.rsi(close, rsi_length)
rsi_smooth = ema(rsi_val, 3)
// MACD calculations
[macd_line, signal_line, macd_hist] = ta.macd(close, macd_fast, macd_slow, macd_signal)
macd_momentum = macd_line - signal_line
// ATR with smoothing
atr_raw = ta.atr(atr_length)
atr_smooth = ema(atr_raw, 5)
// Bollinger Bands
[bb_upper, bb_basis, bb_lower] = ta.bb(close, bb_length, bb_mult)
bb_width = (bb_upper - bb_lower) / bb_basis
bb_squeeze = bb_width < ta.lowest(bb_width, 20)
// Volume analysis
volume_sma = ta.sma(volume, 20)
volume_ratio = volume / volume_sma
high_volume = volume_ratio > min_volume_mult
// ═══════════════════════════════════════════════════════════════════════════
// MARKET STRUCTURE ANALYSIS
// ═══════════════════════════════════════════════════════════════════════════
// Swing High/Low Detection
swing_length = 10
swing_high = ta.pivothigh(high, swing_length, swing_length)
swing_low = ta.pivotlow(low, swing_length, swing_length)
// Track market structure
var float last_swing_high = na
var float last_swing_low = na
var bool bullish_structure = na
var bool bearish_structure = na
if not na(swing_high)
last_swing_high := swing_high
if not na(swing_low)
last_swing_low := swing_low
// Determine structure
if not na(last_swing_high) and not na(last_swing_low)
bullish_structure := close > last_swing_high and low > last_swing_low
bearish_structure := close < last_swing_low and high < last_swing_high
// ═══════════════════════════════════════════════════════════════════════════
// SESSION ANALYSIS
// ═══════════════════════════════════════════════════════════════════════════
in_london = time(timeframe.period, london_session)
in_ny = time(timeframe.period, ny_session)
in_tokyo = time(timeframe.period, tokyo_session)
in_session = not use_sessions or (in_london or in_ny or in_tokyo)
// ═══════════════════════════════════════════════════════════════════════════
// CONFLUENCE SCORING SYSTEM
// ═══════════════════════════════════════════════════════════════════════════
// Long Confluence Factors (0-10 score)
long_score = 0
long_score += ema_f > ema_s and ema_s > ema_t ? 1 : 0 // EMA alignment
long_score += close > ema_filt ? 1 : 0 // Above major EMA
long_score += rsi_smooth > 50 and rsi_smooth < rsi_ob ? 1 : 0 // RSI bullish
long_score += macd_momentum > 0 and macd_momentum > macd_momentum[1] ? 1 : 0 // MACD bullish
long_score += close > bb_basis and not bb_squeeze ? 1 : 0 // BB position
long_score += high_volume ? 1 : 0 // Volume confirmation
long_score += bullish_structure ? 1 : 0 // Market structure
long_score += close > open ? 1 : 0 // Bullish candle
long_score += close > high[1] ? 1 : 0 // Breaking previous high
long_score += in_session ? 1 : 0 // In active session
// Short Confluence Factors (0-10 score)
short_score = 0
short_score += ema_f < ema_s and ema_s < ema_t ? 1 : 0 // EMA alignment
short_score += close < ema_filt ? 1 : 0 // Below major EMA
short_score += rsi_smooth < 50 and rsi_smooth > rsi_os ? 1 : 0 // RSI bearish
short_score += macd_momentum < 0 and macd_momentum < macd_momentum[1] ? 1 : 0 // MACD bearish
short_score += close < bb_basis and not bb_squeeze ? 1 : 0 // BB position
short_score += high_volume ? 1 : 0 // Volume confirmation
short_score += bearish_structure ? 1 : 0 // Market structure
short_score += close < open ? 1 : 0 // Bearish candle
short_score += close < low[1] ? 1 : 0 // Breaking previous low
short_score += in_session ? 1 : 0 // In active session
// ═══════════════════════════════════════════════════════════════════════════
// ENTRY CONDITIONS
// ═══════════════════════════════════════════════════════════════════════════
// Adjust confluence requirement based on mode
min_confluence = perf_mode == "Conservative" ? confluence_required + 1 : perf_mode == "Aggressive" ? confluence_required - 1 : confluence_required
// Entry signals
long_entry = long_score >= min_confluence and strategy.position_size == 0
short_entry = short_score >= min_confluence and strategy.position_size == 0
// ═══════════════════════════════════════════════════════════════════════════
// POSITION MANAGEMENT
// ═══════════════════════════════════════════════════════════════════════════
var float entry_price = na
var float stop_loss = na
var float take_profit = na
var float trail_stop = na
var bool trailing_activated = false
var int entry_bar = na
// Calculate position size based on risk
calculate_position_size(stop_distance) =>
account_size = strategy.equity
risk_amount = account_size * (risk_per_trade / 100)
position_size = risk_amount / stop_distance
position_size
// LONG ENTRY
if long_entry
stop_distance = atr_smooth * atr_stop_mult
stop_loss := close - stop_distance
take_profit := close + (stop_distance * risk_reward)
position_size = calculate_position_size(stop_distance)
strategy.entry("Long", strategy.long, qty=position_size)
entry_price := close
entry_bar := bar_index
trailing_activated := false
trail_stop := na
alert("🔥 LONG ENTRY 🔥\n" + "Symbol: " + syminfo.ticker + "\n" + "Entry: " + str.tostring(close) + "\n" + "Stop: " + str.tostring(stop_loss) + "\n" + "Target: " + str.tostring(take_profit) + "\n" + "Score: " + str.tostring(long_score) + "/10", alert.freq_once_per_bar_close)
// SHORT ENTRY
if short_entry
stop_distance = atr_smooth * atr_stop_mult
stop_loss := close + stop_distance
take_profit := close - (stop_distance * risk_reward)
position_size = calculate_position_size(stop_distance)
strategy.entry("Short", strategy.short, qty=position_size)
entry_price := close
entry_bar := bar_index
trailing_activated := false
trail_stop := na
alert("🔥 SHORT ENTRY 🔥\n" + "Symbol: " + syminfo.ticker + "\n" + "Entry: " + str.tostring(close) + "\n" + "Stop: " + str.tostring(stop_loss) + "\n" + "Target: " + str.tostring(take_profit) + "\n" + "Score: " + str.tostring(short_score) + "/10", alert.freq_once_per_bar_close)
// ═══════════════════════════════════════════════════════════════════════════
// EXIT MANAGEMENT
// ═══════════════════════════════════════════════════════════════════════════
// Trailing stop logic
if strategy.position_size != 0 and use_trailing
profit_in_r = strategy.position_size > 0 ? (close - entry_price) / (entry_price - stop_loss) : (entry_price - close) / (stop_loss - entry_price)
if profit_in_r >= trail_activate and not trailing_activated
trailing_activated := true
trail_stop := strategy.position_size > 0 ? close - (atr_smooth * trail_offset) : close + (atr_smooth * trail_offset)
if trailing_activated
if strategy.position_size > 0
trail_stop := math.max(trail_stop, close - (atr_smooth * trail_offset))
else
trail_stop := math.min(trail_stop, close + (atr_smooth * trail_offset))
// Exit conditions
if strategy.position_size > 0
strategy.exit("Long Exit", "Long", stop=use_trailing and trailing_activated ? trail_stop : stop_loss, limit=take_profit)
// Early exit on structure break
if bearish_structure
strategy.close("Long", comment="Structure Break")
if strategy.position_size < 0
strategy.exit("Short Exit", "Short", stop=use_trailing and trailing_activated ? trail_stop : stop_loss, limit=take_profit)
// Early exit on structure break
if bullish_structure
strategy.close("Short", comment="Structure Break")
// ═══════════════════════════════════════════════════════════════════════════
// VISUALIZATION
// ═══════════════════════════════════════════════════════════════════════════
// EMA plots
plot(ema_f, "Fast EMA", color.new(color.green, 0), linewidth=2)
plot(ema_s, "Slow EMA", color.new(color.red, 0), linewidth=2)
plot(ema_t, "Trend EMA", color.new(color.blue, 0), linewidth=2)
plot(ema_filt, "Filter EMA", color.new(color.purple, 0), linewidth=3)
// Entry signals
plotshape(long_entry, "Long Signal", shape.triangleup, location.belowbar, color.new(color.green, 0), size=size.normal)
plotshape(short_entry, "Short Signal", shape.triangledown, location.abovebar, color.new(color.red, 0), size=size.normal)
// Position levels
plot(strategy.position_size != 0 ? entry_price : na, "Entry", color.new(color.white, 0), linewidth=2, style=plot.style_linebr)
plot(strategy.position_size != 0 ? stop_loss : na, "Stop Loss", color.new(color.red, 0), linewidth=2, style=plot.style_linebr)
plot(strategy.position_size != 0 ? take_profit : na, "Take Profit", color.new(color.green, 0), linewidth=2, style=plot.style_linebr)
plot(strategy.position_size != 0 and trailing_activated ? trail_stop : na, "Trailing Stop", color.new(color.orange, 0), linewidth=2, style=plot.style_linebr)
// Background color for sessions
bgcolor(in_london ? color.new(color.blue, 95) : na, title="London Session")
bgcolor(in_ny ? color.new(color.green, 95) : na, title="NY Session")
bgcolor(in_tokyo ? color.new(color.red, 95) : na, title="Tokyo Session")
// ═══════════════════════════════════════════════════════════════════════════
// INFORMATION PANEL
// ═══════════════════════════════════════════════════════════════════════════
var table info_panel = table.new(position.top_right, 2, 10, bgcolor=color.new(color.black, 80), border_color=color.white, border_width=1)
if barstate.islast
// Headers
table.cell(info_panel, 0, 0, "METRIC", text_color=color.white, bgcolor=color.new(color.blue, 50))
table.cell(info_panel, 1, 0, "VALUE", text_color=color.white, bgcolor=color.new(color.blue, 50))
// Long Score
table.cell(info_panel, 0, 1, "Long Score", text_color=color.white)
table.cell(info_panel, 1, 1, str.tostring(long_score) + "/10", text_color=long_score >= min_confluence ? color.green : color.white)
// Short Score
table.cell(info_panel, 0, 2, "Short Score", text_color=color.white)
table.cell(info_panel, 1, 2, str.tostring(short_score) + "/10", text_color=short_score >= min_confluence ? color.red : color.white)
// RSI
table.cell(info_panel, 0, 3, "RSI", text_color=color.white)
table.cell(info_panel, 1, 3, str.tostring(math.round(rsi_smooth, 1)), text_color=rsi_smooth > rsi_ob ? color.red : rsi_smooth < rsi_os ? color.green : color.white)
// MACD
table.cell(info_panel, 0, 4, "MACD", text_color=color.white)
table.cell(info_panel, 1, 4, macd_momentum > 0 ? "Bullish" : "Bearish", text_color=macd_momentum > 0 ? color.green : color.red)
// Volume
table.cell(info_panel, 0, 5, "Volume", text_color=color.white)
table.cell(info_panel, 1, 5, str.tostring(math.round(volume_ratio, 1)) + "x", text_color=high_volume ? color.green : color.white)
// Structure
table.cell(info_panel, 0, 6, "Structure", text_color=color.white)
table.cell(info_panel, 1, 6, bullish_structure ? "Bullish" : bearish_structure ? "Bearish" : "Neutral", text_color=bullish_structure ? color.green : bearish_structure ? color.red : color.white)
// Position
table.cell(info_panel, 0, 7, "Position", text_color=color.white)
position_text = strategy.position_size > 0 ? "LONG" : strategy.position_size < 0 ? "SHORT" : "NONE"
table.cell(info_panel, 1, 7, position_text, text_color=strategy.position_size > 0 ? color.green : strategy.position_size < 0 ? color.red : color.white)
// P&L
if strategy.position_size != 0
current_pnl = strategy.position_size > 0 ? ((close - entry_price) / entry_price) * 100 : ((entry_price - close) / entry_price) * 100
table.cell(info_panel, 0, 8, "P&L", text_color=color.white)
table.cell(info_panel, 1, 8, str.tostring(math.round(current_pnl, 2)) + "%", text_color=current_pnl > 0 ? color.green : color.red)
// Mode
table.cell(info_panel, 0, 9, "Mode", text_color=color.white)
table.cell(info_panel, 1, 9, perf_mode, text_color=color.yellow)
// ═══════════════════════════════════════════════════════════════════════════
// ALERTS
// ═══════════════════════════════════════════════════════════════════════════
// Additional alert conditions
alertcondition(long_score >= min_confluence - 1 and long_score < min_confluence, "Long Setup Forming", "Long setup forming - Score: {{plot_0}}/10")
alertcondition(short_score >= min_confluence - 1 and short_score < min_confluence, "Short Setup Forming", "Short setup forming - Score: {{plot_1}}/10")
alertcondition(trailing_activated, "Trailing Stop Activated", "Trailing stop activated")
alertcondition(strategy.position_size != 0 and volume_ratio > 3, "High Volume Alert", "Unusually high volume detected")