请 [注册] 或 [登录]  | 返回主站

量化交易吧 /  量化平台 帖子:3364737 新帖:1

【期货】简述期货交易基本概念

专门套利发表于:6 月 28 日 13:56回复(1)
import pandas as pd
import numpy as np
df = get_price('C9999.XDCE',end_date='2019-03-08', frequency='1d', count=2)
df
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
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)
#期货结算价
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
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)
#期货持仓量
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
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
 

全部回复

0/140

量化课程

    移动端课程