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

동적 지원 저항 가격 행동 거래 시스템

저자:차오장, 날짜: 2024-12-04 15:19:00
태그:SRPA

img

전반적인 설명

이 전략은 가격 액션과 동적 지지/저항 수준에 기반한 거래 시스템으로, 특정 촛불 패턴이 등장할 때 핵심 가격 수준 근처에서 거래를 실행합니다. 이 시스템은 16 주기 동적 지지/저항 계산 방법을 활용하며, 잠재적 인 시장 반전을 포착하기 위해 네 가지 고전적인 반전 촛불 패턴 - 해머, 쏘팅 스타, 도지 및 핀 바와 결합합니다. 전략은 리스크 관리를 위해 일정한 비율의 수익 및 스톱 로스 수준을 사용하고 입시 신호 엄격성을 제어하기 위해 민감도 매개 변수를 사용합니다.

전략 원칙

이 전략의 핵심은 가격 움직임의 경계를 설정하기 위해 지원 및 저항 수준을 동적으로 계산하는 데 있다. 가격이 이러한 핵심 수준에 접근하면 시스템은 반전 신호로 특정 촛불 패턴을 찾는다. 진입 조건은 지원 / 저항 수준의 1.8% (전면 민감도) 내의 패턴 형성을 필요로 한다. 시스템은 16%의 스톱 로스와 9.5%의 이익 취득을 가진 35%의 주식 관리 규칙을 구현하여 거래 당 총 주식의 약 5.6%에서 위험을 효과적으로 제어한다. 이 전략은 파이인 스크립트 (Pine Script) 에서 완전한 거래 관리 기능과 시각화로 구현된다.

전략적 장점

  1. 기술 분석의 두 가지 가장 신뢰할 수 있는 요소: 가격 패턴과 지원/저항을 결합하여 신호 신뢰성을 향상시킵니다.
  2. 동적으로 계산된 지원/저항 수준을 사용하여 변화하는 시장 조건에 적응합니다.
  3. 상당한 적립을 방지하기 위해 엄격한 자금 관리 및 위험 통제 조치를 시행합니다.
  4. 조정 가능한 매개 변수와 함께 명확한 전략 논리, 다른 시장 조건에 최적화를 촉진
  5. 자동 거래에 적합한 주관적 판단 없이 명확한 진입 신호

전략 위험

  1. 높은 변동성 시장에서 지원/저항 효과는 감소할 수 있습니다.
  2. 상대적으로 넓은 스톱 로스 (16%) 는 변동성 조건에서 상당한 손실을 초래할 수 있습니다.
  3. 감수성 매개 변수 설정은 거래 빈도와 정확성에 상당한 영향을 미칩니다.
  4. 가격 패턴에만 의존하면 다른 중요한 시장 신호를 놓칠 수 있습니다.
  5. 전략 수익에 대한 거래 비용의 영향을 고려해야 합니다.

최적화 방향

  1. 신호 신뢰성을 향상시키기 위해 확인 지표로 볼륨을 도입
  2. 시장 변동성에 따라 동적으로 조정되는 적응적 감수성 매개 변수를 개발
  3. 스톱 로스 설정을 최적화하고, 후속 스톱 또는 단계적 스톱 로스 계획을 구현하는 것을 고려하십시오.
  4. 강한 트렌드 중 반전 거래를 피하기 위해 트렌드 필터를 추가합니다.
  5. 시장 조건에 따라 거래 크기를 조정하는 동적 위치 사이즈 시스템 개발

요약

이 가격 액션 기반 거래 전략은 트레이더들에게 동적 지원/저항 수준을 고전적 역전 패턴과 결합함으로써 체계적인 거래 접근 방식을 제공합니다. 전략의 강점은 명확한 논리와 제어 가능한 위험에 속하지만 실제 거래 결과에 기반한 지속적인 최적화가 필요합니다. 트레이더들은 라이브 거래 전에 철저한 백테스팅과 매개 변수 최적화를 수행하고 시장 경험을 기반으로 전략을 사용자 정의하는 것이 좋습니다.


/*backtest
start: 2024-11-26 00:00:00
end: 2024-12-03 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © felipemiransan

//@version=5
strategy("Price Action Strategy", overlay=true)

// Settings
length = input.int(16, title="Support and Resistance Length")
sensitivity = input.float(0.018, title="Sensitivity")

// Stop Loss and Take Profit
stop_loss_pct = input.float(16, title="Stop Loss percentage", minval=0.1) / 100
take_profit_pct = input.float(9.5, title="Take Profit percentage", minval=0.1) / 100

// Function to identify a Hammer
isHammer() =>
    body = close - open
    price_range = high - low
    lower_shadow = open - low
    upper_shadow = high - close
    body > 0 and lower_shadow > body * 2 and upper_shadow < body * 0.5 and price_range > 0

// Function to identify a Shooting Star
isShootingStar() =>
    body = open - close
    price_range = high - low
    lower_shadow = close - low
    upper_shadow = high - open
    body > 0 and upper_shadow > body * 2 and lower_shadow < body * 0.5 and price_range > 0

// Function to identify a Doji
isDoji() =>
    body = close - open
    price_range = high - low
    math.abs(body) < (price_range * 0.1)  // Doji has a small body

// Function to identify a Pin Bar
isPinBar() =>
    body = close - open
    price_range = high - low
    lower_shadow = open - low
    upper_shadow = high - close
    (upper_shadow > body * 2 and lower_shadow < body * 0.5) or (lower_shadow > body * 2 and upper_shadow < body * 0.5)

// Support and resistance levels 
support = ta.lowest(low, length)
resistance = ta.highest(high, length)

// Entry criteria
long_condition = (isHammer() or isDoji() or isPinBar()) and close <= support * (1 + sensitivity)
short_condition = (isShootingStar() or isDoji() or isPinBar()) and close >= resistance * (1 - sensitivity)

// Function to calculate stop loss and take profit (long)
calculate_levels(position_size, avg_price, stop_loss_pct, take_profit_pct) =>
    stop_loss_level = avg_price * (1 - stop_loss_pct)
    take_profit_level = avg_price * (1 + take_profit_pct)
    [stop_loss_level, take_profit_level]

// Function to calculate stop loss and take profit (short)
calculate_levels_short(position_size, avg_price, stop_loss_pct, take_profit_pct) =>
    stop_loss_level = avg_price * (1 + stop_loss_pct)
    take_profit_level = avg_price * (1 - take_profit_pct)
    [stop_loss_level, take_profit_level]

// Buy entry order with label
if (long_condition and strategy.opentrades == 0)
    strategy.entry("Buy", strategy.long)
    pattern = isHammer() ? "Hammer" : isDoji() ? "Doji" : isPinBar() ? "Pin Bar" : ""
    label.new(x=bar_index, y=low, text=pattern, color=color.green, textcolor=color.black, size=size.small)

// Sell entry order with label
if (short_condition and strategy.opentrades == 0)
    strategy.entry("Sell", strategy.short)
    pattern = isShootingStar() ? "Shooting Star" : isDoji() ? "Doji" : isPinBar() ? "Pin Bar" : ""
    label.new(x=bar_index, y=high, text=pattern, color=color.red, textcolor=color.black, size=size.small)

// Stop Loss and Take Profit management for open positions
if (strategy.opentrades > 0)
    if (strategy.position_size > 0)  // Long position
        avg_price_long = strategy.position_avg_price  // Average price of long position
        [long_stop_level, long_take_profit_level] = calculate_levels(strategy.position_size, avg_price_long, stop_loss_pct, take_profit_pct)
        strategy.exit("Exit Long", from_entry="Buy", stop=long_stop_level, limit=long_take_profit_level)
    if (strategy.position_size < 0)  // Short position
        avg_price_short = strategy.position_avg_price  // Average price of short position
        [short_stop_level, short_take_profit_level] = calculate_levels_short(strategy.position_size, avg_price_short, stop_loss_pct, take_profit_pct)
        strategy.exit("Exit Short", from_entry="Sell", stop=short_stop_level, limit=short_take_profit_level)

// Visualization of Support and Resistance Levels
plot(support, title="Support", color=color.green, linewidth=2)
plot(resistance, title="Resistance", color=color.red, linewidth=2)






관련

더 많은