量化金融笔记2-期货量化基础

tech2022-08-24  107

期货量化基础

文章目录

什么是期货期货的前身-远期期货的诞生 期货的交易规则期货的保证金制度期货的结算制度期货的主力合约与换月期货的交易指令、订单类型和撮合机制 期货数据介绍和提取国内期货交易所与期货代码期货行情K线期货合约要素

什么是期货

期货的前身-远期

远期(Forward):双方承诺在将来某一天以特定价格买进或卖出一定数量的标的物(标的物可以是大豆、铜等实物商品,也可以是股票指数、债券、外汇等金融产品)的一种合约。

远期合约解决什么问题?

远期合约的出现,是为了对冲现货交易存在的风险。对于很多大宗商品的现货交易(即一手交钱一手交货)会有一个很明显的缺点:供给和需求会有在时间状态和空间状态要求不一致的问题。

如,对于石油的买卖:

对于航空公司:当前的油价相对比较便宜,同时担心油价明年会上涨,但如果现在就把明年要用的石油也都买下来会付出很多额外的仓储成本,希望能有一个合约锁定以现在这个自己认为比较合适的价格,约定在明年买明年需要的石油。对于石油供应商:现在油价便宜,担心油价明年还会进一步下跌,希望能有一个合约能锁定现在这个价格保证明年出产的石油还能以这个价格卖出。

远期的出现,就很好解决了双方对于想锁定未来交易价格,规避价格波动风险的需求。

交易方/一年后价格一年后原油价格上涨一年后原油价格下跌航空公司(远期多头-现货空头)在远期多头上的盈利,弥补在现货空头上的亏损在远期多头上的亏损,抵消在现货空头上的盈利石油供应商(远期空头-期货多头)在远期空头上的亏损,抵消在现货多头上的盈利在远期空头上的盈利,弥补在现货多头上的亏损

期货的诞生

期货(Futures):期货是一种跨越时间的交易方式。买卖双方透过签订标准化合约(期货合约),同意按指定的时间、价格与其他交易条件,交收指定数量的现货。通常期货集中在期货交易所进行买卖,但亦有部分期货合约可透过柜台交易(OTC,Over the Counter)进行买卖。

远期合约作为跨期的交易方式有很多缺点:

交易混乱——不同的合约所约定的价格、时间和商品的橙色、规格往往都不一样,每次交易都要重写合约。若贩卖合同则会出现理解误差,不方便流通。违约事件——一般交易链非常冗长,可能会出现赖账,从而有信用风险。

于是出现了 中 介 \color{red}{中介} 。中介规定好每种交割商品的规格、每份合约约定的交割时间和商品数目,即所谓 标 准 化 合 约 \color{red}{标准化合约} 。商品的售出方和商品的购入方在中介处进行交易。其中的中介,就是 期 货 交 易 所 \color{red}{期货交易所} ,其合约就是 期 货 合 约 \color{red}{期货合约}

由此,期货的诞生,从组织方式和技术措施解决了远期所产生的问题

组织方式——组织化,集中化:

商人们组成会所,远期合同的签定及转让集中在会所进行,而且远期合同的签定及转让只能在会员间进行,会所对远期合同的签定及转让提供公证及担保。标志:1848年美国芝加哥82位商人组成的交易会所芝加哥期货交易所(Chicago Board Of Trade)CBOT。

技术方式——引进标准化+保证金制度:

从根本上克服了违约缺陷,正式演变为期货交易。标志:1865年—CBOT推行标准化和保证金制度

小结:期货和远期的区别

交易场所:期货在场内公开交易,远期往往为场外交易。合约的规范性:期货是标准化合约,除了价格,合约的品种、规格、质量、交割地点、结算方式等都有统一规定,而远期择时交易双方自行商议。流动性:期货比远期更具流动性,很容易在期货交易所转手交易或者中止交易。信用风险:远期交易存在信用风险,而期货则由于引入保证金制度克服了信用风险。

期货两大最基本功能:

规避风险-通过套期保值实现。

价格发现-期货市场能够预期未来现货价格的变动。

期货的交易规则

期货的保证金制度

保证金制度:在期货交易中,期货买方和卖方必须按照其所买卖期货合约价值的一定比率(通常为5%-15%)缴纳资金,用于结算和保证履约,保证金制度是期货市场风险管理的重要手段。

以10%的保证金比例为例,投入10%的资金即可承受100%的商品价格波动(10倍杠杆)。因此期货天然 自 带 杠 杆 \color{red}{自带杠杆} 。因为自带杠杆的熟悉,期货从而可以在作为风险对冲(即套期保值)工具之外,是一个非常方便的投资工具。

风 险 度 = 客 户 持 仓 所 需 保 证 金 客 户 权 益 账 户 总 额 风险度=\frac{客户持仓所需保证金}{客户权益账户总额} =

期货账户的风险度决定账户是否会在结算时被强行平仓:

当客户没有持仓(空仓),即完全没有持有合约多头或者空头,则风险度为0。当客户满仓,即客户持仓所需保证金正好为客户权益账户总额时,则风险度为100%。当风险度高于100%(爆仓),表示权益账户总额不足持仓所需的保证金,这个时候期货公司一般会提前通知客户追加保证金或者减仓。一般期货公司在动态监控中有采取较为人性化措施,并不是持仓所需保证金只要高于客户权益账户总额就会强平平仓,而是设置了一定的容忍度(比如可能设置120%,130%不等),一旦客户权益风险度越过了这个容忍度,期货公司有权不通知客户直接强行平仓直至客户的持仓风险度回归容忍度水平之下。

期货的结算制度

当日无负债结算制度:是指在每个交易日结束之后,由期货结算机构对期货交易保证金账户当天的盈亏状况进行结算,并根据结算结果进行资金划转。

期货因为有杠杆而风险很高,期货结算机构会在每天收盘(15:00)之后都会结算每个账户的盈亏情况。结算的时候并不是用当日的收盘价来计算盈亏,而是用专门的 结 算 价 ( S e t t l e m e n t   P r i c e ) \color{red}{结算价(Settlement\ Price)} Settlement Price,从而可以极大地规避了认为尾盘操纵市场的风险。

结算价:结算价(Settlement Price)是当天交易结束后,对未平仓合约进行当日交易保证金及当日盈亏结算的基准价。我国郑州商品交易所、大连商品交易所和上海期货交易所规定。当日结算价取某一期货合约当日成交价格按照成交量的加权平均价;当日无成交价格的,以上一交易日的结算价作为当日结算价。中国金融期货交易所规定,当日结算价是指某一期货合约最后一小时成交价格按照成交量的加权平均价。 交割日按最后两小时的算术平均价计结算价。

为什么不用收盘价?

为了控制市场风险,减少人为操纵的可能性和影响力。若直接拿收盘价来结算,会有收盘前最后几分钟通过少量资金来操纵收盘价的情况,从而会实现对于全天价格波动的操控,这种做法在期货市场上会造成极大风险。这不仅对于对手盘,对于期货公司、交易所甚至整个金融体系来说都是极大风险。

期货的主力合约与换月

股票的行情棘手的问题是复权问题,而期货的行情棘手的问题是换月。期货合约没有分红、送转、派息这样的概念,但它有换月这样的概念。

期货主力合约:期货与股票不同的是,期货合约的生存周期是有限的,到合约最后交易日后就要交割。所谓主力合约指的是持仓量最大的合约。一般情况下,持仓量最大的合约,其成交量也是最大的。因为它是市场上最活跃的合约,也是最容易成交的合约,所以投机者基本上都在参与这个合约。

每一个期货品种在一个时段同时上市的期货合约有很多个,它们都是在未来不同时间交割的合约,不同交割日的合约在不同的时间,他们的交易活跃度是不一样的。同一个期货品种里,交易最为活跃的合约称为主力合约。交易活跃度的衡量,一般用交易量或持仓量来衡量。

对于一般的商品期货合约的投资者(做量化交易或者对冲),一般都不是标的大宗商品的买方或者卖方,所以我们往往不会持有一个合约持续到她的交割期。因此我们在上手的合约快要到期的时候,就必须换到到期日更远的合约,这种交易称之为 换 月 \color{red}{换月}

在Atrader库中,已将每个期货合约品种的主力合约做成统一连续的标准合约,默认当日持仓量最大的合约为该品种的主力合约,标记为‘品种CODE+0000’。例如当日沪深300指数股指期货主力合约为IF1603,则可直接调用IF0000,次主力合约为IF1604,则可直接调用为IF0001。

合约释义Code0000主力合约Code0001次主力合约IF0000中金所沪深300指数股指期货主力合约IF0001中金所沪深300指数股指期货次主力合约CU0000上期所铜主力合约CU0001上期所铜次主力合约M0000大商所豆粕主力合约M0001大商所豆粕次主力合约CF0000郑商所棉花主力合约CF0001郑商所棉花次主力合约

主力合约规则

过去一天出现持仓量和交易量均比原来主力合约大的合约时,切换主力合约新上市的品种,首日以最近月合约为主力合约主力合约允许回滚

次主力合约规则

次主力合约的到期月份必须在当前主力合约的到期月份之后次主力合约为除主力合约之外,到期月份在主力之后的,持仓量和交易量均最大的合约新上市的品种,首次以第二近月合约为次主力合约次主力合约允许回滚若出现了主力切换导致次主力必须切换,但是没有找到持仓量和交易量均最大的合约,以交易量最大的合约为次主力

Atrader库中,可通过调用get_main_contract函数交易日历返回主力(或次主力)合约的物理合约代码。

案例:

1)获取沪深300股指期货(IF)2020年08月10日至2019年08月30日所有交易日的主力合约(IF0000)的物理合约代码

import atrader as at dfData = at.get_main_contract(main_code = 'cffex.IF0000', begin_date = '2020-08-10', end_date = '2020-08-30') print(dfData)

运行结果如下:

可以看出沪深300股指期货在2020-08-20到2020-08-21时沪深300股指期货的主力合约从8月交割的变成了9月交割的合约。

注 \color{red}{注} :行情中“XX主力(或次主力)连续合约”都是虚拟的合约,而并不是真实存在可以直接交易的合约,而只是反映每个日期对应的主力(或次主力)合约的价格,把对应日期的主力(或次主力)合约的价格映射过来,这个行情是不受主力(或次主力)合约品种变动的影响。

期货的交易指令、订单类型和撮合机制

期货的交易指令,分为开仓、平仓和平今

开仓:新买或者新卖期货合约。

平仓:对已有的买入或卖出的历史持仓合约进行反向操作卖出或买入。

平今:就是把当天建的单子平掉,也就是说当天买如开仓合约,然后就当天卖出平仓全部或这一部分合约就是平今;

具体再分买入和卖出方向讨论如下:

指令/方向买入(做多)卖出(做空)开仓买入开仓(开多)卖出开仓(开空)平仓买入平仓(平空)卖出平仓(平多)平今买入平今(平空)卖出平今(平多)

期货的订单类型,分为市价和限价

市价:按当时市场价格即可成交的指令。当前期货一般不支持市价单。

限价:执行时必须按限定价格或更优的价格成交的指令,不一定能马上成交,但能保证成交价格至少优于指定价格。

期货的撮合机制,价格优先、时间优先

价格优先:价格较低的买入申报优先于价格较高的买入申报。价格较高的卖出申报优于价格较低的卖出申报。

时间优先:同价位申报时,依照申报时序决定优先顺序,先来后到。

期货数据介绍和提取

国内期货交易所与期货代码

国内的期货交易所,主要有这么几个,在Atrader库中都有对应代号:

合约释义Code0000主力合约Code0001次主力合约IF0000中金所沪深300指数股指期货主力合约IF0001中金所沪深300指数股指期货次主力合约CU0000上期所铜主力合约CU0001上期所铜次主力合约M0000大商所豆粕主力合约M0001大商所豆粕次主力合约CF0000郑商所棉花主力合约CF0001郑商所棉花次主力合约

具体交易品种如下:

郑州商品交易所—农产品:强麦、硬麦、棉花、白糖、菜籽油等大连商品交易所—农产品:大豆、豆粕、豆油、玉米、棕榈油等上海期货交易所—非农产品:橡胶、铝、铜、燃料油、黄金、原油等中国金融期货交易所—金融期货:股指期货、国债期货上海国际能源交易中心—新能源期货:20号胶、原油

一个完整期货合约的代号为“交易所代号前缀.品种代号-合约的交割时间”。如在上海期货交易所交易的白银期货品种,于2019年9月交割的合约,代号为“shfe.ag1909”。

在Atrader库中,可以调用get_code_list来获取对应交易所特定时间的全部存续合约,或者存续主力(或次主力)合约。

案例:

1)获取中金所8月26日的所有存续合约信息

import atrader as at dfData = at.get_code_list(block = 'cffex', date = '2020-08-26') print(dfData)

运行结果如下:

2)获取上海期货交易所8月26日的所有存续主力合约信息

import atrader as at dfData = at.get_code_list(block = 'shfe0000', date = '2020-08-26') print(dfData)

运行结果如下:

期货行情K线

获取期货的K线行情,与获取股票K线行情类似,同样是调用get_kdata和get_kdata_n两种函数,获取给定品种列表在一个时间段内的给定频率的行情数据。

案例:

1)获取上海交易所白银期货(ag)和螺纹钢期货(rb)在2020年9月交割的合约(2009),在2020年08月20日至2020年08月31日的日行情数据

import atrader as at target_list = ['shfe.ag2009', 'shfe.rb2009'] dfData = at.get_kdata(target_list = target_list, frequency = 'day', fre_num = 1, begin_date = '2020-08-20', end_date = '2020-08-31', fq = 1, fill_up = False, df = True, sort_by_date = False) print(dfData)

运行结果如下:

2)获取中国期货交易所所有主力合约在2020年9月交割的合约(2009),在在2020年08月25日至2020年08月31日的5日频行情数据

import atrader as at cffex0000 = at.get_code_list(block = 'cffex0000',date = '2020-08-10') # 获取主力合约代码列表 cffex0000_code = cffex0000['code'].tolist() dfData = at.get_kdata(target_list = cffex0000_code, frequency = 'day', fre_num = 5, begin_date = '2020-08-10', end_date = '2020-08-31', fq = 1, fill_up = False, df = True, sort_by_date = False) print(dfData)

运行结果如下:

期货合约要素

期货合约各项要素的设计对期货交易有关各方的利益以及期货交易能否活跃至关重要。

一般期货标准化合约需包含的要素有:

商品方面——

计量单位:吨、公斤、磅、点质量指标:交割等级(色泽、水分、杂质)合约单位(或乘数):一手或一张10吨,每点300元

交易方面——

报价方式:规定期货市场上报出的价位的经济含义。最小变动价位:价格变动的最小幅度。每日波幅限制:价格在前一营业日结算价格的基础上当日可上升或下降的最大幅度。交易时间:指营业日期货交易所撮合成交的时间范围。最后交易日: 规定一种合约的最后交易日期。最低保证金额:指交多少保证金才能买或卖一张合约。持仓限额:指单一交易者在任一时刻、任一种指定合约上所能持有的最高的合约张数。交易代码、每周交易时间等。

交割方面——

交割月份:交割最后月份,现存种类+合约终止月份。最后交割日:未交割时,受处罚。交割方式:现金交割或实物交割,如商品、中长期国债、外汇为实物交割,股指、短期国债为现金交割。交割手续、交割程序、付款方式等。

以沪深300股指期货为例:

在Atrader库中,可调用get_future_info函数接口来获得期货合约的要素信息。

get_future_info - 查询期货标的基本信息

案例:

1)获取白银期货(ag)和螺纹钢期货(rb)在2020年9月交割的期货合约的的基本交易信息

import atrader as at target_list = ['shfe.ag2009', 'shfe.rb2009'] dfData = at.get_future_info(target_list = target_list) print(dfData)

运行结果如下:

2)获取中国金融期货交易所(cffex)所有主力合约的基本交易信息

import atrader as at cffex0000 = at.get_code_list(block = 'cffex0000', date = '2020-08-30') cffex0000_code = cffex0000['code'].tolist() dfData = at.get_future_info(target_list = cffex0000_code) print(dfData)

运行结果如下:

期货数据的更详获取,详见:http://www.digquant.com.cn/document 下的“期货”模块。

最新回复(0)