原创文章第627篇,专注“AI量化投资、世界运行的规律、个人成长与财富自由"。
昨天咱们使用回测系统来改进了遗传算法的fitness和metrics。单因子年化23.7%,基于deap的因子挖掘,我改进了fitness和metrics方案(附python代码和数据)
今天我们来继续补充函数。
def add_operators(pset): """添加算子""" pset = add_operators_base(pset) add_unary_ops(pset) add_unary_rolling_ops(pset) add_binary_rolling_ops(pset)
在unary里,我们新增了一个函数,取序列的倒数:
@calc_by_symbol def inv(x: pd.Series): with np.errstate(divide="ignore", invalid="ignore"): se = np.where(np.abs(x) > 0.001, 1.0 / x, 0.0) return pd.Series(se, index=x.index)
有同学问,自己新增这样的函数,如何确保正确呢?
其实就是自己跑一下,我用表达式引擎,写一个调用该函数的最简单的在因子,比如:inv(open)。
import pandas as pd from datafeed.dataloader import CSVDataloader symbols = CSVDataloader.get_symbols_from_instruments('1-商品期货流动性好的品类.txt') #symbols = ['B0','BR0'] df = CSVDataloader.get_df(set_index=True, symbols=symbols) print(df) expr = 'inv(open)' df = CSVDataloader.calc_expr(df, [expr], ['factor']) print(df)
今天把一元rolling和二元rolling都加上之后:
import numpy as np import pandas as pd from .expr_utils import calc_by_symbol @calc_by_symbol def ts_corr(left: pd.Series, right: pd.Series, periods=20): res = left.rolling(window=periods).corr(right) # left.rolling(window=periods).apply(func=func,right) res.loc[ np.isclose(left.rolling(periods, min_periods=1).std(), 0, atol=2e-05) | np.isclose(right.rolling(periods, min_periods=1).std(), 0, atol=2e-05) ] = np.nan return res @calc_by_symbol def ts_cov(left: pd.Series, right: pd.Series, periods=10): res = left.rolling(window=periods).cov(right) return res
找到波动率因子:
年化20.7%的单因子:ts_std(log(high), 20)
类似的还有交易额的波动率:rank(ts_std(volume, 5))
吾日三省吾身
短期看,生活、工作中难免有这样或那样的事情。
不确定的时代,要预测非常难。
无论是人生规划,工作规划还是投资。
投资看似预测,其实构建交易系统的核心逻辑是“应对”。——保持一个长期的稳定盈利的能力。
不预测的规划。——最简单的投资理财就是储蓄、定投、动态再平衡和保持耐心。——足以应对全天候的市场环境。
人生亦是如此。
你永远不知道明天会遇到谁,发生什么事情,有什么经历,有什么样的机遇。
纳瓦尔宝典里,四种发现好运的能力:彩票式的撞大运、持续折腾、不停地提升判断好运(风口)的能力,以及他最认同的——不靠运气成功的能力——你有一项别人没有且需要的能力。
其实第二和三种也有大量成功的实践,要成功本身就需要大量实践和试错,很多创业者就是这么过来的,缺点是波动很大,大成者有,人生巅峰,更多则是深陷泥沼。
第四种,适合大多数普通人。——就是做好自己的积累,等机会来找你。
更保险的情况是,80%的精力在持续积累,20%走出去,折腾一点事情,去判断风口和尝试,保持对机会的敏感。
历史文章:
单因子年化23.7%,基于deap的因子挖掘,我改进了fitness和metrics方案(附python代码和数据)