finance
金融 指尖笔记
期权
看涨期权:拥有在交割日以行权价格买入标的物的权利
看跌期权:拥有在交割日以行权价格卖出标的物的权利
在行权日,期权持有者可以选择或放弃交付。因为买入期权的人拥有选择的权利(option)。
期权可以买入,那么期权的卖方是谁呢?
两种期权分别分析。
看涨期权:
看涨期权赋予期权买方买入标的物的权利,标的物的来源则来自于卖方。看涨期权的卖方必须拥有标的物。标的物和行权价格形成看涨期权合约这一商品。它就由卖方卖给买方。期权合约这类商品有价值,它的价值就是权利金。下面从两方面分析。
买方角度:买方以权利金的价格买入期权。到了交割日,若标的物价格大于行权价格,买方必定行使权力,买入标的物,然后再卖出标的物,赚取价格差。若标的物价格小于行权价格,买方肯定放弃行使权力,因为不可能买入标的物然后再卖出,这样亏死。那么买方的收益 = max(0, 即期价格-行权价格) - 权利金
卖方角度:卖方卖出期权获得权利金。在交割日,买方若行权,卖方必须卖出标的物。买方放弃行权,卖方保留标的物。当即期价格 > 行权价格:卖方卖出标的物,相比于不选择卖出期权合约的情况,显然卖方在出售标的物的收益上处于亏损状态。当即期价格 < 行权价格:买方放弃行权。卖方保留标的物,相比于不选择卖出期权合约的情况,卖方在出售标的物的收益上不亏不赚。卖方的收益 = min(权利金,权利金+即期价格-行权价格)
看跌期权:
看跌期权赋予买方在交割日以行权价格卖出标的物的权利。买方卖出的标的物必须得有人接手,那个接手的人就是看跌期权的卖方。所以看跌期权合约由行权价格,卖方买入标的物的义务组成。这个义务取决于买方是否行权。
分析
买方角度:买方以权利金从卖方出购买期权,付权利金。期权赋予买方在交割日是否选择卖出标的物的权利 。在交割日,若即期价格 > 行权价格,买方肯定放弃卖出,然后以即期价格卖掉标的物赚钱。否则行权肯定亏死。若即期价格 < 行权价格,卖方肯定行权赚钱。买方收益 = max(0 , 行权价格 - 即期价格 ) - 权利金。
卖方角度:卖方卖出期权获得权利金。若即期价格 < 行权价格, 买方行权,卖方必须以行权价格买入标的物,相比于直接以即期价格买标的物来看,卖方处于亏损状态。若即期价格 > 行权价格,买方放弃行权,卖方无需买入标的物。 卖方收益 = min(权利金,权利金 + 即期价格 - 行权价格)
以上是阿枫对期权的浅显思考,仅参考课件和书本基础知识,没有细查专业知识。如有错误,请留言斧正。
上证180指数投资组合的风险测度
指定年份,计算这时期的上证180的风险
使用教程
数据表准备
- 在CSMAR数据库下载某一时期的上证180指数的数据表
- 另存为数据表,保存到你的工作目录,格式csv,名称“stock”+”number”,比如”stock4”
代码准备
安装 numpy 和 matplotlib 模块
复制代码(有两个版本),保存到当前目录 ,命名。比如”magic.py”
Linux 或 Mac 系统:
打开Terminal,cd 当前目录,chmod +x magic.py。
magic.py -i stock_id。例如 导入stock4.csv 文件,开始变魔法。
./magic.py -i 4
Windows:
在IDE里直接 Run。(不熟悉Win,所以直接修改了代码,不用命令行操作)
数据表和代码放在同一个目录下。
结果示例
附件
Windows版
#!/usr/bin/env python
#coding=utf8
import csv
import numpy as np
import argparse
import random
import matplotlib.pyplot as plt
stock_max = None
stock = []
stock_exp = []
stock_var = []
stock_val = []
def main():
print 'This is Windows Version'
file_id = raw_input("File Name:")
clean_data(file_id)
x = np.array([i for i in range(1,stock_max)])
y_list = [];note_list = []
note_list.append('Same weight');y_list.append(Var(x,1))
note_list.append('Capitalization-weight'); y_list.append(Var(x,0))
draw_plot(x,y_list,note_list)
def Var(x,opt):
y = []
#shuffle
global stock;global stock_val
com = zip(stock,stock_val)
random.shuffle(com)
stock = []
stock_val = []
for i in range(stock_max):
stock.append(com[i][0])
stock_val.append(com[i][1])
#shuffle
for n in x:
cov_mat = []
weight = []
for i in range(n):
cov_mat.append(stock[i])
weight_sum = sum(stock_val[0:n])
cov_mat = np.mat(np.cov(cov_mat))
for i in range(n):
weight.append(stock_val[i]/weight_sum)
if opt==1 :weight = [1.0/n for i in range(n)]
weight = np.mat(weight)
var = float(weight*cov_mat*weight.T)
var_sqrt = pow(var,0.5)
y.append(var_sqrt)
return y
def draw_plot(x,y,note):
for i in range(len(y)):
plt.plot(x, y[i], label=note[i])
plt.xlabel('Number of stocks')
plt.ylabel('Portfolio Standard Deviation')
plt.title("Finance")
plt.legend()
plt.show()
def clean_data(id):
with open(id,'r') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
line_cnt = 0
stock_map = dict()
for row in csv_reader:
line_cnt+=1
if line_cnt<4: continue
if row[0] not in stock_map.keys():
stock_map[row[0]] = [[],[]]
if row[4]=='' or row[3] == '': continue
stock_map[row[0]][0].append(float(row[4]))
stock_map[row[0]][1].append(float(row[3]))
global stock;global stock_val;global stock_max
good_len = 120
#;get good_len:
len_map = dict()
for i in stock_map:
if len(stock_map[i][0]) not in len_map.keys():
len_map[len(stock_map[i][0])] = 1
else:
len_map[len(stock_map[i][0])] += 1
cur_max = 0
for i in len_map:
if len_map[i]>cur_max:
good_len = i
cur_max = len_map[i]
#get good_len: done
print 'Appearance of one stock:',good_len
stock_max = len(stock_map)
for i in stock_map:
if len(stock_map[i][0])<good_len: continue
stock.append(stock_map[i][0][:good_len])
stock_val.append(stock_map[i][1][:good_len])
for i in range(len(stock_val)):
stock_val[i] = np.mean(np.array(stock_val[i]))
stock_max = len(stock)
print 'Number of stock:',stock_max
def parse_args():
parser = argparse.ArgumentParser(description="Give me a stock data , I will give you a chart!")
parser.add_argument("-i", "--id", dest="id", help="stock data ID.")
return parser.parse_args()
if __name__ =='__main__':
main()
Linux或Mac版
#!/usr/bin/env python
#coding=utf8
import csv
import numpy as np
import argparse
import random
import matplotlib.pyplot as plt
stock_max = None
stock = []
stock_exp = []
stock_var = []
stock_val = []
def main():
args = parse_args()
file_id = args.id
clean_data(file_id)
x = np.array([i for i in range(1,stock_max)])
y_list = [];note_list = []
note_list.append('Same weight');y_list.append(Var(x,1))
note_list.append('Capitalization-weight'); y_list.append(Var(x,0))
draw_plot(x,y_list,note_list)
def Var(x,opt):
y = []
#shuffle
global stock;global stock_val
com = zip(stock,stock_val)
random.shuffle(com)
stock = []
stock_val = []
for i in range(stock_max):
stock.append(com[i][0])
stock_val.append(com[i][1])
#shuffle
for n in x:
cov_mat = []
weight = []
for i in range(n):
cov_mat.append(stock[i])
weight_sum = sum(stock_val[0:n])
cov_mat = np.mat(np.cov(cov_mat))
for i in range(n):
weight.append(stock_val[i]/weight_sum)
if opt==1 :weight = [1.0/n for i in range(n)]
weight = np.mat(weight)
var = float(weight*cov_mat*weight.T)
var_sqrt = pow(var,0.5)
y.append(var_sqrt)
return y
def draw_plot(x,y,note):
for i in range(len(y)):
plt.plot(x, y[i], label=note[i])
plt.xlabel('Number of stocks')
plt.ylabel('Portfolio Standard Deviation')
plt.title("Finance")
plt.legend()
plt.show()
def clean_data(id):
with open('stock'+str(id)+'.csv','r') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
line_cnt = 0
stock_map = dict()
for row in csv_reader:
line_cnt+=1
if line_cnt<4: continue
if row[0] not in stock_map.keys():
stock_map[row[0]] = [[],[]]
if row[4]=='' or row[3] == '': continue
stock_map[row[0]][0].append(float(row[4]))
stock_map[row[0]][1].append(float(row[3]))
global stock;global stock_val;global stock_max
good_len = 120
#;get good_len:
len_map = dict()
for i in stock_map:
if len(stock_map[i][0]) not in len_map.keys():
len_map[len(stock_map[i][0])] = 1
else:
len_map[len(stock_map[i][0])] += 1
cur_max = 0
for i in len_map:
if len_map[i]>cur_max:
good_len = i
cur_max = len_map[i]
#get good_len: done
print 'Appearance of one stock:',good_len
stock_max = len(stock_map)
for i in stock_map:
if len(stock_map[i][0])<good_len: continue
stock.append(stock_map[i][0][:good_len])
stock_val.append(stock_map[i][1][:good_len])
for i in range(len(stock_val)):
stock_val[i] = np.mean(np.array(stock_val[i]))
stock_max = len(stock)
print 'Number of stock:',stock_max
def parse_args():
parser = argparse.ArgumentParser(description="Give me a stock data , I will give you a chart!")
parser.add_argument("-i", "--id", dest="id", help="stock data ID.")
return parser.parse_args()
if __name__ =='__main__':
main()
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论。
文章标题:finance
本文作者:枫云李
发布时间:2019-05-01, 00:00:00
最后更新:2020-01-16, 02:06:12
原始链接:https://primelyw.github.io/2019/05/01/finance/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。