远期(Forward):双方承诺在将来某一天以特定价格买进或卖出一定数量的标的物(标的物可以是大豆、铜等实物商品,也可以是股票指数、债券、外汇等金融产品)的一种合约。
远期合约解决什么问题?
如,对于石油的买卖:
远期的出现,就很好解决了双方对于想锁定未来交易价格,规避价格波动风险的需求。
交易方/一年后价格 | 一年后原油价格上涨 | 一年后原油价格下跌 |
---|---|---|
航空公司(远期多头-现货空头) | 在远期多头上的盈利,弥补在现货空头上的亏损 | 在远期多头上的亏损,抵消在现货空头上的盈利 |
石油供应商(远期空头-期货多头) | 在远期空头上的亏损,抵消在现货多头上的盈利 | 在远期空头上的盈利,弥补在现货多头上的亏损 |
期货(Futures):期货是一种跨越时间的交易方式。买卖双方透过签订标准化合约(期货合约),同意按指定的时间、价格与其他交易条件,交收指定数量的现货。通常期货集中在期货交易所进行买卖,但亦有部分期货合约可透过柜台交易(OTC,Over the Counter)进行买卖。
远期合约作为跨期的交易方式有很多缺点:
于是出现了 中 介 \color{red}{中介} 中介。中介规定好每种交割商品的规格、每份合约约定的交割时间和商品数目,即所谓 标 准 化 合 约 \color{red}{标准化合约} 标准化合约。商品的售出方和商品的购入方在中介处进行交易。其中的中介,就是 期 货 交 易 所 \color{red}{期货交易所} 期货交易所,其合约就是 期 货 合 约 \color{red}{期货合约} 期货合约。
由此,期货的诞生,从组织方式和技术措施解决了远期所产生的问题
组织方式——组织化,集中化:
技术方式——引进标准化+保证金制度:
小结:期货和远期的区别
期货两大最基本功能:
规避风险-通过套期保值实现。
价格发现-期货市场能够预期未来现货价格的变动。
保证金制度:在期货交易中,期货买方和卖方必须按照其所买卖期货合约价值的一定比率(通常为5%-15%)缴纳资金,用于结算和保证履约,保证金制度是期货市场风险管理的重要手段。
风 险 度 = 客 户 持 仓 所 需 保 证 金 客 户 权 益 账 户 总 额 风险度=\frac{客户持仓所需保证金}{客户权益账户总额} 风险度=客户权益账户总额客户持仓所需保证金
期货账户的风险度决定账户是否会在结算时被强行平仓:
当日无负债结算制度:是指在每个交易日结束之后,由期货结算机构对期货交易保证金账户当天的盈亏状况进行结算,并根据结算结果进行资金划转。
结算价:结算价(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 | 郑商所棉花次主力合约 |
具体交易品种如下:
一个完整期货合约的代号为“交易所代号前缀.品种代号-合约的交割时间”。如在上海期货交易所交易的白银期货品种,于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线行情类似,同样是调用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)
运行结果如下:
期货合约各项要素的设计对期货交易有关各方的利益以及期货交易能否活跃至关重要。
一般期货标准化合约需包含的要素有:
商品方面——
交易方面——
交割方面——
以沪深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 下的“期货”模块。