量化策略绩效在mongo在存储与查询方案

关于投资,要到大道至简,很轻松愉悦。

要么精细,高频、深度学习。

我不太建议,尤其是新同学,所谓的自动化的主动策略,然后看似自动化的实盘。

交易本身就是要么赚,要么亏。(50%)。你觉得自己时而行,进而不行,长期看,大概率不行。

大类资产,风险平价是入门首选。

要么整高科技,高频,深度学习。

我这段时间做的是前者,我认为对大家更有帮助。

01 量化策略在服务器的存储 

量化策略的表达,是一个字典或json,当然它包含嵌套的数据结构。如果要通过关系数据库如mysql去存储。至少得设计好几个关联表。

但我们其实就是存储一个数据结构,nosql就非常合适。

from quantlab.engine.engine import Task
import uuid
from dataclasses import asdict
from quanttask.utils import mongo_utils

def task_portfolio():
task = Task()
task._id = '5a3907af-7852-11ee-aeb4-c858c0412ade' task.name = '大类资产配置' task.desc = '沪深300指数与创业板指数,等权的配置' task.symbols = ['510300.SH', '159915.SZ'] task.template = '大类资产配置' task.weights = 'WeightEqually' task.period = 'RunMonthly' task.benchmark = '510300.SH' print(asdict(task)) return task if __name__ == '__main__': import pandas as pd tasks = [task_portfolio()] df = pd.DataFrame(tasks) mongo_utils.write_df('tasks', df )

图片

同样,回测结果直接保存回mongo供调用:

图片

02 策略在网页上的呈现

mongo也是支持跨表联合查询的:

def strategies(request):
    nav_flag = 888
    #items = list(mongo_utils.get_db()['tasks_performance'].find({}))

    items = mongo_utils.get_db()['tasks_performance'].aggregate(
        [
            {
                '$lookup':
                    {
                        "from": "tasks",  # 需要联合查询的另一张表B
                        "localField": "_id",  # A的字段
                        "foreignField": "_id",  # B的字段
                        "as": "task_docs"  # 根据AB联合生成的新字段名
                    },
            },
            {
                '$project':  # 联合查询后需要显示哪些字段,1:显示
                    {
                        'task_docs.name': 1,
                        'task_docs.desc': 1,
                        'task_docs.author': 1,
                        'CAGR':1,
                        '最大回撤':1,
                        'benchmark':1,
                        '_id': 0,
                    },
            },
            {
                '$match':  # 根据哪些条件进行查询
                    {

                    }
            }
        ]
    )

    items =  list(items)
    print(items)
    tasks = []
    for item in items:
        task = item.copy()
        task['bechmark_CARG'] = task['benchmark'][0]['CAGR']
        task['author'] = task['task_docs'][0]['author']
        task['name'] = task['task_docs'][0]['name']
        task['desc'] = task['task_docs'][0]['desc']
        tasks.append(task)

    items = tasks
    return render(request, 'quant/mall.html', {**locals()})

最终呈现如下的样子如下:

后续可以继续美化和优化。

图片

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/103733
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2024 年 7 月 29 日
下一篇 2024 年 7 月 29 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注