期货交易市场有中国金融期货交易所(中金所)、上海期货交易所(上期所)、大连商品交易所(大商所)、郑州商品交易所(郑商所)以及上海国际能源交易中心(能源中心)
期货交易以保证金的方式进行,不同的期货品种对应不同的合约乘数,需要查找期货列表后对应计算,保证金比率可以通过set_option('futures_margin_rate', value)
自行设定,系统默认比例
如果客户为商品互换交易的买方(多头),则当标的价格下降时
若客户为商品互换交易的卖方(空头),则当标的价格上升时
总资产=可用资金 已经投入的保证金
持仓价值=合约市价?合约乘数?建仓数量
风险度=持仓保证金/客户权益
以玉米期货为例,根据大商所公布的期货合约,涨跌停板幅度为上一交易日结算价的4%
如:2019-03-20 C1905
涨停板位 =
跌停板位 =
import pandas as pd
import numpy as np
df = get_price('C9999.XDCE',end_date='2019-03-08', frequency='1d', count=2)
df
open | close | high | low | volume | money | |
---|---|---|---|---|---|---|
2019-03-07 | 1815.0 | 1831.0 | 1847.0 | 1812.0 | 595826.0 | 1.089673e+10 |
2019-03-08 | 1828.0 | 1828.0 | 1836.0 | 1823.0 | 351814.0 | 6.435640e+09 |
期货以保证金的方式进行交易,计算方式如下,不同的期货品种对应不同的交易单位和保证金比率,需要查找后对应计算
在回测中可以用context.portfolio.subportfolios.margin 查看
slippage = 0
ratio = 0.05
margin = [(df.iloc[i,0] + slippage)* 10 * ratio for i in range(df.shape[0])]
margin
[907.5, 914.0]
available_cash = 100000
amount = [round(available_cash / margin[i]) for i in range(len(margin))]
amount
[110.0, 109.0]
如果客户为商品互换交易的买方(多头),则当标的价格下降时
$$ 维持保证金=初始保证金 +MAX\{0,(开仓名义价值-持仓名义价值)\} $$
若客户为商品互换交易的卖方(空头),则当标的价格上升时
$$ 维持保证金=初始保证金 + MAX\{0,(持仓名义价值 –开仓名义价值)\} $$
# 如 2019-03-07 开多仓价格为 1831,2019-03-08 开盘价为1828
initial_position = df.loc['2019-03-07','close'] * 10 * 1
hold_position = df.loc['2019-03-08','open'] * 10 * 1
sustain_margin = margin[0] + max(0,initial_position - hold_position)
margin[0],sustain_margin
(907.5, 937.5)
回测context.portfolio.subportfolios子账户信息中available_cash字段,代表可以继续补足保证金或建仓的资金
回测context.portfolio.subportfolios子账户信息中total_value字段,包括现金, 保证金(期货)、仓位(股票)的总价值, 可用来计算收益
$$ 总资产 = 可用资金 + 已经投入的保证金 $$total_value = [margin[i] + (available_cash -margin[i]) for i in range(len(margin))]
total_value
[100000.0, 100000.0]
回测context.portfolio.subportfolios子账户信息中positions_value字段,表示持有合约以当前市价计值的价值
$$ 持仓价值 = 合约市价 * 合约乘数 * 建仓数量 $$positions_value = [df.iloc[i,0] * 10 * 1 for i in range(df.shape[0])] #下单1手
positions_value
[18150.0, 18280.0]
若客户没有持仓,则风险度为0;若客户满仓,则风险度为100%;
若风险度大于100%,则客户已经穿仓了,要被期货公司强行平仓。
正常情况下客户的风险度在0-100%之间,风险度越大,说明客户面临的风险也就越大(当然期货公司面临的风险也就越大)
risk_ratio = [margin[i] / total_value[i] for i in range(len(margin))]
risk_ratio
[0.009075, 0.00914]
当会员、客户出现下列情形之一时,交易所有权对其持仓进行强行平仓:
(一)会员结算准备金余额小于零,并未能在规定时限内补足的;
(二)非期货公司会员和客户持仓量超出其限仓规定的;
(三)因违规受到交易所强行平仓处罚的;
(四)根据交易所的紧急措施应予强行平仓的;
(五)其他应予强行平仓的。
get_extras('futures_sett_price', cf,end_date='2019-03-08', df=True, count=10)
#期货结算价
C1905.XDCE | |
---|---|
2019-02-25 | 1785.0 |
2019-02-26 | 1793.0 |
2019-02-27 | 1795.0 |
2019-02-28 | 1807.0 |
2019-03-01 | 1821.0 |
2019-03-04 | 1824.0 |
2019-03-05 | 1819.0 |
2019-03-06 | 1815.0 |
2019-03-07 | 1828.0 |
2019-03-08 | 1829.0 |
get_extras('futures_positions', cf,end_date='2019-03-08', df=True, count=10)
#期货持仓量
C1905.XDCE | |
---|---|
2019-02-25 | 1073244.0 |
2019-02-26 | 1104728.0 |
2019-02-27 | 1138372.0 |
2019-02-28 | 1159682.0 |
2019-03-01 | 1130846.0 |
2019-03-04 | 1111440.0 |
2019-03-05 | 1134746.0 |
2019-03-06 | 1114562.0 |
2019-03-07 | 1050978.0 |
2019-03-08 | 1028432.0 |
本社区仅针对特定人员开放
查看需注册登录并通过风险意识测评
5秒后跳转登录页面...
移动端课程