资金管理

Photo by AbsolutVision on Unsplash

本文重点概要

前言

胜率、赔率与下注比例是投资人既熟悉又陌生的词汇,我们往往凭著自身的盘感,在心中相乘胜率与赔率后,决定投资标的的下注比例,然而主观盘感往往造成大部份投资人难以向旁人讲清楚自己下注比例的依据。

在投资中无可避免的是胜率与赔率有极高的主观判断,但我们可以在确定胜率与赔率后,利用凯利公式决定下注比例,在本金永不归零的条件下,极大化长期收益。接下来本文以凯利公式来决定下注比例,在每月初重新投资 0050 ETF,同时比较 buy & hold本金相同的投组。

编辑环境及模组需求

本文使用 Windows OS 并以 Jupyter Notebook 作为编辑器

import matplotlib.pyplot as plt import numpy as np import tejapi tejapi.ApiConfig.api_key = "your key"

资料库使用

资料处理

我们从 TEJ资料库捞取 0050ETF月报酬率。

data_return = tejapi.get('TWN/AAPRCM1',                          coid = '0050',                          mdate= {'gte': '2010-01-01','lte':'2015-12-31'},                          opts={'columns':['coid','mdate','roi']},                          chinese_column_name=True,paginate=True)

凯利公式

我们简单以前12个月月报酬率为依据,若月报酬率大于0,则视为成功,反之失败,如此我们可以获得每月初投资 0050 ETF时的胜率与赔率。

  • 胜率P:成功的总次数/(成功的总次数+失败的总次数)
  • 赔率b:成功时的盈利/失败时的亏损
  • 下注比例f:投入资金占本金的比例
data_return['胜率'] = np.where(data_return['报酬率%_月'] >= 0 ,1,0) data_return['胜率'] = data_return.rolling(12)['胜率'].sum() / 12 data_return['获利'] = np.where(data_return['报酬率%_月'] >= 0 ,data_return['报酬率%_月'],np.nan) data_return['亏损'] = np.where(data_return['报酬率%_月'] < 0 ,data_return['报酬率%_月'],np.nan) data_return['赔率'] = data_return.rolling(12, min_periods=1)['获利'].mean()/ data_return.rolling(12, min_periods=1)['亏损'].mean().abs()

再透过凯利公式换算出下注比例,本金乘上下注比例,便是当期的下注额。凯利公式中的分子若为负数,则表示此次投资不值得下注,我们便将该期下注比例设为0。

凯利公式
data_return['下注比例'] =      np.where(data_return['胜率'] * data_return['赔率'] - (1 - data_return['胜率']) < 0,0,              (data_return['胜率'] * data_return['赔率'] - (1 - data_return['胜率'])) / data_return['赔率']              ) # 前一个月的下注比例,避免前视偏误
data_return['下注比例'] = data_return['下注比例'].shift()

我们根据胜率与赔率有系统地调整下注比例。

资料表(一)
for i in range(0,len(data_return)):     if i == 0:         data_return['buy & hold本金'] = 1000000 # 起始本金     else:         data_return.loc[i,'buy & hold本金'] = 1000000 * data_return.loc[i-1,'累积报酬率%_月'] for i in range(0,len(data_return)):     if i == 0:         data_return['凯利本金'] = 1000000 # 起始本金     else:         if data_return.loc[i,'下注比例'] > 0:             data_return.loc[i,'凯利本金'] = data_return.loc[i-1,'凯利本金'] * (1 - data_return.loc[i,'下注比例'])                  + data_return.loc[i-1,'凯利本金'] * data_return.loc[i,'下注比例'] * (1 + data_return.loc[i,'报酬率%_月'])                      # - data_return.loc[i-1,'凯利本金'] * data_return.loc[i,'下注比例'] * 0.002 # 手续费         else:             data_return.loc[i,'凯利本金'] = data_return.loc[i-1,'凯利本金']
资料表(二)
图(二)

结论

我们观察2011年至2015年的本金累积趋势图,比较 Buy & Hold与凯利公式下的投组,发现后者的累积本金额并未赢过前者,可能原因是凯利公式适用于所有已知机率或者概率可以被估计的投资中,股市中充满不确定性的赔率与胜率难以使凯利公式发挥作用。然而凯利公式的思维却仍值得我们学习,透过下注比例控制风险,即使高胜率与高赔率也不要 All in,避免造成永久性损失。

未来读者可试著研究如何提高策略的胜率与赔率,使下注比例更加精准,放大部位的同时,也有风险控管的思维,帮助我们长期在市场中存活。最后欢迎读者前往我们的官方网站,里面有提供更多财务、交易等财金资料,来帮助读者制作更好的选股策略!

本文仅供参考之用,并不构成要约、招揽或邀请、诱使、任何不论种类或形式之申述或订立任何建议及推荐,读者务请运用个人独立思考能力,自行作出投资决定,如因相关建议招致损失,概与作者无涉。

完整程式码

延伸阅读

相关连结

返回总览页