알파트로스

[ArbLab] 1. Cointegration (4) Minimum Profit Strategy 본문

HudsonThames/ArbitrageLab

[ArbLab] 1. Cointegration (4) Minimum Profit Strategy

알파트로스 2024. 7. 4. 21:58
cointegration에서 spread 는 cointegration error로 두 단어는 혼용하여 사용됨

 

페어트레이딩의 가장 일반적인 전략중의 하나는 스프레드()가 균형 상태에서 충분히 멀리 떨어져 있을 때 Trade를 open하여 스프레드가 평균으로 회귀할 것을 예상하는 것이다. 이때 충분히 멀리 떨어졌을 때(=Boundary)을 사전적으로 잘 정의하는 것이 필요하다.이 경계값은 기간동안의 minimum profit에 영향을 준다.

  • 경계값이 크면 거래당 이익은 커지지만 거래 횟수가 작을 수 있다
  • 경계값이 낮으면 거래 횟수는 늘어나지만 거래당 이익이 작다
  • 특정 기간동안의 거래 횟수는 average trade duration과 average inter-trade interval 에 영향을 받는다

Minimum Profit Strategy는 cointegration error가 AR(1) process를 따를때 mean first-passage time의 기반하여 average trade duration, average inter-trade interval, average number of trades를 수치적으로 추정하여 총이익 최대화하는 Boundary 설정법에 대해 논의한다.


Assumption

  • 두 자산(\(S_1\)과 \(S_2\))의 가격은 관련 기간 동안 공적분되어 있다. 즉 장기적인 균형 관계가 존재한다는 것을 의미한다.
  • 공적분 오차는 정상적인 AR(1) 과정을 따른다. 즉 평균회귀하는 성질을 갖는다.
  • 공적분 오차는 대칭적으로 분포되어 있어 평균 양쪽에 최적의 경계값을 적용할 수 있다. 
  • 공매도가 허용되거나 브로커를 통해 가능하며, 공매도에 대한 이자가 부과되지 않고 거래 비용이 고려된다.
  •  공적분 계수 \(\beta > 0\)이며, 공적분 관계는 다음과 같이 정의된다.
    \[
        P_{S_1,t} - \beta P_{S_2,t} = \varepsilon_t
    \] 

Minimum Profit per Trade 

U-Trade 와 L-Trade

  • U-Trade : 공적분 오차 \(\varepsilon_t\)가 사전 설정된 상단 경계 \(U\)를 초과할 때 열리는 거래
    주식 \(S_1\): 매도 (short), 주식 \(S_2\): 매수 (long)
  • L-Trade : 공적분 오차 \(\varepsilon_t\)가 사전 설정된 하단 경계 \(L\)을 통과할 때 열리는 거래
    주식 \(S_1\): 매수 (long), 주식 \(S_2\): 매도 (short)

Minimum Profit per U-trade

  • 진입 시점 \(t_o\) : \(\varepsilon_t \geq U\)일 때 거래를 시작
    자산 \(S_1\)을 \(N\)만큼 매도, 자산 \(S_2\)을 \(\beta N\)만큼 매수합니다.
  • 청산 시점 \(t_c\) : \(\varepsilon_t \leq 0\)일 때 거래를 청산
  • 거래당 수익
    \begin{align*}
        P & = N (P_{S_1, t_o} - P_{S_1, t_c}) + \beta N (P_{S_2, t_c} - P_{S_2, t_o}) \\
          & = N (P_{S_1, t_o} - \beta P_{S_2, t_o}) - N (P_{S_1, t_c} - \beta P_{S_2, t_c}) \\
          & = N \varepsilon_{t_o} - N \varepsilon_{t_c} \\
          & \geq N U
    \end{align*}
    • 자산 \(S_1\)의 진입 시점 가격 \(P_{S_1, t_o}\)와 청산 시점 가격 \(P_{S_1, t_c}\) 간의 차이
      자산 \(S_2\)의 청산 시점 가격 \(P_{S_2, t_c}\)와 진입 시점 가격 \(P_{S_2, t_o}\) 간의 차이.
    • \(P_{S_1, t_o} - \beta P_{S_2, t_o} = \varepsilon_{t_o}\)와 \(P_{S_1, t_c} - \beta P_{S_2, t_c} = \varepsilon_{t_c}\)로 대체.
    • 스프레드의 진입 시점 공적분 오차와 청산 시점 공적분 오차의 차이로 수익 계산.
    • 진입 시점의 공적분 오차가 \(U\) 이상이고, 청산 시점의 공적분 오차가 0 이하이므로, 최소한 \(N U\)의 수익

Minimum Profit per L-trade 

  • 진입 시점 \(t_o\) : \(\varepsilon_t \leq -U\)일 때 거래를 시작
    자산 \(S_1\)을 \(N\)만큼 매수, 자산 \(S_2\)을 \(\beta N\)만큼 매도
  • 청산 시점 \(t_c\) : \(\varepsilon_t \geq 0\)일 때 거래를 청산
  • 거래당 수익
    \begin{align*}
        P & = N (P_{S_1, t_c} - P_{S_1, t_o}) + \beta N (P_{S_2, t_o} - P_{S_2, t_c}) \\
          & = N (P_{S_1, t_c} - \beta P_{S_2, t_c}) - N (P_{S_1, t_o} - \beta P_{S_2, t_o}) \\
          & = N \varepsilon_{t_c} - N \varepsilon_{t_o} \\
          & \geq N U
    \end{align*}
    • 자산 \(S_1\)의 청산 시점 가격 \(P_{S_1, t_c}\)와 진입 시점 가격 \(P_{S_1, t_o}\) 간의 차이
      자산 \(S_2\)의 진입 시점 가격 \(P_{S_2, t_o}\)와 청산 시점 가격 \(P_{S_2, t_c}\) 간의 차이.
    • \(P_{S_1, t_c} - \beta P_{S_2, t_c} = \varepsilon_{t_c}\)와 \(P_{S_1, t_o} - \beta P_{S_2, t_o} = \varepsilon_{t_o}\)로 대체.
    • 스프레드의 청산 시점 공적분 오차와 진입 시점 공적분 오차의 차이로 수익 계산.
    • 진입 시점의 공적분 오차가 \(-U\) 이하이고, 청산 시점의 공적분 오차가 0 이상이므로, 최소한 \(N U\)의 수익

Both U-trades and L-trades would make a minimum profit per trade of if one unit of the cointegrated pair was traded.

 


Minimum Total Profit (MTP)

거래를 시작하는 경계값 \(U\)는 스프레드 평균 양쪽에 대칭적으로 적용하므로 이 섹션에서는 U-trade에만 집중하며, U-trade는 결과를 단순히 두 배 하면 된다. (이 말은 실질적으로 사용할때 달라질 수 있다)
U-trade 하나당 최소 이익을 도출하였으니 그 다음으로는 거래 기간 \( [0, T] \) 동안의 총수익 MTP이다
거래 기간 동안 충분한 거래를 허용하고 총 이익을 최대화할 수 있는 최적의 경계값 \( U \)를 찾고자 한다.

  • MTP 정의(U의함수)
    \begin{equation}
        MTP(U) = \Big( \frac{T}{{TD}_U + I_U} - 1 \Big) U
    \end{equation}
    •  \( {TD}_U \)는 거래 기간(trade duration)
    • \( I_U \)는 거래 간격(inter-trade interval)
    • \( U \) :  스프레드가 상한을 초과할 때 시작, 평균으로 돌아왔을 때 종료되므로 최소한 \(U\)의 이익을 얻음
  • 거래 횟수 
    \begin{equation}
        \frac{T}{{TD}_U + I_U} - 1
    \end{equation}
    주어진 거래 기간 동안 발생하는 U-trade의 총 횟수를 의미한다.
    \({TD}_U + I_U\)는 하나의 U-trade가 시작되고 종료된 후 다음 U-trade가 시작되기까지 걸리는 총 시간을 의미한다
    따라서, 전체 거래 기간 \(T\)를 이 시간으로 나누어 주어진 기간 동안 발생할 수 있는 U-trade의 총 횟수를 계산한다
    마지막으로, 계산된 값에서 1을 빼서 첫 번째 거래 전의 간격을 제외한다
    ex) 전체 거래 기간 \(T = 100\)일, \({TD}_U = 5\)일, \(I_U = 2\)일이라고 가정하면 약 13번의 U-trade가 발생할 것으로 예상할 수 있다.
    \[
    \text{거래 횟수} = \frac{100}{5 + 2} - 1 = \frac{100}{7} - 1 \approx 14.29 - 1 = 13.29
    \]
  • 공적분 오차 \(\varepsilon_t\)
    모델 가정에 따라 정상적인 AR(1) 과정을 따름
    \begin{equation}
        \varepsilon_t = \phi \varepsilon_{t-1} + a_t \qquad a_t \sim N(0, \sigma_a^2) \text{ i.i.d}
    \end{equation}
  •  \( {TD}_U \)
    초기 값 \(U\)에서 \(0\)까지의 첫 번째 도달 시간
    \(\varepsilon_t\)의 평균을 \(0\)으로 가정하면, \( {TD}_U \)는 초기 값 \(\varepsilon_{t} = U\)인 상태에서 \(\varepsilon_t\)가 처음으로 \(0\)을 통과하는 평균 시간을 계산하여 추정할 수 있다
    \begin{equation}
        {TD}_U = E(\mathcal{T}_{0, \infty}(U)) = \lim_{b \to \infty} \frac{1}{\sqrt{2 \pi} \sigma_a} \int_0^b E(\mathcal{T}_{0, b}(s)) \text{ exp} \Big( - \frac{(s- \phi U)^2}{2 \sigma_a^2} \Big) ds + 1
    \end{equation}
  •  \( I_U \)  
    초기 값 \(0\)에서 \(U\)까지의 첫 번째 도달 시간
    유사하게, \( I_U \)는 초기 값 \(\varepsilon_t = 0\)인 상태에서 \(\varepsilon_t\)가 처음으로 \(U\)를 통과하는 평균 시간을 계산하여 추정할 수 있다
    \begin{equation}
        I_U = E(\mathcal{T}_{- \infty, U}(0)) = \lim_{-b \to - \infty} \frac{1}{\sqrt{2 \pi} \sigma_a} \int_{-b}^U E(\mathcal{T}_{-b, U}(s)) \text{ exp} \Big( - \frac{s^2}{2 \sigma_a^2} \Big) ds + 1
    \end{equation}

 Numerically Estimating the Integral in the Mean First-passage Time of an AR(1) Process

이 최적화 알고리즘의 핵심은 위에서 언급한 두 개의 적분을 계산하는 것이다.
우선 정상적인 AR(1) 과정을 고려한다
\[
Y_t = \phi Y_{t-1} + \xi_t
\]

  •  \(-1 < \phi < 1\)
  • \(\xi_t \sim N(0, \sigma_{\xi}^2) \text{ i.i.d}\)

평균 첫 도달 시간
구간 \([a, b]\)에 대해 초기 상태 \(y_0 \in [a, b]\)에서 시작하는 \(Y_t\)의 평균 첫 도달 시간 \(E(\mathcal{T}_{a,b}(y_0))\)은 다음과 같다
\[
E(\mathcal{T}_{a,b}(y_0)) = \frac{1}{\sqrt{2 \pi}\sigma_{\xi}}\int_a^b E(\mathcal{T}_{a,b}(u)) \text{ exp} \Big( - \frac{(u-\phi y_0)^2}{2 \sigma_{\xi}^2} \Big) du + 1
\]
이 적분 방정식은 Nystrom 방법을 사용하여 수치적으로 해결할 수 있다.
즉, 다음 선형 방정식을 해결하면 된다:
\[
\begin{pmatrix}
    1 - K(u_0, u_0) & -K(u_0, u_1) & \ldots & -K(u_0, u_n) \\
    -K(u_1, u_0) & 1 - K(u_1, u_1) & \ldots & -K(u_1, u_n) \\
    \vdots & \vdots & \vdots & \vdots \\
    -K(u_n, u_0) & -K(u_n, u_1) & \ldots & 1-K(u_n, u_n)
\end{pmatrix}
\begin{pmatrix}
    E_n(\mathcal{T}_{a,b}(u_0)) \\
    E_n(\mathcal{T}_{a,b}(u_1)) \\
    \vdots \\
    E_n(\mathcal{T}_{a,b}(u_n))
\end{pmatrix}
=   
\begin{pmatrix}
    1 \\
    1 \\
    \vdots \\
    1 \\
\end{pmatrix} 
\]
여기서 \(E_n(\mathcal{T}_{a,b}(u_0))\)는 적분의 이산 추정값이며, Gaussian 커널 함수 \(K(u_i, u_j)\)는 다음과 같이 정의된다:
\[
K(u_i, u_j) = \frac{h}{2 \sqrt{2 \pi} \sigma_{\xi}} w_j  \text{ exp} \Big( - \frac{(u_j - \phi u_i)^2}{2 \sigma_{\xi}^2} \Big)
\]
가중치 \(w_j\)는 사다리꼴 적분 규칙에 의해 정의된다
\[
w_j = \begin{cases}
    1 & j = 0 \text{ and } j = n \\
    2 & 0 < j < n, j \in \mathbb{N}
    \end{cases}
\]
위 선형 방정식 시스템을 해결하는 시간 복잡도는 \(O(n^3)\)이며, 시간이 많이 소요되는 부분이다.

무한 적분의 근사화

\({TD}_U\)와 \(I_U\)의 정의에서 적분 한계가 무한으로 간다. 무한 적분 한계를 근사화하기 위해 다음과 같은 스타일리제이션을 사용할 수 있다: 정적 AR(1) 과정 \(\{ \varepsilon_t \}\)에 대해, 프로세스 \(\vert \varepsilon_t \vert\)의 절대값이 프로세스의 표준 편차의 5배 \(5 \sigma_{\varepsilon}\)보다 큰 확률은 거의 0에 가깝다. 따라서, 적분에서 무한 한계의 근사치로 \(5 \sigma_{\varepsilon}\)를 사용할 수 있다.

 

Optimization 

MTP(Maximum Total Profit)를 최대화하는 Bound를 최적화하는 수치 알고리즘을 다음과 같이 정리할 수 있다

 

  1. Engle-Granger 또는 Johansen 테스트를 수행하여 공적분 계수 \(\beta\)를 도출한다.
  2. 공적분 오차 \(\varepsilon_t\)를 AR(1) 과정에 적합하고 AR(1) 계수와 적합된 잔차를 얻는다
    \[\varepsilon_t = \phi \varepsilon_{t-1} + a_t \quad a_t \sim N(0, \sigma_a^2)\]
  3. 공적분 오차의 표준 편차 \(\sigma_{\varepsilon}\)와 적합된 잔차의 표준 편차 \(\sigma_a\)를 계산한다.
  4. 사전 설정된 일련의 상한 \(U_i\)를 생성한다. \(U_i = i \times 0.01, \> i = 0, \ldots, b/0.01\), 여기서 \(b = 5 \sigma_{\varepsilon}\)이다
  5. 각 \(U_i\)에 대해 다음을 수행한다
       a. \({TD}_{U_i}\)를 계산
          - 평균 첫 통과 시간을 이용하여 계산한다.
          - 이는 \(\varepsilon_t\)가 \(U_i\)에서 0으로 돌아가는 데 걸리는 평균 시간
       b. \(I_{U_i}\)를 계산
          - 이는 \(\varepsilon_t\)가 0에서 \(U_i\)로 돌아가는 데 걸리는 평균 시간
          - 이 단계가 최적화 속도의 주요 병목 지점이다
       c. \(MTP(U_i)\)를 계산 \[MTP(U) = \left( \frac{T}{{TD}_U + I_U} - 1 \right) U\]
  6. \(MTP(U^{*})\)가 최대가 되는 \(U^{*}\)를 찾는다
  7. 원하는 최소 이익 \(K \geq U^{*}\)을 설정하고 다음 식에 따라 거래할 자산 수를 계산한다.
    \[
       N_{S_2} = \left\lceil \frac{K \beta}{U^{*}} \right\rceil \\
       N_{S_1} = \left\lceil \frac{N_{S_2}}{\beta} \right\rceil
    \]

    https://hudsonthames.org/notebooks/arblab/minimum_profit_optimization.html
 

minimum_profit_optimization

Although the paper suggested the usage of a 12-month training period and a 6-month trading period with daily data, our results found that the choice of 12-month and 6-month is arbitrary and the performance was not affected if a longer training period was u

hudsonthames.org

 

Cointegration Approach.Minimum Profit 클래스는 최적의 진입 및 종료 수준(예: buy_level, close_level, sell_level)과 공적분된 페어에서 거래할 주식 수(예: shares_A, shares_B)를 구할 수 있다.


스프레드 계산
  \[
  \text{Spread} = \text{PriceA} + \beta \cdot \text{PriceB}
  \]

  • 매수 신호 : 스프레드 값이 buy_level 아래로 떨어지면 매수 거래를 open한다. 즉, shares_A를 롱하고 shares_B를 숏한다
  • 매도 신호 : 스프레드 값이 sell_level 위로 올라가면 매도 거래를 open한다. 즉, shares_A를 숏하고 shares_B를 롱한다.
  • 포지션 청산 : 스프레드 값이 close_level에 도달하면 매수 또는 매도 거래를 close 한다

트레이딩

이 전략은 한 번에 하나의 열린 거래만을 가정한다. 

녹색 선 : sell_level, 빨간 선 : buy_level 검은 선 : close_level



https://hudson-and-thames-arbitragelab.readthedocs-hosted.com/en/latest/trading/minimum_profit.html

 

Minimum Profit Strategy — arbitragelab 1.0.0 documentation

Minimum Profit Strategy The Minimum Profit class from the Cointegration Approach generates optimal entry and exit levels (buy_level, close_level, sell_level) as well as number of shares (shares_A, shares_B) to trade per asset in a cointegrated pair. The st

hudson-and-thames-arbitragelab.readthedocs-hosted.com

https://hudson-and-thames-arbitragelab.readthedocs-hosted.com/en/latest/cointegration_approach/minimum_profit.html

 

Minimum Profit Optimization — arbitragelab 1.0.0 documentation

Generate a sequence of pre-set upper bounds \(U_i\), where \(U_i = i \times 0.01, \> i = 0, \ldots, b/0.01\), and \(b = 5 \sigma_{\varepsilon}\).

hudson-and-thames-arbitragelab.readthedocs-hosted.com