<aside> đź’ˇ
Abstract: This project examines several volatility models on their effectiveness in modelling the volatility of the BTC-USDT pair; as well as a trading strategy in cryptocurrency markets that exploits price differences between spot BTC-USDT and its corresponding perpetual futures contracts. To evaluate the role of volatility, we compare several forecasting models, including a Naive benchmark, GARCH, Merton Jump Diffusion, and HAR-RV. These models are used to dynamically adjust exposure rather than generate trading signals directly. Although the strategy demonstrates consistent profitability in the testing period, the short evaluation horizon and the presence of inactive periods limit the statistical significance of performance metrics. Overall, the findings highlight the effectiveness of simple spread-based strategies in cryptocurrency markets and suggest that increased model complexity in volatility forecasting may not necessarily translate into improved trading performance.
</aside>
Bitcoin (BTC) is the most widely traded cryptocurrency, and the BTC–USDT pair is one of the most liquid trading instruments in the crypto market. In addition to spot trading, cryptocurrency exchanges offer perpetual futures contracts, whose prices are linked to the underlying asset through a funding mechanism. This creates a natural relationship between spot and futures prices that can give rise to exploitable deviations.
In this project, we compare several volatility models that forcasts the volatility of BTC spot price, and study a spread-based trading strategy that exploits deviations between BTC spot prices and perpetual futures prices. We want to investigate whether volatility forecasting can improve the performance of such strategies through dynamic position sizing.
To extract BTC-USDT prices that is up-to-date, we decide to choose Binance, a leading blockchain platform where large volumes of cryptocurrency is traded with an easily accessible API. Note that we accessed binance through binance.us (as opposed to binance.com) due to our IP, which complies to US laws. Since perpetual futures data is not directly available on binance.us, we retrieved the perpetual futures price and funding rates from Gate.io in the same timeframe.
We retrieved the BTC-USDT daily close price from 2/1/2021 - 3/1/2026, where the last 30 days is used for testing, and the previous data is split into training/validation according to the 80/20 rule.

Volatility plays a central role in financial markets as a measure of uncertainty and risk. In this project, volatility forecasts are used not as a direct trading signal, but as a mechanism for adjusting position size. Intuitively, higher predicted volatility implies greater uncertainty in price movements, and therefore smaller positions should be taken to control risk.
We consider several volatility models of increasing complexity, ranging from simple benchmark models to more sophisticated approaches that capture clustering, jumps, and multi-scale behavior.
Root Mean Squared Error (RMSE) and Mean Absolute Error (MAE) between the ground truth volatility and the predicted volatility are used for performance evaluation.
Naive model (random walk)
This serves as a benchmark model, predicting the next-day volatility with
GARCH(p,q)
Generalized autoregressive conditional heteroscedasticity (GARCH) is a family of models indexed by $(p,q)$ ($p \ge 1, q \ge 0$) that is standard in modeling time-varying volatility in financial markets. We will apply the existent python arch package, train and find the optimal p, q on the validation set. The formula is:
$$ \begin{align} X_t &= \sigma_t\epsilon_t\\ \sigma_t^2 & = \omega + \sum_{i=1}^p\alpha_i \epsilon^2_{(t-i)} + \sum_{i=1}^q\beta_j\sigma^2_{(t-j)} \end{align} $$
We limit our $p,q$ search to $1 \le p, q \le 9$ and determine the best $p, q$ would be $(9, 9)$ according to their RMSE values. GARCH models are widely used due to their ability to capture volatility clustering, a well-documented feature of financial returns.
Merton Jump Diffusion
Since large discontinuous price movements are frequent in the cryptocurrency market, it is helpful to consider models that capture the “jump” behavior. The jump diffusion model captures this aspect — the dynamics of the stock $S$ follows a jump-diffusion process given by
$$ \frac{dS\left(t\right)}{S\left(t-\right)} = \left(\alpha-\lambda \kappa\right)dt+\sigma dZ\left(t\right)+\left(Y\left(t\right)-1\right)dN\left(t\right), $$
where the jumps are driven by an independent Poisson process $N\left(t\right)$ with constant intensity $\lambda$ and random jump size $Y$, and the jump sizes are lognormally distributed with parameters $\mu\left(t\right)$ and $\delta\left(t\right)$. $\kappa = E\left(Y\left(t\right)-1\right)$ is the expected relative jump of $S\left(t\right)$.
Suppose $\mu\left(t\right)=\mu$ and $\delta\left(t\right)=\delta$; this is a regular Merton jump-diffusion model, and Navas (2003) shows that the variance is
$$ \begin{align}\mathrm{var}\left(\log\frac{S\left(t\right)}{S\left(0\right)}\right) &=\mathrm{var}\left(\sigma Z\left(t\right)\right) + \mathrm{var}\left(\log Y\left(n\left(t\right)\right)\right) \\ &= t \sigma ^2 + t \lambda \left(\mu^2 + \delta^2 \right),\end{align} $$
After adjusting on the validation set, we found that defining jumps as 2 times the standard deviation of the current window behaves optimally.
HAR-RV
The HAR-RV model captures volatility at multiple time scales (daily, weekly, monthly), making it well-suited for markets with heterogeneous trading behavior. It’s given by
$$ \tilde\sigma_{T+1}^2 = \beta + \beta_d \sigma_T^2 + \beta_w \sigma_T^{2,w} + \beta_m\sigma_T^{2,m}; $$
where $\tilde\sigma_{T+1}$ is the forcast at time $T+1$, and the superscript $w, m$ means the variance over a week/month respectively.
In the traditional HAR-RV model, it uses high frequency data to compute $\sigma_T$; but for the sake of training data consistency, we replace the $RV^d$ with the naive daily squared returns. Also, since the crypto market is open 24-7, we set the weekly period to 7 and the monthly period to 30. We make use of the linear regression function from sklearn.linear_model to determine the parameters.
It is important to note that these models are designed to forecast price volatility rather than the dynamics of the spot–futures spread itself. As a result, their effectiveness in improving the trading strategy may be limited if spread behavior is driven by factors not captured by price volatility alone.