리소스 로딩... 로딩...

고주파량 양적 세션 거래 전략: 브레이크오웃 신호에 기반한 적응적 동적 포지션 관리 시스템

저자:차오장, 날짜: 2024-12-12 14:59:28
태그:

img

전반적인 설명

이 전략은 런던 및 미국 거래 세션 동안 가격 파기 기회를 포착하는 데 초점을 맞춘 고주파량 양적 거래 시스템이다. 맞춤형 거래 세션 (킬 존), 동적 위치 관리 및 정확한 주문 관리를 통해 안정적인 거래 수익을 달성합니다. 전략의 핵심은 룩백 기간의 고점 및 저점 데이터와 결합하여 특정 세션 내에서 가격 행동 분석을 통해 완전한 거래 프레임워크를 구축하는 것입니다.

전략 원칙

이 전략은 다음과 같은 핵심 원칙에 기초합니다.

  1. 세션 선택: 전략은 일반적으로 더 높은 유동성과 변동성을 가진 런던 및 미국 거래 세션에 초점을 맞추고 있습니다.
  2. 브레이크아웃 신호: 현재 종료 가격과 개시 가격 사이의 관계를 분석하고 이전 최고와 최저와 비교하여 잠재적 브레이크아웃 기회를 식별합니다.
  3. 동적 포지셔닝: 계정 자금, 위험 비율 및 스톱 로스 거리를 기반으로 각 거래의 포지션 크기를 동적으로 계산합니다.
  4. 주문 관리: 만료된 주문의 위험을 피하기 위해 자동으로 미뤄진 주문 취소 메커니즘을 구현합니다.
  5. 리스크 보상 비율: 개인 리스크 선호도에 따라 거래자가 리스크 보상 비율을 설정할 수 있습니다.

전략적 장점

  1. 정확한 시간 관리: 맞춤형 거래 세션으로 가장 유동적인 시간에 거래를 보장합니다.
  2. 지능형 포지션 관리: 각 거래에 대한 위험 노출을 효과적으로 제어하기 위해 역동적으로 포지션 크기를 계산합니다.
  3. 유연한 매개 변수 구성: 상인들은 개인 필요에 따라 다양한 매개 변수를 조정할 수 있습니다.
  4. 포괄적 리스크 제어: Stop-loss, take-profit 및 오더 타임아웃 취소와 같은 여러 리스크 제어 메커니즘을 포함한다.
  5. 높은 자동화 수준: 신호 생성에서 주문 관리까지 완전히 자동화되어 인적 개입을 줄입니다.

전략 위험

  1. 시장 변동성 위험: 높은 변동성 기간 동안 잘못된 파업 신호가 발생 할 수 있습니다.
  2. 미끄러짐 위험: 고주파 거래에서 미끄러짐은 전략 성과에 영향을 줄 수 있습니다.
  3. 가짜 브레이크업 위험: 시장은 거래 손실로 이어지는 거짓 브레이크업을 보일 수 있습니다.
  4. 유동성 위험: 특정 세션에서 유동성이 부족하면 주문 실행에 영향을 줄 수 있습니다.

전략 최적화 방향

  1. 변동성 필터를 구현합니다. 시장 변동성 분석을 통해 입시 시기를 최적화하십시오.
  2. 트렌드 필터링 추가: 장기 트렌드 지표를 통합하여 거래 방향의 정확성을 향상시킵니다.
  3. 시간 창을 최적화: 역사 데이터 분석을 기반으로 거래 세션 설정을 정렬합니다.
  4. 포지션 관리 개선: 변동성 기반의 동적 포지션 조정 메커니즘을 추가하는 것을 고려하십시오.

요약

이 전략은 시간, 가격 및 위치 등 여러 차원에서의 관리 방법을 포괄적으로 활용하여 완전한 고주파 거래 시스템을 구축합니다. 주요 장점은 거래의 정확한 타이밍과 포괄적인 위험 관리 메커니즘에 있습니다. 그러나 거래자는 시장 조건의 변화를 면밀히 모니터링하고 이에 따라 매개 변수 설정을 조정해야합니다.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-10 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("ENIGMA ENDGAME Strategy", overlay=true, margin_long=100, margin_short=100)

// Description: 
// The ENIGMA ENDGAME strategy leverages price action breakouts within specific kill zones (London and US sessions) to capture profitable opportunities. 
// The strategy uses dynamic position sizing based on account equity, precise entry logic via buy-stop and sell-stop orders, and robust risk management to achieve consistent profitability. 
// Features include:
// - Customizable kill zones for session-specific trading.
// - Risk management with dynamic position sizing based on user-defined percentages.
// - Multiple entry opportunities with lookback-based high/low tracking.
// - Automatic pending order cancellation to avoid stale trades.
// - Adjustable risk-reward ratios for optimal profit-taking.

// Define customizable kill zones for London and US sessions
london_start_hour = input.int(2, minval=0, maxval=23, title="London Start Hour (UTC)")
london_end_hour = input.int(5, minval=0, maxval=23, title="London End Hour (UTC)")
us_start_hour = input.int(8, minval=0, maxval=23, title="US Start Hour (UTC)")
us_end_hour = input.int(11, minval=0, maxval=23, title="US End Hour (UTC)")

// Risk management parameters
risk_percentage = input.float(0.1, title="Risk Percentage per Trade (%)", step=0.01)
account_balance = strategy.equity

// Define lookback parameters
lookback_period = 3
cancel_after_bars = input.int(5, title="Cancel Pending Orders After Bars")

// User-defined risk-reward ratio
risk_reward_ratio = input.float(1.0, title="Risk-Reward Ratio", minval=0.1, step=0.1)

// Kill zone function
in_kill_zone = (hour(time) >= london_start_hour and hour(time) < london_end_hour) or (hour(time) >= us_start_hour and hour(time) < us_end_hour)

// Calculate Position Size Based on Risk
calc_position_size(entry_price, stop_loss) =>
    // This function calculates the position size based on the account equity, risk percentage, and stop-loss distance.
    risk = account_balance * (risk_percentage / 100)
    stop_loss_distance = math.abs(entry_price - stop_loss)
    // Validate stop-loss distance
    stop_loss_distance := stop_loss_distance < syminfo.mintick * 10 ? syminfo.mintick * 10 : stop_loss_distance
    position_size = risk / stop_loss_distance
    // Clamp position size
    math.min(position_size, 10000000000.0) // Limit to Pine Script max qty

// Initialize arrays to store high/low levels
var float[] buy_highs = array.new_float(0)
var float[] sell_lows = array.new_float(0)
var int[] pending_orders = array.new_int(0)

// Buy and Sell Arrow Conditions
bullish_arrow = close > open and close > high[1] and in_kill_zone // Triggers buy logic when price action breaks out in the upward direction within a kill zone.
bearish_arrow = close < open and close < low[1] and in_kill_zone // Triggers sell logic when price action breaks out in the downward direction within a kill zone.

// Store Highs and Place Buy-Stops
if bullish_arrow
    array.clear(buy_highs) // Clears previous data to store new highs.
    for i = 1 to lookback_period
        array.push(buy_highs, high[i]) // Tracks highs from the lookback period.
    
    // Place buy-stop orders
    for high_level in buy_highs
        stop_loss = low - syminfo.mintick * 10 // 1 pip below the low
        take_profit = high_level + (high_level - stop_loss) * risk_reward_ratio // Calculate take-profit based on the risk-reward ratio.
        strategy.entry("Buy", strategy.long, stop=high_level, qty=calc_position_size(high_level, stop_loss))
        strategy.exit("Take Profit", "Buy", limit=take_profit, stop=stop_loss)

// Store Lows and Place Sell-Stops
if bearish_arrow
    array.clear(sell_lows) // Clears previous data to store new lows.
    for i = 1 to lookback_period
        array.push(sell_lows, low[i]) // Tracks lows from the lookback period.
    
    // Place sell-stop orders
    for low_level in sell_lows
        stop_loss = high + syminfo.mintick * 10 // 1 pip above the high
        take_profit = low_level - (stop_loss - low_level) * risk_reward_ratio // Calculate take-profit based on the risk-reward ratio.
        strategy.entry("Sell", strategy.short, stop=low_level, qty=calc_position_size(low_level, stop_loss))
        strategy.exit("Take Profit", "Sell", limit=take_profit, stop=stop_loss)

// Cancel Pending Orders After Defined Bars
if array.size(pending_orders) > 0
    for i = 0 to array.size(pending_orders) - 1
        if bar_index - array.get(pending_orders, i) >= cancel_after_bars
            array.remove(pending_orders, i) // Removes outdated pending orders.

// Alerts for debugging
alertcondition(bullish_arrow, title="Buy Alert", message="Buy signal generated.")
alertcondition(bearish_arrow, title="Sell Alert", message="Sell signal generated.")


더 많은