python绘制香农的投资组合折线图

写在前面

最近在看《赌神数学家》这本书,在此书的第四部分“圣彼得堡悖论的故事”的“香农的恶魔”这一小节中,讲了香农自己对于股票的投资策略。在这一小节中,有一个股票价格和香农调整后的投资组合折线图,正好也学过了用python绘制折线图,想想自己能不能绘制出这个图。下面简单介绍一下股票价格的随机游走和香农的投资策略。
股票:起始价为1美元,每时间单位价格翻倍或减半的概率相等;
香农投资策略:假设你的起始资金为1000美元,其中500美元买股票,另外500美元存入现金账户。假设第一天股票价格减半,那么你的总资产就变成了750美元,其中包括250美元股票和500美元现金。此时的投资组合中,现金投资比例较大。为了保持平衡,你要从现金账户中取出125美元用来购买股票。这样,新的投资组合就变成375美元股票+375美元现金,与最初比例相同。重复上述做法。假设第二天股票价格翻倍,那么375美元的股票价值就变成了750美元,加上375美元现金,你的总资金一共是1125美元。这一次你要卖掉一些股票,然后把钱存入现金账户,最终保持股票与现金的投资都为562.50美元。

代码部分

直接上代码喽!代码注释我解释的比较清楚

#encoding=utf-8
from random import choice
import matplotlib.pyplot as plt
class RandomWalk():
    def __init__(self,num_point=20):
        #设置股票波动次数(默认20次)
        self.num_point=num_point
        #初始化时间轴x
        self.x_value=[0]
        #初始化每股价格1$
        self.y_value=[1]
        #初始化香农的现金1$
        self.y_cash=[1]
    #定义随机游走和香农投资组合的方法
    def drawRandomWalkAndShannonPortfolio(self):
        while(len(self.x_value)<self.num_point):
            #每单位时间价格翻倍或减半概率相等
            y_multiple=choice([2,1/2])
            #设置单位时间
            x_time=1
            #计算下一个点的x值(实际上x每个单位时间+1),y_value(股票值)和y_cash(香农现金值)
            next_x=self.x_value[-1]+x_time
            next_y=self.y_value[-1]*y_multiple
            next_c=self.y_cash[-1]/2*y_multiple+self.y_cash[-1]/2
            #将next_x、next_y和next_c放入列表
            self.x_value.append(next_x)
            self.y_value.append(next_y)
            self.y_cash.append(next_c)
rw=RandomWalk()
rw.drawRandomWalkAndShannonPortfolio()
#绘制股票价格折线
plt.plot(rw.x_value,rw.y_value,label="Stock Prices",c="red")
#绘制香农调整后的投资组合折线
plt.plot(rw.x_value,rw.y_cash,label="Shannon's Adjusted Portfolio",c="blue")
#设置折线图的一些基本信息
plt.title("Stock Prices and Shannon's Adjusted Portfolio")
plt.xlabel("Time")
plt.ylabel("Dollar")
plt.legend()
plt.show()

运行结果如下图(因为是随机游走,所以每次运行的结果不一样很正常)

在这里插入图片描述

写在后面

   在理想情况下,股票的这种随机游走条件下,香农的投资策略可以让资金稳定增长。在现实生活中香农的投资策略显然不可行,因为高额的交易的手续费不允许你频繁交易。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值