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

피보트 종료와 피보트 역전 전략

저자:차오장, 날짜: 2024-04-30 15:57:54
태그:

img

전반적인 설명

이 전략은 시장 반전 지점을 식별하고 이를 기반으로 거래 결정을 내리기 위해 피보트 포인트를 사용합니다. 왼쪽의 마지막 4 촛불 내에서 피보트 하이가 형성되면 전략은 긴 포지션으로 진입합니다. 왼쪽의 마지막 4 촛불 내에서 피보트 로우가 형성되면 전략은 짧은 포지션으로 진입합니다. 스톱 손실은 입상 가격보다 높거나 낮게 한 틱 크기 (syminfo.mintick) 로 설정됩니다. 두 가지 출구 조건이 있습니다: 1) 다음 반대 피보트 포인트가 나타날 때 출구; 2) 부동 손실이 30%에 도달하면 출구.

전략 원칙

  1. ta.pivothigh (() 및 ta.pivotlow (() 함수를 사용하여 왼쪽의 4 개의 촛불과 오른쪽의 2 개의 촛불 범위 내에서 Pivot High (swh) 및 Pivot Low (swl) 를 계산합니다.
  2. 피보트 최고값이 존재할 때 (swh_cond), 최고값 (hprice) 을 업데이트하고, 현재 최고값이 이전 최고값보다 높을 때, 긴 입력 조건 (le) 을 활성화합니다.
  3. 롱 엔트리 조건 (le) 이 충족되면, 피보트 하위보다 한 틱 사이즈 (syminfo.mintick) 에서 롱 포지션을 입력합니다.
  4. 마찬가지로, 피보트 로우가 존재할 때 (swl_cond), 가장 낮은 가격 (lprice) 을 업데이트하고, 현재 로우가 이전 로우보다 낮을 때, 짧은 엔트리 조건 (se) 을 활성화합니다.
  5. 짧은 입상 조건 (se) 이 충족되면 피보트 로우 아래의 한 틱 사이즈 (syminfo.mintick) 에서 짧은 포지션을 입력합니다.
  6. exitAtNextPivot() 함수에서, 긴 포지션을 유지한다면, 다음 피보트 최하위보다 한 틱 크기로 스톱 손실을 설정합니다. 짧은 포지션을 유지한다면, 다음 피보트 최하위보다 한 틱 크기로 스톱 손실을 설정합니다.
  7. exitIfProfitLessThirtyPercent() 함수에서 긴 포지션과 짧은 포지션의 이익과 손실 비율을 계산하고 손실이 30%를 초과하면 포지션을 닫습니다.

전략적 장점

  1. 피보트 포인트는 시장의 지원 및 저항 수준을 잘 반영할 수 있으며 일반적으로 사용되는 기술 분석 지표이며 시장에서 특정 인정을 받고 있습니다.
  2. 피보트 포인트의 돌파구로 진입하면 시장 전환 기회를 잡을 수 있습니다.
  3. 두 가지 출구 조건이 설정됩니다. 하나는 기술적 출구에 대한 다음 반대 지점과 다른 하나는 위험 통제 출구에 대한 손실 비율에 기초하여 전략 마감량을 어느 정도 제어 할 수 있습니다.

전략 위험

  1. 피보트 포인트 지표 자체는 특정 지연과 빈번한 신호 문제를 가지고 있으며 변동 시장에서 잘 수행하지 않을 수 있습니다.
  2. 4개의 촛불과 2개의 촛불의 고정된 계산 매개 변수는 특정 적응력과 유연성이 부족하기 때문에 모든 시장 조건에 적용되지 않을 수 있습니다.
  3. 스톱 로스는 엔트리 가격 (하나의 틱 사이즈) 에 가깝게 설정되며, 시장의 격렬한 변동 중에 버려질 수 있습니다.
  4. 30% 손실 중지 설정은 너무 느슨하고 큰 드래운도운도와 함께 될 수 있습니다.

전략 최적화 방향

  1. 다른 종류의 피보트 포인트 지표, 예를 들어 인자 피보트 포인트, 가중된 피보트 포인트 등을 사용하여 지표의 민감성과 시기를 향상시키십시오.
  2. 왼쪽과 오른쪽 촛불의 수는 입력 매개 변수로 사용될 수 있으며, 최적 값은 매개 변수 최적화를 통해 찾을 수 있습니다.
  3. 스톱 로스 포지션은 ATR 또는 퍼센트 스톱 로스로 최적화 될 수 있습니다. 전자는 시장 변동성의 변화에 적응적으로 조정 할 수 있으며 후자는 제어 가능한 범위 내에서 위험을 제한 할 수 있습니다.
  4. 30%의 손실 중지 조건은 전략 마감량을 줄이기 위해 강화 될 수 있습니다. 또한 부동 수익과 손실을 관리하기 위해 수익 비율 중지 조건이 추가 될 수 있습니다.
  5. 트렌드 필터링과 변동성 필터링과 같은 다른 필터링 조건은 신호 품질을 향상시키기 위해 피보트 포인트 브레이크오웃을 기반으로 덮어 놓을 수 있습니다.

요약

이 전략은 피보트 포인트 지표에 기반한 양방향 거래 시스템을 구축하고, 피보트 최고에서 길고 피보트 최저에서 짧게 시장 반전 기회를 포착합니다. 전략은 특정 이론적 근거와 실용적 가치를 가지고 있지만, 피보트 포인트 지표 자체의 한계로 인해 전략은 실제 운영에서 일부 위험과 도전에 직면 할 수 있습니다. 피보트 포인트 지표 유형, 매개 변수, 필터링 조건, 스톱 손실 및 수익 취득 등을 최적화함으로써 전략의 견고성과 수익성을 더욱 향상시킬 것으로 예상됩니다.


/*backtest
start: 2023-04-24 00:00:00
end: 2024-04-29 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Pivot Reversal Strategy with Pivot Exit", overlay=true)

leftBars = input(4)
rightBars = input(2)

var float dailyEquity = na

// Reset equity to $10,000 at the beginning of each day
isNewDay = ta.change(time("D")) != 0
if (isNewDay)
    dailyEquity := 10000

// Calculate pivot highs and lows
swh = ta.pivothigh(leftBars, rightBars)
swl = ta.pivotlow(leftBars, rightBars)

// Define long entry condition
swh_cond = not na(swh)
hprice = 0.0
hprice := swh_cond ? swh : hprice[1]
le = false
le := swh_cond ? true : (le[1] and high > hprice ? false : le[1])

// Enter long position if long entry condition is met
if (le)
    strategy.entry("PivRevLE", strategy.long, comment="EnterLong", stop=hprice + syminfo.mintick)

// Define short entry condition
swl_cond = not na(swl)
lprice = 0.0
lprice := swl_cond ? swl : lprice[1]
se = false
se := swl_cond ? true : (se[1] and low < lprice ? false : se[1])

// Enter short position if short entry condition is met
if (se)
    strategy.entry("PivRevSE", strategy.short, comment="EnterShort", stop=lprice - syminfo.mintick)

// Exit condition: Exit at the next pivot point
exitAtNextPivot() =>
    if strategy.opentrades > 0
        if strategy.position_size > 0
            // Exiting long position at next pivot low
            if not na(swl)
                strategy.exit("ExitLong", "PivRevLE", stop=swl - syminfo.mintick)
        else
            // Exiting short position at next pivot high
            if not na(swh)
                strategy.exit("ExitShort", "PivRevSE", stop=swh + syminfo.mintick)

// Call exitAtNextPivot function
exitAtNextPivot()

// Exit condition: Exit if profit is less than 30%
exitIfProfitLessThanThirtyPercent() =>
    if strategy.opentrades > 0
        if strategy.position_size > 0
            // Calculate profit percentage for long position
            profit_percentage_long = (close - strategy.position_avg_price) / strategy.position_avg_price * 100
            // Exiting long position if profit is less than 30%
            if profit_percentage_long < -30
                strategy.close("PivRevLE")
        else
            // Calculate profit percentage for short position
            profit_percentage_short = (strategy.position_avg_price - close) / strategy.position_avg_price * 100
            // Exiting short position if profit is less than 30%
            if profit_percentage_short < -30
                strategy.close("PivRevSE")

// Call exitIfProfitLessThanThirtyPercent function
exitIfProfitLessThanThirtyPercent()


더 많은