0%

期权保证金计算函数

上交所期权保证金算法

ETF期权

开仓保证金最低标准

1
2
认购期权义务仓开仓保证金=[合约前结算价+Max(12%×合约标的前收盘价- 认购期权虚值,7%×合约标的前收盘价)] ×合约单位
认沽期权义务仓开仓保证金=Min[合约前结算价+Max(12%×合约标的前收盘价- 认沽期权虚值,7%×行权价格),行权价格] ×合约单位

维持保证金计算公式

1
2
认购期权义务仓维持保证金=[合约结算价+Max(12%×合约标的收盘价- 认购期权虚值,7%×合约标的收盘价)]×合约单位
认沽期权义务仓维持保证金=Min[合约结算价+Max(12%×合标的收盘价- 认沽期权虚值,7%×行权价格),行权价格]×合约单位

保证金计算函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
from numpy import ndarray, maximum, minimum

def get_margin_etf_option_call(settle: ndarray,
close: ndarray,
strike: ndarray,
size: ndarray) -> ndarray:
"""
认购期权义务仓开仓保证金=[合约前结算价+Max(12%×合约标的前收盘价-认购期权虚值,7%×合约标的前收盘价)]×合约单位
认购期权义务仓维持保证金=[合约结算价+Max(12%×合约标的收盘价-认购期权虚值,7%×合约标的收盘价)]×合约单位
认购期权虚值:行权价—50ETF(前)收盘价,如果是负数取0

:param settle: settlement price
:param close: underlying asset close price
:param strike:
:param size: contract size
:return:
"""
time_value = maximum(strike - close, 0)
return (settle + maximum(0.12 * close - time_value, 0.07 * close)) * size


def get_margin_etf_option_put(settle: ndarray,
close: ndarray,
strike: ndarray,
size: ndarray) -> ndarray:
"""
认沽期权义务仓开仓保证金=Min[合约前结算价+Max(12%×合约标的前收盘价-认沽期权虚值,7%×行权价格),行权价格] ×合约单位
认沽期权义务仓维持保证金=Min[合约结算价 +Max(12%×合标的收盘价-认沽期权虚值,7%×行权价格),行权价格]×合约单位
认沽期权虚值:50ETF(前)收盘价—行权价,如果是负数取0

:param settle:settlement price
:param close:underlying asset close price
:param strike:
:param size:
:return:
"""
time_value = maximum(close - strike, 0)
return minimum(settle + maximum(0.12 * close - time_value, 0.07 * strike), strike) * size

中金所期权保证金算法

股指期权IO

股指期权合约卖方开仓时,交易所按照上一交易日结算时合约交易保证金标准收取合约卖方交易保证金。股指期权合约卖方平仓时,交易所释放合约卖方所平合约的交易保证金。当日结算时,股指期权合约卖方交纳的交易保证金标准为:

1
2
每手看涨期权交易保证金=(合约当日结算价×合约乘数)+max(标的指数当日收盘价×合约乘数×合约保证金调整系数
-虚值额,最低保障系数×标的指数当日收盘价×合约乘数×合约保证金调整系数)

1
2
每手看跌期权交易保证金=(合约当日结算价×合约乘数)+max(标的指数当日收盘价×合约乘数×合约保证金调整系数
-虚值额,最低保障系数×合约行权价格×合约乘数×合约保证金调整系数)

虚值额计算方法

1
2
看涨期权虚值额为:max[(本合约行权价格-标的指数当日收盘价)×合约乘数,0]
看跌期权虚值额为:max[(标的指数当日收盘价-本合约行权价格)×合约乘数,0]

保证金计算函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from numpy import ndarray, maximum, minimum

def get_margin_index_option_call(settle: ndarray,
strike: ndarray,
close: ndarray,
size: ndarray,
adjusted_factor: float,
guarantee_factor: float) -> ndarray:
"""
每手看涨期权交易保证金=(合约当日结算价×合约乘数)+max(标的指数当日收盘价×合约乘数×合约保证金调整系数-虚值额,
最低保障系数×标的指数当日收盘价×合约乘数×合约保证金调整系数)
:param settle:
:param strike:
:param close:
:param size:
:param adjusted_factor: 合约保证金调整系数
:param guarantee_factor: 最低保障系数
:return:
"""
# 虚数额
time_value = maximum(strike - close, 0) * size
return settle * size + maximum(close * size * adjusted_factor - time_value,
guarantee_factor * close * size * adjusted_factor)


def get_margin_index_option_put(settle: ndarray,
strike: ndarray,
close: ndarray,
size: ndarray,
adjusted_factor: float,
guarantee_factor: float) -> ndarray:
"""
每手看跌期权交易保证金=(合约当日结算价×合约乘数)+max(标的指数当日收盘价×合约乘数×合约保证金调整系数-虚值额,
最低保障系数×合约行权价格×合约乘数×合约保证金调整系数)
:param settle:
:param strike:
:param close:
:param size:
:param adjusted_factor:
:param guarantee_factor:
:return:
"""
time_value = maximum(close - strike, 0) * size
return settle * size + maximum(close * size * adjusted_factor - time_value,
guarantee_factor * strike * size * adjusted_factor)

大商所商品期权保证金算法

铁矿石期权

1
2
3
卖方单腿保证金 = Max(权利金 + 期货交易保证金 - 0.5*期权虚值额, 权利金+0.5*期货交易保证金)
看涨期权虚值额=行权价格-标的价格(小于0则取0)
看跌期权虚值额=标的价格-行权价格(小于0则取0)