新年伊始,很荣幸笔者的《教你用 Python 进阶量化交易》专栏在慕课专栏板块上线了,欢迎大家订阅!为了能够提供给大家更轻松的学习过程,笔者在专栏内容之外会陆续推出一些手记来辅助同学们学习本专栏内容,因此同学们无需担心专栏内容在学习上的困难,更多的是明确自己学习的目的即可。当然笔者也欢迎同学们踊跃留言,说出自己想扩展的知识点,笔者会根据同学们的意愿选择性的推出一些内容。
在专栏中笔者以股票为交易标的讲解量化交易的学习,主要原因是股票的风险和收益介于期货和基金之间。期货一方面加了杠杆,另一方面走势变化非常迅速,稍有不慎有可能血本无归,这不太适合大众参与。基金由专业团队打理,虽然收益最小,但风险也是最小的,求稳的话买基金也是个不错的选择。
说起股票,A股市场自设立至今经历了多次牛熊转换,笔者身边也有很多朋友在牛市赚了很多钱,但最终“退潮”的时候还是亏回去了。之前看到一则新闻上说中国的股民有1.2亿多,统计股民的行为发现他们每天平均看盘2小时,全年平均买19只股,平均2天一次交易,可以看出大多数股民交易频繁,对买卖点思考并不严谨。
本专栏将量化交易技术应用股票交易中,并不是传授战胜市场、一夜暴富的本领,而是想让同学们通过量化交易管理亏盈的概率,能够更理性的将股票投资作为理财的一个手段,而不是以赌博的心态参与其中。那么本小节,笔者结合一个简单的市场模型来介绍下为什么在没有概率优势的前提下参与交易会亏钱。
假设我们投资的市场是一个具备短线交易特征的市场,可以不分昼夜的不停交易,而且还不需要交手续费。那么我们的初始资金是1000元,每次随机的买9个股票,如果有一半以上的股票涨了的话,我们暂定赚1元,否则一半以上的股票跌了,我们就亏一元。由于我们是随机买的,那么赢钱的概率为50%。我们邀请50个人参与1000局看下效果:
代码如下:
def simpmarket(win_rate, play_cnt=1000, stock_num=9, commission=0.01):
money = np.zeros(play_cnt)
money[0] = 1000
binomial = np.random.binomial(stock_num, win_rate, play_cnt)
print(binomial)
for i in range(1, play_cnt):
if binomial[i] > stock_num//2:
money[i] = money[i-1] + 1
else:
money[i] = money[i-1] - 1
money[i] -= commission
if money[i] <= 0:
break
return money
[plt.plot(np.arange(1000), simpmarket(0.5, play_cnt=1000, stock_num=9, commission = 0)) \
for _ in np.arange(0, 50)]
结果还不错,亏钱的人和赚钱的人基本一半一半,符合零和游戏的特征。不过市场要经营是需要有收入的,那么就需要对交易收取手续费,为了更直观的比较出手续费对交易的影响,我们假定每次交易的手续费为0.1元。我们邀请50个人参与1000局看下效果:
很不幸的是零和游戏变成了负和游戏,没有一个人是赚钱的,大家都亏钱了,当局数再增大以后的结局一定是血本无归。市场是一定会有手续费的,那我们就这么心甘情愿的当韭菜吗?如果我们想盈利的话就只能期待每局上涨的概率大于50%时才参与,否则不参与就不会亏钱了,并且每局赢的钱要比亏的钱多。其实这些需求映射到量化交易之中就是策略回测、仓位管理、止盈止损这些功能。那么我们改变概率这个因子,将它放大到55%,我们邀请50个人参与1000局看下效果:
看来结果还不错,只要增加盈利的概率,就可以在市场中获得收益,这就是量化交易的魅力——管理概率==理性交易。更多的量化交易内容欢迎大家订阅专栏阅读!!
共同学习,写下你的评论
评论加载中...
作者其他优质文章