我们花30秒来配置经典的“大小盘趋势轮动策略”。
第一步,选择投资标的池,这里我们选择:沪深300ETF和创业板ETF。
第二步,配置交易规则:
这里我们只引入一个因子,就是20日动量,命名为roc_20。
第三步:(保持默认值即可)
搞定:
import streamlit as st import requests import pandas as pd from engine.task import Task from engine.engine import Engine url = 'http://ailabx.com/api/funds' @st.cache_data def get_funds(): datas = requests.get(url).json() dict_data = {item['symbol']: item['name'] + '({})'.format(item['symbol']) for item in datas} return dict_data task = Task() def select_funds(): def _select_funds_format(x): return get_funds()[x] symbols = st.multiselect(label='请选择基金:', options=list(get_funds().keys()), format_func=lambda x: _select_funds_format(x)) task.symbols = symbols def select_period(): periods = {'RunDaily': '每天运行', 'RunWeekly': '每周运行', 'RunMonthly': '每月运行', 'RunQuarterly': '每季度运行', 'RunYealy': '每年运行', 'RunDays': '自定义天数'} def _period_format(x): return periods[x] period = st.selectbox(label='请选择调仓周期', index=0, options=list(periods.keys()), format_func=lambda x: _period_format(x)) if period == 'RunDays': days = st.number_input(label='请输入天数', min_value=1, max_value=365) task.algo_period_days = days task.algo_period = period def select_weights(): weights = { 'WeightEqually': '等权分配', 'WeightFix': '固定权重', 'WeightERC': '风险平价' } def _weight_format(x): return weights[x] weight = st.selectbox(label='请选择权重分配', options=list(weights.keys()), format_func=lambda x: _weight_format(x)) if weight == 'WeightFix': fix_weigths = st.text_input(label='请输入权重(逗号分隔)', value='[]') task.algo_weight_fix = eval(fix_weigths) task.algo_weight = weight def add_features(): col1, col2 = st.columns(2) with col1: features = st.text_area(label='因子表达式') task.features = features.split('\n') with col2: feature_names = st.text_area(label='因子名称') task.feature_names = feature_names.split('\n') def buy_and_sell_rules(): col1, col2 = st.columns(2) with col1: buy_rules = st.text_area(label='买入规则') task.rules_buy = buy_rules.split('\n') with col2: sell_rules = st.text_area(label='卖出规则') task.rules_sell = sell_rules.split('\n') def order_by(): order_by = st.selectbox(label='排序因子', options=task.feature_names) task.order_by = order_by def backtest(): if st.button(label='开始回测'): e = Engine(task) e.run() df = e.get_df_equities() ratio = e.get_ratios(df) orders_df = e.get_orders_df() st.write(ratio) print(ratio) st.line_chart(df)
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/103473
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!