2022年美赛C题思路复盘
前⾔前⾔
美赛已经结束4天了,⼀直忙于教资考试的准备,今天我终于抽空写了这篇C题思路复盘的博客。
题⽬⼤致要求题⽬⼤致要求
题⽬叫'Trading Strategies(交易策略)',⼀共给了两个⽂件,分别是⽐特币和黄⾦价格随时间变化的CSV⽂件。⼤致要求可以分为以下
四个步骤:
1. 基于截⽌⾄当⽇的价格情况建⽴模型,预测2021年9⽉10⽇原来的本⾦1000美元会变成多少钱?(Develop a model that gives
the best daily trading strategy based only on price data up to that day. How much is the initial $1000 investment worth
on 9/10/2021 using your model and strategy?)
2. 证明你的模型提供了最佳策略(Present evidence that your model provides the best strategy.)
3. 就是让你对⼿续费那两个参数做敏感性分析(Determine how sensitive the strategy is to transaction costs. How do
transaction costs affect the strategy and results?)
4. 美赛的⽼⼀套,让你写⼀个什么备忘录,向投资者陈述你的战略、模型和结果(Communicate your strategy, model, and results
to the trader in a memorandum of at most two pages.)
分析题⽬分析题⽬
对于问题1,思路⽆⾮是分为两个步骤,第⼀个步骤是预测出后⼏⽇的价格进⽽估计得到后⼏⽇的收益率,然后通过动态规划模型进⾏最优
化的求解。具体思路如下:
⾸先先看数据集,你会发现数据集只有两列,时间⼀列和价格⼀列。这意味着知⽹或者其他数据库中查到的很多论⽂写的预测算法你都⽤不
了了。为什么呢?因为⼈家写论⽂时候⽤的数据集都有其他的特征,⽽不是这⾥只有时间⼀列特征。所以那些什么SVM、贝叶斯⽹、向量
⾃回归等要求多维特征的算法都不适⽤。查来查去,有推荐使⽤LSTM、神经⽹络模型还有xgboost算法,但我都是不是很熟悉,最终还是
⽤了时间序列ARIMA模型来做的预测。为什么⽤ARIMA模型来做的预测,我给出以下⼏点原因:
ARIMA模型属于单时间序列模型,符合题⽬数据集提供的数据以及题⽬给出的要求。
ARIMA模型是⼀个很常见的时间序列模型,较为成熟也是我所熟悉的,我能拿它写不少东西。
我使⽤Python编程,⽽Python的statsmodels库中提供了ARIMA现成的API,不⽤另外写代码,⽽且调⽤API绘制图像的操作⼗分⽅
便。
对于问题⼆呢,⽹上的思路都是说,改变什么参数,看看收益率会不会提⾼,如果不会的话就说明是最优的,但也没说清楚具体怎么操作。
⽽我的想法不完全是这样的,我看了他们的思路突然想到了"梯度下降法",那你说如果我⽤模型的两个参数(具体来讲⼀个是ARIMA模型的
AR参数另⼀个是MA参数,作为梯度下降法改变模型的两个搜索⽅向,然后进⾏算法计算,理论上是完全可⾏的,于是乎我就这么⼲了。
对于问题三和问题四就不再多说了。但我也罗嗦⼀下,问敏感性分析,我除了做了问题三的⼿续费的敏感性分析外,我还针对ARIMA模型
做了敏感度分析。问题四就总分总来写,总⼀段,分三段,也就是战略、模型和结果各⼀段写,最后写个总结,要注意的是英⽂备忘录是有
格式的,得按照格式来,要有点仪式感,不然你就可能会被扣分。
还有就是别忘了⼀开始写数据清洗那⼀段,我⽤了基于时间序列的⽜顿插值法进⾏插补,⽤箱型图法判断离群点。
接下来我贴出我的代码。
代码代码
import pandas as pd
from pylab import *
import statsmodels.api as sm
from datetime import datetime
from statsmodels.tsa.stattools import adfuller
from statsmodels.tsa.stattools import kpss
from statsmodels.stats.diagnostic import acorr_ljungbox
def adf_test(timeseries):