这里的动量及止损,还有优化方向,作为星球的作业:
其实追求长期年化20%,回撤小于20%是一个合理且舒服的状态。
使用streamlit搭建量化界面,相当容易。
后面部署到服务器供大家直接回测使用:
核心代码如下:
import streamlit as st import pandas as pd import numpy as np from common import mongo_utils import datetime as dt import time from datetime import datetime def get_etf_list(): items = mongo_utils.get_db()['universe'].find({'type':'etf'}, {'_id':0, 'symbol': 1, 'name':1}) df = pd.DataFrame(list(items)) df['title'] = df['name'] + '-' + df['symbol'] return list(df['title']) st.title('创建你自己的AI量化策略') import streamlit as st basic, rules, backtest = st.tabs(["回测基础配置", "回测规则", "权重与调仓"]) with basic: name = st.text_input(label='请输入策略名称', value='策略1') template = st.selectbox( '请选择策略类型', ('大类资产配置', '轮动')) symbols = st.multiselect( '请选择etfs', get_etf_list(), [], placeholder='请选择etfs') col1, col2 = st.columns(2) with col1: dt_start = st.date_input("起始日期", dt.date(2010, 1, 1)) with col2: dt_end = st.date_input("结束日期", datetime.now().date()) benchmark = st.selectbox('请选择比较基准',options=get_etf_list()) with rules: df = pd.DataFrame( [ {"command": "st.selectbox", "rating": 4, "is_widget": True}, {"command": "st.balloons", "rating": 5, "is_widget": False}, {"command": "st.time_input", "rating": 3, "is_widget": True}, ] ) edited_df = st.data_editor(df) with backtest: weights = st.selectbox( '请选择权重分配', ('等权-WeightEqually', '固定权重-WeightFix')) if weights == '固定权重': count = len(symbols) if count > 0: values = [str(1/count) for _ in range(count)] fix_weights = st.text_input('请配置固定权重,,分隔开,个数与etf数量一致','.'.join(values)) period = st.selectbox( '请选择调仓周期:', ('每天', '每周','每月','每季','每年'), index=0) progress_text = "Operation in progress. Please wait." my_bar = st.progress(0, text=progress_text) if st.button("开始回测"): from quantlab.engine.engine import Task task = Task() task.name = name task.start_date = dt_start.strftime('%Y%m%d') task.end_date = dt_end.strftime('%Y%m%d') true_symbols = [] for s in symbols: true_symbols.append(s.split('-')[1]) task.symbols = true_symbols task.template = template task.weights = weights.split('-')[1] task.period = period task.benchmark = benchmark.split('-')[1] from quantlab.engine.engine import Engine e = Engine(task) e.run() df_ratio, df_equities = e.analysis() print(df_ratio) #for percent_complete in range(100): # time.sleep(0.01) # my_bar.progress(percent_complete + 1, text=progress_text) # time.sleep(1) # my_bar.empty() chart_data = pd.DataFrame(np.random.randn(20, 3), columns=["a", "b", "c"]) st.line_chart(df_equities) st.write(df_ratio)
吾日三省吾身
茨威格在《人类群星闪耀时》时说,“一个人生命中最大的幸运,莫过于在他的人生中途,即在他年富力强的时候发现了自己的使命。”。
很多普通人终其一生,可能都发现不了。
父母都是给孩子尽可能创造更好的条件,报各种班。有些人可能是为了弥补自己内心的缺憾吧。
每一代人应当有自己的突破,否则岂不陷入“放羊”的循环。
霍金上学的时候,物理学成绩并不突出。直到被确症渐冻症后,痛定思痛,要找到精神寄托,发奋图强,在理论物理上做出了突破。
即便大神如霍金,也并非一开始就知道自己的人生使命。
怎么发现自己人生使命呢,又是老生常谈的话题,无外乎: 喜欢,擅长,对更多人有价值。
三者求交集,这里也是最容易产生心流的地方。
年轻时,觉得自己喜欢写代码。其实喜欢的是掌控感与自由。但去商业公司做“码农” 可以会觉得难受。
关于宏观与细节。
代码和数学都是“精确”的学科,需要专注力,细节,差一点都推导不过去或者运行不起来。而宏观则相对模糊,只需要一定的逻辑自洽。有一段时间,觉得自己喜欢宏观。
可是宏观是什么呢?
投资其实就是模糊的正确,精确其实没什么用。方向很重要,大类资产,分散,轮动等等。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/103709
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!