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

동적 격자 위치 크기 전략을 따르는 경향

저자:차오장, 날짜: 2024-12-12 11:19:17
태그:TTMEMAGRIDDCAATRSMA

img

전반적인 설명

이 전략은 TTM 지표에 기반한 동적 그리드 거래 시스템으로, 상승과 하락의 기하급수적 이동 평균 (EMA) 을 계산하여 시장 트렌드 방향을 결정하고, 동적으로 업데이트 된 기본 가격 주위에서 그리드 거래 시스템을 배포합니다. 그리드의 방향과 가격 수준은 트렌드에 따라 조정되며, 가격이 미리 정의된 그리드 수준을 넘으면 거래를 실행하며, 각 거래는 계좌 자본의 고정 비율을 위험에 빠뜨립니다.

전략 원칙

핵심 논리는 다음 단계를 통해 구현된 TTM 상태 계산에 있습니다.

  1. ttmPeriod 매개 변수를 기반으로 두 개의 EMA를 계산합니다: 최저 (lowMA) 와 최고 (highMA) 의 EMA
  2. highMA와 lowMA 사이의 두 개의 임계 수준을 정의합니다.
    • 아래 3위: 밑에서 1/3 위치
    • 높다 3번째: 아래쪽에서 2/3 위치
  3. 이 문턱에 대한 폐쇄 가격 지위에 기초하여 TTM 상태를 결정합니다.
    • Close가 high보다 높을 때 1을 반환합니다.
    • 닫는 값이 낮을 때 0 (하락 추세) 를 반환합니다.
    • Close가 lowThird와 highThird 사이에 있을 때 -1 (중립 상태) 를 반환합니다.

네트워크 거래 시스템은 TTM 상태에 따라 동적으로 조정됩니다.

  1. TTM 상태가 변경될 때 네트워크 기본 가격과 방향을 업데이트합니다.
  2. 그리드 방향 및 간격에 기초하여 구매/판매 가격 수준을 계산합니다.
  3. 가격이 그리드 레벨을 넘을 때 해당 구매 또는 판매 거래를 실행합니다.

전략적 장점

  1. 강력한 동적 적응력: 전략은 시장 추세에 따라 네트워크 방향과 가격 수준을 동적으로 조정하여 적응력과 수익성을 향상시킬 수 있습니다.
  2. 강력한 리스크 제어: 거래당 리스크 노출을 효과적으로 제어하는 고정 비율 포지션 크기를 사용합니다.
  3. 좋은 매개 변수 조정성: TTM 기간, 그리드 레벨 및 간격과 같은 주요 매개 변수는 다른 시장 조건에 최적화 될 수 있습니다.
  4. 명확한 실행 메커니즘: 거래 신호는 명확하고 실행 논리는 간단하고 직관적입니다. 백테스팅과 라이브 거래를 용이하게합니다.

전략 위험

  1. 트렌드 탐지 지연: EMA 기반 TTM 지표는 고유 한 지연을 가지고 있으며, 트렌드 전환점에 지연 신호를 유발할 수 있습니다.
  2. 시세 위험: 시세 시장에서 그리드 방향 전환이 빈번하게 발생하면 과잉 거래 및 과도한 수수료가 발생할 수 있습니다.
  3. 자본 관리 압력: 여러 네트워크 레벨을 동시에 운영하려면 상당한 자본이 필요하며 전략 실행 가능성에 영향을 미칠 수 있습니다.
  4. 유동성 저하 조건에서 높은 주파수 네트워크 거래가 전략 성과에 영향을 미치는 중요한 유동성 영향을 받을 수 있습니다.

전략 최적화 방향

  1. 트렌드 탐지 최적화:
    • 트렌드 탐지 정확성을 향상시키기 위해 여러 시간 프레임 분석을 통합하십시오.
    • 트렌드 확인을 위해 RSI, MACD와 같은 다른 기술 지표와 결합
  2. 그리드 파라미터 최적화:
    • 변동성에 따라 그리드 간격을 동적으로 조정합니다.
    • 적응력 있는 네트워크 레벨 조정 메커니즘을 구현
  3. 자본 관리 개선:
    • 동적 위치 할당을 구현
    • 리스크 패리티 메커니즘 추가
  4. 집행 메커니즘 강화:
    • 스톱 로스 및 수익 취득 메커니즘을 추가
    • 주문 실행 시기를 최적화

요약

이 전략은 TTM 트렌드 탐지와 동적 그리드 트레이딩을 결합하여 적응력 있고 위험 제어 된 거래 시스템을 만듭니다. 그리드 방향과 가격 수준을 동적으로 조정함으로써 전략은 다른 시장 환경에 효과적으로 적응 할 수 있습니다. 고유한 위험이 존재하지만 적절한 매개 변수 설정 및 최적화 조치를 통해 전략은 좋은 실용적 가치와 개발 잠재력을 보여줍니다.


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

//@version=5
strategy("TTM Grid Strategy", overlay=true)

// Input parameters
int ttmPeriod = input.int(6, minval=1, title="TTM Period")
int gridLevels = input.int(5, minval=2, title="Grid Levels")
float gridSpacing = input.float(0.01, minval=0.0001, title="Grid Spacing (%)")

// Calculate TTM State
ttmState() =>
    lowMA = ta.ema(low, ttmPeriod)
    highMA = ta.ema(high, ttmPeriod)
    lowThird = (highMA - lowMA) / 3 + lowMA
    highThird = 2 * (highMA - lowMA) / 3 + lowMA

    if close > highThird
        1
    else if close < lowThird
        0
    else
        -1

// State tracking variables
var float gridBasePrice = 0.0
var int gridDirection = -1

// Determine grid state
updateGridState(float currentClose, int currentState) =>
    float newBasePrice = gridBasePrice
    int newDirection = gridDirection

    if currentState != -1 and currentState != gridDirection
        newBasePrice := currentClose
        newDirection := currentState
    
    [newBasePrice, newDirection]

// Calculate grid levels
calcGridLevels(float basePrice, int direction, int levels) =>
    float[] buyLevels = array.new_float(levels)
    float[] sellLevels = array.new_float(levels)

    for i = 1 to levels
        multiplier = i * gridSpacing
        if direction == 1  // Buy grid
            array.set(buyLevels, i-1, basePrice * (1 - multiplier))
            array.set(sellLevels, i-1, basePrice * (1 + multiplier))
        else  // Sell grid
            array.set(buyLevels, i-1, basePrice * (1 + multiplier))
            array.set(sellLevels, i-1, basePrice * (1 - multiplier))
    
    [buyLevels, sellLevels]

// Execute grid trades
executeGridTrades(float basePrice, int direction, int levels) =>
    [buyLevels, sellLevels] = calcGridLevels(basePrice, direction, levels)

    for i = 0 to levels - 1
        float buyLevel = array.get(buyLevels, i)
        float sellLevel = array.get(sellLevels, i)

        if direction == 1  // Buy grid
            if low <= buyLevel
                strategy.entry("GridBuy" + str.tostring(i), strategy.long, comment="Buy Level " + str.tostring(i))
            if high >= sellLevel
                strategy.entry("GridSell" + str.tostring(i), strategy.short, comment="Sell Level " + str.tostring(i))
        else  // Sell grid
            if high >= buyLevel
                strategy.entry("GridBuy" + str.tostring(i), strategy.long, comment="Buy Level " + str.tostring(i))
            if low <= sellLevel
                strategy.entry("GridSell" + str.tostring(i), strategy.short, comment="Sell Level " + str.tostring(i))

// Main strategy logic
currentState = ttmState()
[newGridBasePrice, newGridDirection] = updateGridState(close, currentState)

// Update global variables
if newGridBasePrice != gridBasePrice
    gridBasePrice := newGridBasePrice
if newGridDirection != gridDirection
    gridDirection := newGridDirection

// Execute grid trades
executeGridTrades(newGridBasePrice, newGridDirection, gridLevels)

// Visualization
plotColor = newGridDirection == 1 ? color.green : color.red
plot(newGridBasePrice, color=plotColor, style=plot.style_cross)

관련

더 많은