今天仍然是优化版本体验:
代码在星球进行开源。【优惠券】知识星球与开源项目:万物之中,希望至美
近期代码迭代记录:
2023-10-03 1、修改bug 2、支持console和gui两种模式。 2023-10-01 1、dataclass配置ProjConfig,同步生成toml,配置策略更容易 2、网格策略Algo开发。 2023-09-29 1、toml包不支持异构的array,改用tomli包来读,还是使用toml来写。 2、引入dataclass来读写toml文件,可以直接转成类。 2023-09-28 1、使用pyinstaller打包 pyinstall main.py --noconsole --add-data ./data:./data
吾日三省吾身
国庆假期,之于我比较无感。
朋友圈看大家走遍全国,周游世界。
但想起更多的是,《百万富翁快车道》里说的,为何大家拿辛勤工作的5天,去换取周末2天的休息还这么开心?为何用一年之辛劳,换到这7天到处拥挤的打卡,还这么幸福?
这样一种惯性一定是正确的嘛?
昨天读到一本书,感觉挺好的。
“单干”的逻辑并不是字面上的,一定让你单枪匹马去做自由职业者。它指的是一种状态,也就是当下流行的“超级个体”或者“1人企业”。
为什么需要公司这样的人才组织方式?就是原始社会,由于个体力量弱,只有抱团取暖,相互帮助,大家才能很好地生存下去。工业化时代如此,互联网进入资本时代之后也是。
打造一个体验非常好,还得免费,体验为王,供给过剩的时代,军团化作战,资本加持才能做好。
但进入到互联网下半场,撒个种子就能遍地开花的时代已经过去,商业模式要求必须自己能造血。这时候,利润与成本就变得非常关键。
超级个体是由于基础设施与用户消费习惯成熟。个人做出产品容易,变现模式也变得容易。个人企业的逻辑的成本优化,最小化成本,最大化利润。
所谓商业模式,就是赚钱的模式,也就是如何变现。现在很多企业也转向把这个问题放在第一位。而不是开始只考虑规模,不考虑变现。
超级个体的逻辑是——像经营公司一样经营自己。
你是自己这家公司的CEO,有战略部,销售部,运营部,品牌部,研发部。。。
不想过被他人主导的生活,你就必须自己决定怎么做,而且有勇气去做。 瑞.达利欧
财富是你睡觉的时候,还能产生现金流的东西。产品,稀缺的产品,信息差,解决方案导向,能带来确定性的产品。杠杆倍率=基数 x 溢价。基数=标准化;溢价=独特价值。
新手红利期,向高手学习,对标头部竞品。跨界升维,差异化。
今天主要是排查AI量化系统的BUG,预计咱们在节后上班第一天,要发布一个阶段性的版本。
代码与数据均在星球更新:
功能开发基本完成了,后面是收尾,排查有没有大的问题。
这个版本会作为后面快速开发策略的一个基础版本。后续我们就专注策略开发,因子发现,积累算子,扩展数据源等工作了。
backtrader经常会发生的margin状态——原因是“现金不足”。这时候,需要预留一定比例的cash,以备支付交易佣金,尤其是你使用order_target_percent这样的api的时候,暂时没有发现更好的办法。
排查问题1:昨天有同学问,系统的交易逻辑,backtrader是按照当前bar收盘后计算信号,下一期开盘价交易的逻辑。——不少同学在探讨的这个逻辑,这里有点绕,大家需要清晰理解一下。盘后计算指标,调仓,指令在第2天以开盘价成交。
我排查了一下,暂未发现问题。
为了便于观察,我对数据预处理作了一下优化:
def to_backtrader_dataframe(df): df = df.copy() df.index = pd.to_datetime(df.index) df['openinterest'] = 0 df = df[['open', 'high', 'low', 'close', 'volume', 'openinterest']] #if df['close'].iloc[-1] > 1000: # 指数之类的数据,归一化一下,普通的股票ETF就不归一化了 # for c in ['open', 'high', 'low', 'close']: # df[c] = df[c] / df[c].iloc[0] return df
Backtrader内部会有指标归一化的机制,这里不需要我们操心,不小心容易引入未来函数。
吾日三省吾身
中午闲来无事,随手点开《西游记》看了一会。
看的是悟空拜师学艺那段,小时候看的情节都是记得了。
原来悟空还有那么多师兄弟。
我突然想到,怎么他这么多师兄弟,都默默无闻,而他自己可以把三界搅得天翻地覆。
又联想到古龙与金庸的小说。
金庸的书,贯穿了“仁义礼智信”,所以,很适合拍成电视剧,好人就是好人,家国天下,很容易成为经典。除韦小宝亦正亦邪门(但之于大是大非不含糊),张无忌优柔寡断之外;
反观古龙的书,搁现在的标准,几乎都是渣男为主吧,陆小凤,楚留香。似乎他们也并不关心家国情怀。
在你历尽千帆,终于“眼晴里充满了故事,但脸上却不见风霜”的时候,你会喜欢谁呢?
郭靖、萧峰都是要牺牲小我,成全天下的人。
陆小凤,楚留香好管闲事,义字当头,不为俗事规矩所困。
但古龙的书,写的是他心底的人生,也更像普通人的人生。
如果你财富自由之后,你想过什么样的人生呢?28岁财务自由的程序员,我想起那些年错过的1个亿,悲伤的故事
1、快速开发策略
2、提供支持快速开发策略的“轮子”。
包含但不限于:多维数据,因子库,策略模板,算子模块等。
还是在这个脚本下:
如下代码就可以生成“大类资产配置+动态再平衡”的策略,这是一个通用策略模板,你修改里面的symbol,就是一个“全新的”可用的策略!
def gen_portfolio_rebalance():
proj = ProjConfig()
proj.name = '示例-资产配置-再平衡'
proj.commission = 0.0001
proj.slippage = 0.0001
proj.symbols = ['000300.SH', '399006.SZ'] # 证券池列表
proj.benchmark = '000300.SH'
proj.start_date = '20100101'
proj.data_folder = 'index' # 这里指定data/数据目录
# 这里是策略算子列表
proj.algos.append(AlgoConfig(name=RunWeekly().name)) # 再平衡周期
proj.algos.append(AlgoConfig(name='SelectAll')) # 选股,直接使用字符串,效果一样 proj.algos.append(AlgoConfig(name=WeightEqually().name)) # 仓位权重 proj.algos.append(AlgoConfig(name=Rebalance().name)) # 执行再平衡 return proj
当然,如果你熟悉咱们的设计,你直接写toml也是可以的。
上述脚本与如下toml配置是一一对应的。
name = "示例-资产配置-再平衡" desc = "" start_date = "20100101" commission = 0.0001 slippage = 0.0001 benchmark = "000300.SH" symbols = [ "000300.SH", "399006.SZ",] data_folder = "index" fields = [] names = [] [[algos]] name = "RunWeekly" args = [] [[algos]] name = "SelectAll" args = [] [[algos]] name = "WeightEqually" args = [] [[algos]] name = "Rebalance" args = []
然后你再运行toml,就可以得到如下结果:
同样,我们来优化“静待花开的聚宝盆”这个策略:
# 静待花开的聚宝盆 def gen_flower(): proj = ProjConfig() proj.name = '静待花开的聚宝盘' proj.commission = 0.0001 proj.slippage = 0.0001 proj.symbols = [ '511220.SH', # 城投债 '512010.SH', # 医药 '518880.SH', # 黄金 '163415.SZ', # 兴全商业 '159928.SZ', # 消费 '161903.SZ', # 万家行业优选 '513100.SH' # 纳指 ] # 证券池列表 proj.benchmark = '000300.SH' proj.start_date = '20100101' proj.data_folder = 'etfs' # 这里指定data/数据目录,这里的数据在etfs下 proj.fields = ['roc(close,20)', 'roc_20>0.02', 'roc_20<-0.02'] proj.names = ['roc_20', 'buy', 'sell'] # 这里是策略算子列表 # proj.algos.append(AlgoConfig(name=PrintDate().name)) proj.algos.append(AlgoConfig(name='RunDays', args=[5])) # 再平衡周期 proj.algos.append(AlgoConfig(name=SelectBySignal().name, kwargs={'rules': ['buy']})) # 选股,直接使用字符串,效果一样 proj.algos.append(AlgoConfig(name=SelectHolding().name)) # 选股,直接使用字符串,效果一样 proj.algos.append( AlgoConfig(name=SelectBySignal().name, kwargs={'rules': ['sell'], 'exclude': True})) # 选股,直接使用字符串,效果一样 proj.algos.append(AlgoConfig(name=WeightEqually().name)) # 仓位权重 # proj.algos.append(AlgoConfig(name=PrintTempData().name)) proj.algos.append(AlgoConfig(name=Rebalance().name)) # 执行再平衡 return proj
吾日三身吾身
我相信大多数人都是冲着策略来的,当然这本身也是星球的初心。我们确实在也持续给大家开发策略,提供快速验证策略的思路。
比如:
年化65%的ETF轮动策略,在gui框架下运行(代码+数据下载)
开源quantlab1.5,回测过程与结果可视化(代码+数据)
年化26.8%,夏普1.28,单向做多螺纹钢的期货策略,Autogluon机器自主调参(策略+代码下载)。
但我一直也在提醒,授人以鱼不如授人以渔。
投资与科学研究不同,科学如数学、物理这个的领域,你搞出一个结果,基本就是真理,投资没有永恒的圣杯,它是一个市场博弈的结果,价格是一个大多数人的共识结果,即便的错的,大家共识了,就是这个价格。
这也是投资领域肯定是没有传统权威的,剩者为王。
昨天看了一本书里讲,不要只提供产品,要提供服务,提供解决方案。是这样的。传统的知识付费产品,真的只是一个交付型的产品,比如录一门视频课,或者是一个专栏,偶尔会回复一点评论就不错的。这种的学习效果其实一般的。星球更类似于一个解决方案,星球是以时间为周期,比如一年,营造一个学习的氛围,提供一个学习的社群。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/103836
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!