简单到,我在后台直接录入一段简单的json即可:
吾日三省吾身
选择当然大于努力,但努力本身就是最好的选择。
这不是绕口令,现在很多人把所谓努力无用论来解释自己的躺平,躺得非常心安理得。
我想这也并非宇辉本意。
适度焦虑是有益于人类社会总体进步的。
为什么要说这个呢?因为去年底“差点”接受了做一个“普通人”也挺好的观点。————结果差点焦虑症犯了。
没错,多数人的数终其一生就是个世俗意义上的普通人。
但你的奋半,努力与追求,让这个过程变得唯一且有意义。
有时候就是想看看,我们自己的潜力有多大。
把AI量化平台化,这个想法好多年了。至少可以追溯到2016年。
从django/flask/fastapi,mysql/mongo。设计过多种数据表结构。
做回测引擎,整理金融数据,挖掘因子,做过很多努力。
当然很多是走了弯路,但人生每一步都算数,都有意义。
这就是探索。
这一次,平台化第6天,已经有了不错的进展。回归于
django+mysq+myngo+apscheduler。思路很清晰,框架基本落成,需求细节还有不少。
用户登录与注册功能,之前很多次,到这一步就有很多细节没有完成。——其实我们总是高估1-2年的成就,而低估5-10年的潜力。做事情也是,折腾几天就觉得好慢,进而就“不了了之”。
策略定时任务,策略创建(bootstrap+jquery就可以搞定)。之前在这一步也思考并探索了好多种方案。
我相信,下周仍然会有不少进展:
(策略超市相关)
1、后台提交策略,展现策略列表。
2、定时任务执行策略,api驱动执行策略。
3、策略详情页。
4、用户可以订阅策略。
(论坛相关)
1、flask的密码与django的加密是否一致?
2、之前绑定的会员信息导入。——email字段,用户名字段,密码字段,其他信息同步至profile。
3、贴子,分类,标签,转,评,赞,浏览建模
4、贴子导入。
5、文章列表页,详情页。
(发布相关)
1、切换到mySql数据库。
2、docker/docker-compose准备。
4、gunicorn+nginx+django部署。
心中有目标,不必也无法做所谓长期计划,一次写一周差不多。方向是明确的,尽快起而行之。
今天的几项工作:
1、策略模板统一化,统一的json,部分策略模板。
2、创业板择时策略,本地回测。
3、网页策略回测。
4、网页策略保存。
5、Django-Apscheduler,调度策略运行,结果入mongo。
6、代码发布。
策略配置统一化后的代码:
几点改进,统一一个模板,可以配置所有策略。
数据加载统一走“universe”文件夹,不区分etf,股票,指数还是期货。
class Task: name: str = '策略名称' desc: str = '策略描述' # 标的池 symbols: list[str] = field(default_factory=list) algo_period: str = 'RunDaily' algo_period_days: int = 20 # 仅当RunDays时需要 # 规则选标的:当rules_buy或rules_sell至少有一条规则时,添加SelectBySignal算子, 在SelectAll之后 rules_buy: list[str] = field(default_factory=list) # roc(close,20)>0.08 at_least_buy: int = 1 rules_sell: list[str] = field(default_factory=list) # roc(close,20)<0 at_least_sell: int = 1 # 排序算子:当order_by不为空时,在选股之后,添加SelectTopK算子 order_by: str = '' # 比如roc(close,20),或者 roc(close,20)+ slope(close,20) topK: int = 1 dropN: int = 0 b_ascending: bool = False # 默认降序 # 仓位分配,默认等权 algo_weight: str = 'WeightEqually' algo_weight_fix: list = field(default_factory=list) # 当WeightFix时需要 feature_names: list = field(default_factory=list) # roc(close,20) features: list = field(default_factory=list) # roc_20 def load_datas(self): logger.info('开始加载数据...') # loader = CSVDataloader(DATA_DIR.joinpath('universe'), self.symbols, start_date=self.start_date, end_date=self.end_date) df = loader.load(fields=self.features, names=self.feature_names) df['date'] = df.index df.dropna(inplace=True) return df return None def get_algos(self): algos = [] algos.append(self._parse_period()) algos.append(SelectAll()) if len(self.rules_buy) or len(self.rules_sell): algos.append(SelectBySignal(rules_buy=self.rules_buy, buy_at_least_count=self.at_least_buy, rules_sell=self.rules_sell, sell_at_least_count=self.at_least_sell )) if len(self.order_by): algos.append(SelectTopK(factor_name=self.order_by, K=self.topK, drop_top_n=self.dropN, b_ascending=self.b_ascending)) algos.append(self._parse_weights()) return algos
在新模板下,实现“创业板择时策略”——是不是更加简洁了?
from engine.engine import Engine from engine.task import Task t = Task() t.name = '创业板动量择时' t.symbols = ['159915.SZ'] # 创业板指数 t.features = ['roc(close,20)'] t.feature_names = ['roc_20'] t.rules_buy = ['roc_20>0.08'] t.rules_sell = ['roc_20<0']
年化20%, 回撤18.8%,还不错的——动量策略,永远的神。
代码在这里:
3、我们在网页系统里测试一下看看效果:
在咱们网站上回测结果一样:
4、策略发布到网站后台:
5、Django-APScheduler自动调度策略。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/103500
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!