하락 쐐기 추세선의 동적 돌파 양적 거래 전략

Pivot SL TP Trend
생성 날짜: 2025-02-21 13:12:56 마지막으로 수정됨: 2025-07-15 09:58:16
복사: 1 클릭수: 411
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

하락 쐐기 추세선의 동적 돌파 양적 거래 전략 하락 쐐기 추세선의 동적 돌파 양적 거래 전략

개요

이 전략은 기술 분석에서 하향 형태를 기반으로 한 트렌드 브레이킹 거래 시스템이다. 가격의 고위와 낮은 지점을 동적으로 식별하여 상향 트렌드 라인을 구성하고, 가격이 트렌드 라인을 돌파 할 때 다수 포지션에 진입한다. 전략은 위험을 제어하고 이익을 잠금하기 위해 동적 스톱 손실 메커니즘을 사용합니다. 이것은 고전적인 기술 분석 거래 방법의 프로그램 구현이며, 하향 트렌드가 끝나갈 때 반전 기회를 잡기 위해 특히 적합합니다.

전략 원칙

이 전략의 핵심 논리는 다음과 같은 몇 가지 핵심 단계를 포함합니다.

  1. 중심점 (Pivot) 방식을 사용하여 가격 움직임의 높고 낮은 지점을 동적으로 식별합니다.
  2. 최근 두 개의 최고점과 최저점과 그에 따른 시간 지수를 기록하고 저장합니다.
  3. 이 점들을 바탕으로 상하의 기울기를 계산합니다.
  4. 하락형이 형성되는지 판단하기 위해: 두 개의 고점 감소와 두 개의 저점 감소가 필요하며, 상향 트렌드 라인의 기울기는 하향 트렌드 라인의 기울기보다 작습니다.
  5. 가격 상승이 트렌드 라인을 넘어서면 구매 신호를 발동합니다.
  6. 입시 가격에 기반한 Stop Loss 비율을 설정합니다.

전략적 이점

  1. 동적으로 시장 구조를 식별: 전략은 인적 개입 없이 가격 구조의 중요한 지점을 자동으로 식별할 수 있습니다.
  2. 트렌드 반전 캡처: 일반적으로 위험과 수익의 관계로 높은 거래 기회인 하향 트렌드의 잠재적인 반전 기회를 포착하는 데 초점을 맞추고 있습니다.
  3. 정확한 신호 생성: 수학적인 방법을 통해 트렌드 라인 위치와 브레이크 포인트의 정확한 계산
  4. 리스크 관리가 완벽합니다: 거래 당 위험을 효과적으로 제어할 수 있는 사전 설정된 스톱 스톱스 메커니즘을 포함합니다.
  5. 체계화 된 운영: 전략 논리가 완전히 체계화 되어 있으며, 감정적 인 간섭을 피합니다.

전략적 위험

  1. 가짜 브레이크 위험: 시장에서 가짜 브레이크가 발생할 수 있으며, 이는 잘못된 신호로 이어질 수 있습니다.
  2. 매개변수 민감도: 전략의 효과는 매개변수 설정에 민감하며, 다양한 시장 환경에 따라 매개변수 조정이 필요할 수 있습니다.
  3. 시장 조건 의존성: 전략이 흔들리는 시장에서 너무 많은 잘못된 신호를 일으킬 수 있다.
  4. 스톱로스 위험: 급격한 움직임으로 인해 실제 스톱로스 가격 경사가 발생할 수 있습니다.
  5. 거래 비용의 영향: 자주 거래하면 거래 비용이 더 높을 수 있습니다.

전략 최적화 방향

  1. 신호 확인 메커니즘: 교량, 동력 등 지표를 추가할 수 있다.
  2. 동적 변수 최적화: 시장의 변동에 따라 변수를 조정하는 적응 메커니즘을 도입
  3. 다중 시간 주기의 검증: 다중 시간 주기의 확인 메커니즘을 추가하여 신호 신뢰성을 향상시킨다.
  4. 정지 손실을 개선: 동적 정지 손실을 사용할 수 있습니다.
  5. 시장 환경 필터: 트렌드 필터를 추가하여 적절한 시장 환경에서 거래

요약하다

이것은 합리적으로 설계된 트렌드 트레이딩 전략이며, 전통적인 기술 분석 방법을 프로그래밍 방식으로 구현한다. 전략의 장점은 시장 구조를 자동으로 식별하고 잠재적인 트렌드 반전 기회를 잡을 수 있다는 것이다. 그러나 가짜 돌파구 및 변수 최적화와 같은 문제에 주의를 기울여야 한다. 이 전략은 더 나은 최적화 및 개선으로 실제 거래에서 더 나은 효과를 얻을 수 있다.

전략 소스 코드
/*backtest
start: 2025-04-11 00:00:00
end: 2025-07-10 00:00:00
period: 10m
basePeriod: 10m
exchanges: [{"eid":"Binance","currency":"BTC_USDT","balance":200000}]
*/

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

//@version=6
strategy("Falling Wedge Strategy by Nitin", overlay=true)

// Input parameters
leftBars = input.int(5, "Left Bars for Pivot", minval=1, maxval=20)
rightBars = input.int(5, "Right Bars for Pivot", minval=1, maxval=20)
takeProfitPercent = input.float(6, "Take Profit %", minval=0.1, maxval=100)/100
stopLossPercent = input.float(2, "Stop Loss %", minval=0.1, maxval=100)/100

// Global variables
var float buyPrice = na

// Detect pivot highs and lows
ph = ta.pivothigh(leftBars, rightBars)
pl = ta.pivotlow(leftBars, rightBars)

// Track last two pivot highs
var float[] highs = array.new_float()
var int[] highIndices = array.new_int()
if not na(ph)
    array.unshift(highs, ph)
    array.unshift(highIndices, bar_index[rightBars])
    if array.size(highs) > 2
        array.pop(highs)
        array.pop(highIndices)

// Track last two pivot lows
var float[] lows = array.new_float()
var int[] lowIndices = array.new_int()
if not na(pl)
    array.unshift(lows, pl)
    array.unshift(lowIndices, bar_index[rightBars])
    if array.size(lows) > 2
        array.pop(lows)
        array.pop(lowIndices)



// Calculate trendlines and detect falling wedge pattern
isFallingWedge = false
var float currentUpper = na
var float currentLower = na

if array.size(highs) >= 2 and array.size(lows) >= 2
    h1 = array.get(highs, 0)
    h2 = array.get(highs, 1)
    i1 = array.get(highIndices, 0)
    i2 = array.get(highIndices, 1)
    
    l1 = array.get(lows, 0)
    l2 = array.get(lows, 1)
    j1 = array.get(lowIndices, 0)
    j2 = array.get(lowIndices, 1)
    
    m_upper = (h1 - h2) / (i1 - i2)
    m_lower = (l1 - l2) / (j1 - j2)
    
    currentUpper := h2 + m_upper * (bar_index - i2)
    currentLower := l2 + m_lower * (bar_index - j2)
    
    // Falling wedge pattern condition
    isFallingWedge := h1 < h2 and l1 < l2 and m_upper < m_lower and m_upper < 0 and m_lower < 0

// Trading strategy execution
if isFallingWedge and ta.crossover(close, currentUpper) and strategy.position_size == 0
    strategy.entry("Buy", strategy.long)
    buyPrice := close
    strategy.exit("Take Profit/Stop Loss", "Buy", stop=buyPrice * (1 - stopLossPercent), limit=buyPrice * (1 + takeProfitPercent))

// Plotting
plot(strategy.position_size > 0 ? buyPrice * (1 - stopLossPercent) : na, "Stop Loss", color=color.red, linewidth=2)
plot(strategy.position_size > 0 ? buyPrice * (1 + takeProfitPercent) : na, "Take Profit", color=color.green, linewidth=2)