如何用Python下载并分析期货持仓数据

本文介绍如何利用Python下载CFTC的期货持仓报告,关注非商业持仓,计算投机性头寸变化和COT指数,以理解市场情绪和价格趋势。通过Quandl获取数据,解析数据并进行分析,揭示期货市场的潜在机会。
摘要由CSDN通过智能技术生成

期货持仓报告

期货持仓报告,简称COT(Commitment of Traders)报告,记录机构投资者包括商业公司和对冲基金的期货持仓数据。由美国期货交易委员会(CFTC)公布,公布时间是每周五下午2点30分(美东时间)。

我们关注的是传统格式(Legacy Format)的COT报告,汇总了期货和期权的持仓数据。

传统格式的COT报告包含以下数据:

  • 商业持仓(Commercial): 产品制造商/销售商的期货持仓,划分为多头和空头,用期货来对冲价格波动的风险。
  • 非商业持仓(Noncommercial): 对冲基金,投行和大型个人玩家的期货持仓,划分为多头和空头,简称"投机性头寸"。
  • 多头持仓(Long): 多头合约的数量。
  • 空头持仓(Short): 空头合约的数量。
  • 未平仓合约(Open Interest): 流通在外未交割的合约数量。
  • 无需报备头寸(Non-reportable Position): 未达到CFTC要求的未平仓合约数量,指小玩家的持仓。

非商业持仓代表了大玩家对未来价格的预期,如果它们押注价格上涨,大额买入推动价格上涨,反之亦然。但我们从均值回归的角度解读这个指标,当非商业净多头头寸创新高,后续将缺乏足够的买盘支持价格的进一步上涨,价格有可能处于周期性顶部;相反当净空头创历史新高,表明多数投资者都押注价格下跌,这时候价格可能筑底。

import os
import time

import requests
import quandl
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns

%matplotlib inline
plt.style.use("ggplot")

1. 准备数据

Quandl下载COT报告。

Quandl是金融数据提供商,有大量的免费数据集可以使用,用户需要先申请API密钥。

为了方便用Python获取数据,先安装三方库’quandl’.

codes = pd.read_csv("./cot.csv")
codes.head()
category symbol name cnname code_future code
0 currency ICE_DX U.S. Dollar Index 美元指数 CHRIS/ICE_DX1 CFTC/098662_FO_L_ALL
1 currency CME_BT Bitcoin CME Futures 比特币 NaN CFTC/133741_FO_L_ALL
2 currency CME_BP British Pound 英镑 CHRIS/CME_BP1 CFTC/096742_FO_L_ALL
3 currency CME_CD Canadian Dollar 加元 CHRIS/CME_CD1 CFTC/090741_FO_L_ALL
4 currency CME_JY Japanese Yen 日元 CHRIS/CME_JY1 CFTC/097741_FO_L_ALL
quandl.ApiConfig.api_key = "your api key"
quandl.ApiConfig.api_key = os.getenv("QUANDL_API")

# 下载货币,指数,能源和金融期货的的COT报告
categories = ["currency", "energy", "index", "metal"]
cot_list = []

t0 = time.time()

for _, row in codes.loc[codes.category.isin(categories)].iterrows():
    try:
        symbol, code = row["symbol"], row["code"]
        df = quandl.get(code)
        df["symbol"] = symbol
        cot_list.append(df)
        print(f"{symbol}: download data success")
    except Exception as e:
        print(f"{symbol}: download failed {e}")
    time.sleep(1)

# 下载完毕后先合并数据,然后保存在本地csv,方便后续使用
cot_joined = pd.concat(cot_list)
cot_joined.to_csv("./cot_history.csv", index=True)

elapsed = (time.time() - t0) / 60.0
print(f"tasks completed in {elapsed:.2f} minutes")
ICE_DX: download data success
CME_BT: download data success
CME_BP: download data success
CME_CD: download data success
CME_JY: download data success
CME_SF: download data success
CME_EC: download data success
CME_AD: download data success
CME_MP: download data success
CME_NE: download data success
CME_RA: download data success
CME_BR: download data success
CME_RU: download data success
CME_CL: download data success
CME_RB: download data success
CME_QG: download data success
CME_BZ: download data success
CME_EH: download data success
CME_ES: download data success
CME_NQ: download data success
CME_YM: download data success
CBOE_VX: download data success
CME_GC: download data success
CME_SI: download data success
CME_HG: download data success
CME_PL: download data success
CME_PA: download data success
tasks completed in 1.13 minutes
usecols = [
    "Date", "Open Interest", "Noncommercial Long", "Noncommercial Short",
    "Commercial Long", "Commercial Short", "symbol"<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值