今天说说ATR仓位管理。
无论如何定量分析,机器学习预测,其实都是一个概率问题。
仓位管理可以让交易体系运行得更加平稳。
仓位管理的逻辑是不预测,看市场发生的什么,如何做出反应。
投资三件事: 选股(便宜的好公司,好东西被估了)、择时(动量,方向,相对优势)、(风控)仓位管理。
在量化里,我们经常选股、择时一起做(就是多因子),给一个综合分,估值始终,有方向趋势,有相对优势。
有指数,期货,加密货币里,少有选标的这一环节,CTA主打就是择时。
择时就是“预测方向”,这是一个概率命题。
买卖信号相当于更加宏观,在卖出信号未触发,但触发了止损保护,也会止损出场。而只要没有卖出信号,就可能加仓并提升止损位。——没有分批离场和止盈的逻辑。
仓位管理是指我们在决定做多某个投资对象时,用来决定怎样分批入场以及如何止损或者止盈离场的技术。仓位管理并不涉及选时或者选股技术。有专家测验过,即使用抛硬币的随机决策下,利用好的仓位管理技术依旧是可以赚到钱。
海龟交易法则里的建仓逻辑:1%* (价格/ATR),比如价格是ATR的20倍,那么买入20%。
止损规则:建仓价-2*ATR。建仓后跌落2倍ATR后止损。每上涨0.5ATR就加仓一次。每一个新的加仓执行后,都要立刻将止损价提高到新的价位之下2ATR的地方。移动止损是整个仓位管理的最关键的地方。
说到ATR,自然不会不提著名的海龟交易系统。麻雀虽小,它却是一个完整的交易系统。
我们选择宽基指数吧,比如沪深300,创业板或者纳指,标普500,先从标普500指数开始。
loader = Hdf5Dataloader(['SPX'], start_date="20100101")
接入来要确定因子(指标),我们的框架比backtrader,pybroker灵活的地方, 我们可以支持无限个因子,而backtrader或pybroker要额外说明,这个对于机器学习来讲太麻烦了——它们仅适合有限个因子的场景。
趋势追踪——唐奇安通道(买卖信号由通道决定)
海龟交易法则利用唐奇安通道的突破点作为买卖信号指导交易,简单而言唐奇安通道是由一条上轨线、中线和下线组成,上轨线由N1日内最高价构成,下轨线由N2日内最低价计算,当价格冲破上轨是可能的买入信号,反之,冲破下轨时是可能的卖出信号。
然后仓位分配,止损都与一个指标ATR相关。
因为我们需要计算三个指标:唐奇安通道上轨,下轨以及ATR。Ta-lib都可以轻松做到。
talib的代码移动这里了:
import pandas as pd import talib def _ta(fn, se, *args, **kwargs): result = getattr(talib, fn)(se, *args) if type(result) is tuple: if 'get_result' in kwargs.keys(): if kwargs['get_result'] >= len(result): print('参数超过个数,返回第一个') return result[0] else: return result[kwargs['get_result']] return result[0] return result def ta(fn, se: pd.Series, *args, **kwargs): return se.groupby('symbol', group_keys=False).apply(lambda x: _ta(fn, x, *args, **kwargs)) def sma(se, N): return ta('SMA', se, N) def rsi(se, N): return ta('RSI', se, N) def macd(se): return ta("MACD", se, get_result=2) def bbands_up(se): return ta('BBANDS', se, get_result=0) def bbands_down(se): return ta('BBANDS', se, get_result=2) def _atr(high, low, close, period=14): return talib.ATR(high, low, close, period) def ta_atr(high, low, close, period=14): high.name = 'high' low.name = 'low' close.name = 'close' df = pd.concat([high, low, close], axis=1) return df.groupby('symbol', group_keys=False).apply( lambda sub_df: _atr(sub_df['high'], sub_df['low'], sub_df['close'], period))
有了因子表达式就可以加载数据了:
loader = Hdf5Dataloader(['SPX'], start_date="20100101") fields = ['ta_atr(high,low,close,14)', 'max(shift(high,1),20)', 'min(shift(close,1),20)'] names = ['atr_14', 'max_20', 'min_20'] df = loader.load(fields=fields, names=names) bench_loader = Hdf5Dataloader(['000300.SH'])
数据加载成功:
使用matplotlib画出来看看效果:
单纯使用唐奇安通道突破的效果:
始的海龟交易采用唐奇安通道来追踪趋势,在趋势比较明显的行情表现不错,但是在震荡的行情中效果不佳,这是所有趋势型策略的通病。
明天引入ATR仓位管理。今天代码已经在星球更新。
昨天与父母聊起,说现在中考50%分流的事情。中考离我已经好远好远,外甥女很快都要中考了。想当年,尽管没有所谓分流的概念,但升学率其实远低于50%。但一个事情,一旦变成规则,感觉又似乎有点不一样。
另一个趋势是出生率在持续下降,那未来上大学的人岂不是更少?
今天看到说“平台工人”超过2个亿——主要是快递、外卖、网约车三大平台。
孩子还小,但不禁也会想想。我们是高考受益的一代人——就是他们口中的小镇做题家,似乎高考是为数不多走出小镇和大山的一条路。高考意味着什么呢?意味着学历、就业。
读杨绛传,说她和钱钟书去巴黎大学读书,不报名,因为不求学历,只想学自己感兴趣的东西。钱钟书高考数学15分,破格录取。普通人没有这样的运气与机会。其实,知识是可以按自己的兴趣组织的,但学历不行,当然不排除后续会改革,比如学分制,修够学分即可。
还有创业,你若是有天份,创业是不看学历出身的,马云自己也说,按阿里现在的招聘标准,他连个面试的机会都没有。这是不同维度的竞争。
面对问题的最优办法并不是想尽办法解决问题,而是升到一个更高的维度,问题自己就消失了。
投资也不看学历的。尽管要做基金经理的话,学历背景要求极高。但不乏草根英雄,如果你管理自己的钱,则完全没有门槛。
还有作家,自媒体,网红,现在倒是很多职业与学历无关。
与学历有关的多数是白领、工薪族。
这么一分析,其实“学历-就业”并不是最优的选择不是嘛?但是最多人选择的路,因为确定。失业率升高大家突然发现这条路并不是想象中的那般岁月静好。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/104058
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!