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

칼레드 타미의 아벨레네다-스토이코프 전략

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

img

전반적인 설명

칼레드 타미의 아벨레네다-스토이코프 전략은 아벨레네다-스토이코프 모형을 기반으로 한 양적 거래 전략이다. 전략은 거래 비용을 고려하면서 중간 가격, 입찰 가격, 요청 가격을 계산하여 구매 및 판매 신호를 결정한다. 전략의 주요 아이디어는 가격이 특정 임계치로 입찰 가격보다 낮을 때 구매하고 가격이 특정 임계치로 요청 가격보다 높을 때 판매하여 스프레드 이익을 포착하는 것이다.

전략 원칙

이 전략의 핵심은 다음과 같은 단계를 통해 제안 및 요청 가격을 계산하는 Avellaneda-Stoikov 모델입니다.

  1. 현재 가격과 이전 가격의 평균인 중간 가격을 계산합니다.
  2. 중간 가격에서 감마, 시그마, T, 그리고 k를 포함하는 제곱근 항을 빼고 거래 비용을 빼서 입찰 가격을 계산합니다.
  3. 중간 가격에 감마, 시그마, T, 그리고 k를 포함하는 제곱근 항을 더하고 거래 비용을 더하여 요청 가격을 계산합니다.
  4. 가격값이 입찰 가격 미만 한계 M보다 낮을 때 구매 신호를 생성합니다. 가격이 청구 가격과 한계 M보다 높을 때 판매 신호를 생성합니다.

전략적 장점

  1. 이 전략은 아벨레네다-스토이코프 모델에 기반을 두고 있으며, 이는 고전적인 시장 형성 전략이며, 탄탄한 이론적 기초를 가지고 있습니다.
  2. 이 전략은 거래 비용의 영향을 고려하여 실제 거래 상황에 더 현실적으로 적용됩니다.
  3. 임계 M를 설정함으로써 전략의 감수성은 다양한 시장 환경에 적응하도록 유연하게 조정될 수 있습니다.
  4. 전략 논리는 명확하고 이해하기 쉽고 구현하기 쉽습니다.

전략 위험

  1. 전략의 성능은 감마, 시그마, T, k, M와 같은 매개 변수 선택에 달려 있습니다. 잘못된 매개 변수 설정으로 인해 전략 성능이 떨어질 수 있습니다.
  2. 이 전략은 시장 유동성의 영향을 고려하지 않습니다. 유동성이 충분하지 않은 경우 예상 가격으로 거래 할 수 없습니다.
  3. 이 전략은 낮은 거래 지연과 높은 실행 효율을 요구하는 고주파 거래 전략으로 구현하기가 어렵습니다.

전략 최적화 방향

  1. 기계 학습 알고리즘을 도입하여 다른 시장 조건에 적응하도록 전략 매개 변수를 동적으로 조정합니다.
  2. 다른 기술 지표 또는 시장 미세 구조 정보를 결합하여 신호의 정확성을 향상시킵니다.
  3. 거래 수행 알고리즘을 최적화하여 거래 비용을 줄이고 전략 수익을 향상시킵니다.
  4. 위험 관리 모듈을 도입하는 것을 고려하여 전략 마감 및 위험 노출을 제어합니다.

요약

칼레드 타미의 아벨레네다-스토이코프 전략은 고전적인 시장 제작 모델을 기반으로 한 양적 거래 전략이다. 거래 비용을 고려하면서 입찰 및 요청 가격을 계산하여 거래 신호를 생성한다. 전략의 장점은 탄탄한 이론적 기초, 명확한 논리 및 거래 비용을 고려하는 데 있다. 그러나 전략의 성능은 매개 변수 선택에 달려 있으며 높은 실행 효율성을 요구한다. 미래에, 전략은 기계 학습 알고리즘을 도입하고 거래 실행을 최적화하고 위험 관리 및 기타 방법을 도입함으로써 더 이상 최적화 될 수 있다.


/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Khaled Tamim's Avellaneda-Stoikov Strategy", overlay=true)

// Avellaneda-Stoikov model logic
avellanedaStoikov(src, gamma, sigma, T, k, M) =>
    midPrice = (src + src[1]) / 2
    sqrtTerm = gamma * sigma * sigma * T
    // Add 0.1% fee to bid and ask quotes
    fee = 0 // 0.1% fee
    bidQuote = midPrice - k * sqrtTerm - (midPrice * fee)
    askQuote = midPrice + k * sqrtTerm + (midPrice * fee)
    longCondition = src < bidQuote - M
    shortCondition = src > askQuote + M
    [bidQuote, askQuote]

// Define strategy parameters
gamma = input.float(2, title="Gamma")
sigma = input.float(8, title="Sigma")
T = input.float(0.0833, title="T")
k = input.float(5, title="k")
M = input.float(0.5, title="M")

// Calculate signals
[bidQuote, askQuote] = avellanedaStoikov(close, gamma, sigma, T, k, M)
longCondition = close < bidQuote - M
shortCondition = close > askQuote + M

// Plot signals
plotshape(series=longCondition ? low : na, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=shortCondition ? high : na, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")

// Plot bid and ask prices
plot(bidQuote, title="Bid Price", color=color.blue, linewidth=1)
plot(askQuote, title="Ask Price", color=color.red, linewidth=1)

// Plot inventory level as bars in a separate graph
plot(strategy.netprofit, title="Inventory", color=color.new(color.purple, 80), style=plot.style_columns)


// Strategy logic
if (longCondition)
    strategy.entry("Buy", strategy.long)

if (shortCondition)
    strategy.entry("Sell", strategy.short)

더 많은