가치 돌파 추적 손절매 전략: 지역적 극단값 기반 자동 거래 로봇

TP SL TSL BTC 局部极值 追踪止损 挂单交易 时间过滤 价格突破
생성 날짜: 2025-04-07 13:52:57 마지막으로 수정됨: 2025-04-07 13:52:57
복사: 0 클릭수: 413
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

가치 돌파 추적 손절매 전략: 지역적 극단값 기반 자동 거래 로봇 가치 돌파 추적 손절매 전략: 지역적 극단값 기반 자동 거래 로봇

개요

가치 돌파 트래킹 스톱 손실 전략은 디지털 자산 거래를 위해 특별히 설계된 양적 거래 시스템으로, 지역 가격 극한 위치에 기둥을 배치하여 시장 돌파 행태를 포착한다. 이 전략은 또한 포지션이 기본 수익 수준에 도달하면 보호 장치를 시작하여 수익을 잠금하는 손실 추적 메커니즘을 구현한다. 이 방법은 가격 돌파 거래와 위험 관리의 장점을 결합하여 거래자에게 자동화 된 거래 솔루션을 제공합니다.

전략 원칙

이 전략은 가격 행동과 동적 위험 관리 원칙에 기초하고 있으며, 핵심 논리는 다음과 같은 몇 가지 핵심 부분으로 나눌 수 있습니다.

  1. 지역 극한값 식별전략은 정의된 시간창을 이용하여 지역 최고점과 최저점을 계산하고 잠재적인 돌파점의 지점으로 사용한다. 구체적으로, 그것은 지역 최고점과 최저점을 결정하기 위해 K선 ((BarsN * 2 + 1) 을 사용한다.

  2. 상자 설정

    • 구매 중지 (BuyStop): 현재 가격이 지역 최고점보다 낮을 때 주문 거리를 완충한 지점에서 구매 중지 명령을 설정한다.
    • 세일 스톱 (SellStop): 현재 가격이 지역 하위점보다 높을 때 지역 하위점 위치에서 세일 스톱을 세울 수 있습니다.
  3. 시간 필터전략: 거래자가 거래 시간을 설정하여 지정된 시간 범위 내에서만 거래할 수 있도록 허용합니다. 이것은 원하지 않는 거래 기간을 피하는 데 도움이됩니다.

  4. 이윤/손실 수준

    • 정지점 (TP): 현재 가격의 일정 퍼센트 (TPasPctBTC) 로 계산한다.
    • 정지점 (SL): 현재 가격 (SLasPctBTC) 의 일정 비율로 계산된다.
    • 주문 거리가 완충 구역: 주문이 너무 일찍 발동되는 것을 방지하기 위해, 정지점의 절반까지 설정한다.
  5. 손해 방지 메커니즘 추적

    • 트리거 포인트 (TriggerPoints): 이득이 이 수준에 도달하면, 추적 중지 손실이 시작됩니다.
    • 추적 거리 ((TslPoints): 추적 스톱 로즈와 현재 가격 사이의 거리.
    • 다단계 포지션의 경우, 이윤이 트리거 포인트를 초과했을 때, 현재 가격으로 마이너스 추적 거리를 빼면 스톱 로스 가격으로 니다.
    • 공시상황의 경우, 이윤이 트리거 포인트를 초과할 때, 현재 가격과 추적 거리를 사용하여 스톱 로스 가격으로 니다.

전략적 이점

코드의 심층적인 분석을 통해, 이 전략은 다음과 같은 중요한 장점을 보여준다:

  1. 자동으로 돌파구를 잡습니다.이 전략은 시장의 수동 모니터링을 하지 않고 가격 돌파구를 자동으로 포착할 수 있습니다.

  2. 동적 위험 관리: 현재 가격의 비율에 기반한 스톱 스톱 손실 설정을 채택하여, 위험 관리를 더 유연하게 하고, 다른 가격 수준에 적응한다.

  3. 이윤 보호 장치: 스톱 로즈 기능을 추적함으로써, 전략은 수익을 유지하면서 이미 얻은 수익을 효과적으로 고정하고, 회수량을 줄일 수 있습니다.

  4. 시간 필터 기능거래자는 시장 특성에 따라 최적의 거래 시간을 선택할 수 있으며, 낮은 변동성이나 예측할 수 없는 시간대에 거래하는 것을 피할 수 있습니다.

  5. 매우 적응력이 좋다: 전략 매개 변수는 시장 조건에 따라 조정할 수 있습니다. 예를 들어, 지역 극한의 계산 창, 스톱 스톱 손실 비율 등을 조정하여 다른 시장 환경에 적합하도록 조정합니다.

  6. 엄격하게 징계합니다.: 자동화 전략으로서, 감정적 요소가 거래 결정에 미치는 영향을 제거하고, 사전 설정된 규칙에 따라 엄격하게 거래한다.

전략적 위험

이 전략은 여러 장점이 있지만, 몇 가지 잠재적인 위험과 한계가 있습니다.

  1. 가짜 침입 위험: 시장에서 가짜 브레이크가 발생할 수 있으며, 전략이 바람직하지 않은 거래에 들어갈 수 있습니다. 해결책은 확인 지표를 늘리거나, 가짜 브레이크가 유발되는 가능성을 줄이기 위해 버퍼 영역에서 주문 거리를 조정하는 것입니다.

  2. 매개변수 민감도정책 성능은 바스N, TPasPctBTC 및 SLasPctBTC와 같은 파라미터 설정에 크게 의존합니다. 부적절한 파라미터로 인해 성능이 떨어질 수 있습니다.

  3. 불완전한 재무 관리: 코드에서 RiskPercent 매개 변수가 정의되어 있지만, 실제적으로 포지션 크기를 계산하는 데 적용되지 않습니다.

  4. 극한 상황에 대응할 수 있는 능력은 제한되어 있습니다.높은 변동성이나 극단적인 시장 조건에서, 단순한 지역 극한 돌파구와 고정된 퍼센트 스톱로드는 위험을 효과적으로 관리하는 데 충분하지 않을 수 있습니다.

  5. 슬라이드 포인트 및 실행 지연: 실제 거래에서, 주문 실행은 슬라이드 또는 지연을 경험할 수 있으며, 이는 전략 성능에 영향을 미칩니다.

  6. 단일 시장 의존: 전략은 특정 자산에 맞게 설계되어 다른 시장 특성을 가진 다른 자산에는 적용되지 않을 수 있습니다.

전략 최적화 방향

코드 분석을 바탕으로, 이 전략은 다음과 같은 방향으로 최적화될 수 있습니다:

  1. 동적 위치 관리: RiskPercent 파라미터에 기반한 동적 포지션 크기를 계산하고, 계정 규모와 현재 시장 리스크에 따라 포지션 크기를 조정하여 보다 세밀한 위험 통제를 구현한다.

  2. 다중 인증 메커니즘: 추가적인 기술 지표를 도입하여 거래량 돌파구, 동력 지표 또는 트렌드 지표와 같은 돌파구를 확인하여 가짜 돌파구 거래를 줄이십시오.

  3. 적응 변수: 시장의 변동성이나 다른 시장 특성에 따라 자동으로 조정되는 매개 변수를 도입하여 다양한 시장 환경에 더 잘 적응할 수 있도록합니다.

  4. 을 제거하는 전략: 세트 중지 메커니즘을 구현하여 일부 포지션이 다른 수익 수준에서 퇴출할 수 있도록 하고, 일부 수익을 잠금화하면서 더 큰 수익 공간을 유지할 수 있다.

  5. 시장 상태 필터: 시장 상태를 증가 시키기 (트렌드, 흔들림 등) 판단, 다른 시장 상태에서 전략 파라미터를 조정하거나 거래를 중지

  6. 손해 방지 최적화: ATR (진실 변동의 폭) 또는 다른 변동성 지표에 기반한 동적 상쇄를 구현하여 상쇄를 합리적으로 만듭니다.

  7. 회수 및 최적화 프레임워크더 포괄적인 회수 프레임워크를 개발하고, 전략이 다른 기간, 다른 변수 아래에서 어떻게 작동하는지 평가하고, 최적의 변수 조합을 찾습니다.

요약하다

가치 뚫림 추적 스톱 전략은 지역 극한 뚫림을 포착하고 스톱 추적을 적용하여 위험을 관리하기 위해 정교하게 설계된 자동화 된 거래 시스템입니다. 그것의 핵심 장점은 자동 실행, 동적 위험 관리 및 수익 보호 장치에 있습니다.

그러나 전략의 효과는 파라미터 설정과 시장 조건에 크게 의존합니다. 동적 포지션 관리, 여러 확인 메커니즘 및 적응 파라미터와 같은 권장 된 최적화 조치를 시행함으로써 전략의 거칠성과 적응력을 크게 향상시킬 수 있습니다.

거래자에게는 현장 적용 전에 충분한 피드백을 수행하여 현재 시장 환경에 가장 적합한 파라미터 조합을 찾고 거래 신호를 확인하기 위해 다른 분석 도구와 결합하는 것을 고려하는 것이 좋습니다. 동시에, 전략의 성능을 지속적으로 모니터링하고 평가하며, 전략의 유효성을 유지하기 위해 시장 변화에 따라 파라미터를 적시에 조정하십시오.

전략 소스 코드
/*backtest
start: 2025-01-01 00:00:00
end: 2025-04-06 00:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("BTC Trading Robot", overlay=true, pyramiding=1, initial_capital=100000)

//============== Input Groups ==============//
// Trading Profile
group_trading = "BTC"
systemType = input.int(1, title="Trading System (1:BTC)", group=group_trading)

// Common Trading Inputs
group_common = "Trading Inputs"
RiskPercent   = input.float(4.0, title="Risk as % of trading capital", group=group_common)
TradeComment  = input.string("BTC trading robot", title="Trade Comment", group=group_common)
SHInput       = input.int(0, title="Start Hour (0 = no filter)", group=group_common)
EHInput       = input.int(0, title="End Hour (0 = no filter)", group=group_common)

// Gold Related Inputs
group_BTC = "BTC Related Input"
TPasPctBTC         = input.float(0.2, title="TP as % of Price", group=group_BTC)
SLasPctBTC         = input.float(0.1, title="SL as % of Price", group=group_BTC)
TSLasPctofTPBTC   = input.float(5.0, title="Trail SL as % of TP", group=group_BTC)
TSLTgrasPctofTPBTC = input.float(7.0, title="Trail Tgra  SL as % of TP", group=group_BTC)

// Other parameters
BarsN = 5
OrderDistPoints = 100.0

//============== Calculate Trade Parameters ==============//
var float Tppoints = 0.0
var float Slpoints = 0.0
var float TslTriggerPoints = 0.0
var float TslPoints = 0.0

price = close

// Adjust parameters based on system type (using 1 for Gold)
if systemType == 1
    Tppoints := price * TPasPctBTC
    Slpoints := price * SLasPctBTC
    OrderDistPoints := Tppoints / 2.0
    TslPoints := Tppoints * TSLTgrasPctofTPBTC / 100.0
    TslTriggerPoints := Tppoints * TSLTgrasPctofTPBTC / 100.0

//============== Time Filter ==============//
currentHour = hour(time)
inSession = true
if SHInput != 0 and currentHour < SHInput
    inSession := false
if EHInput != 0 and currentHour >= EHInput
    inSession := false

//============== Find Local High and Low ==============//
localHigh = ta.highest(high, BarsN * 2 + 1)
localLow  = ta.lowest(low,  BarsN * 2 + 1)

//============== Entry Orders ==============//
if inSession and strategy.position_size == 0
    // For a BuyStop order: only submit if current price is less than the desired entry level minus a buffer.
    if price < localHigh - OrderDistPoints * syminfo.mintick
        strategy.order("BuyStop", strategy.long, stop=localHigh, comment="BuyStop")
    // For a SellStop order: only submit if current price is greater than the desired entry level plus a buffer.
    if price > localLow + OrderDistPoints * syminfo.mintick
        strategy.order("SellStop", strategy.short, stop=localLow, comment="SellStop")
    
//============== Trailing Stop Logic ==============//
if strategy.position_size > 0  // Long positions
    longProfit = price - strategy.position_avg_price
    if longProfit > TslTriggerPoints * syminfo.mintick
        strategy.exit("Long Exit", from_entry="BuyStop", stop=price - TslPoints * syminfo.mintick, limit=strategy.position_avg_price + Tppoints * syminfo.mintick)
        
if strategy.position_size < 0  // Short positions
    shortProfit = strategy.position_avg_price - price
    if shortProfit > TslTriggerPoints * syminfo.mintick
        strategy.exit("Short Exit", from_entry="SellStop", stop=price + TslPoints * syminfo.mintick, limit=strategy.position_avg_price - Tppoints * syminfo.mintick)