Commit bef905ae authored by stephen.wang's avatar stephen.wang

# 投组代码更新,4组config:stable、mdis、usmarket、indutryfund

parent d10b09d4
...@@ -5,7 +5,7 @@ from sys import exception ...@@ -5,7 +5,7 @@ from sys import exception
import numpy as np import numpy as np
import pandas as pd import pandas as pd
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from empyrical import sortino_ratio, annual_volatility from empyrical import sortino_ratio, annual_volatility, downside_risk, annual_return, tail_ratio
from py_jftech import filter_weekend, dict_remove, get_config, component, autowired, next_workday, \ from py_jftech import filter_weekend, dict_remove, get_config, component, autowired, next_workday, \
is_workday is_workday
...@@ -163,7 +163,7 @@ class FundDividendSortinoAssetOptimize(SortinoAssetOptimize): ...@@ -163,7 +163,7 @@ class FundDividendSortinoAssetOptimize(SortinoAssetOptimize):
pct_change = pct_change.truncate(before=(day - relativedelta(**self.annual_volatility_section[0]))) pct_change = pct_change.truncate(before=(day - relativedelta(**self.annual_volatility_section[0])))
# 时间未够计算年化波动的直接剔除 # 时间未够计算年化波动的直接剔除
funds = [fund for fund in funds if fund['id'] in pct_change.columns] funds = [fund for fund in funds if fund['id'] in pct_change.columns]
ratio = annual_volatility(pct_change) ratio = downside_risk(pct_change) # annual_volatility / downside_risk / tail_ratio
ratio = pd.Series(ratio).to_dict() ratio = pd.Series(ratio).to_dict()
annual = dict(zip(pct_change.columns, ratio.values())) annual = dict(zip(pct_change.columns, ratio.values()))
self.save_annual(day, annual) self.save_annual(day, annual)
......
...@@ -34,35 +34,37 @@ py-jftech: ...@@ -34,35 +34,37 @@ py-jftech:
port: ${MYSQL_PORT:3306} port: ${MYSQL_PORT:3306}
user: ${MYSQL_USER:root} user: ${MYSQL_USER:root}
password: ${MYSQL_PWD:changeit} password: ${MYSQL_PWD:changeit}
dbname: ${MYSQL_DBNAME:jftech_robo} dbname: ${MYSQL_DBNAME:industryfund} # industryfund
injectable: injectable:
names: names:
backtest: robo_executor.BacktestExecutor backtest: robo_executor.BacktestExecutor
datum: basic.datum.HkDatum datum: basic.datum.DefaultDatum
hold-report: portfolios.holder.DivHoldReportor hold-report: portfolios.holder.DivHoldReportor
mpt: portfolios.builder.PoemPortfoliosBuilder mpt: portfolios.builder.PoemARCPortfoliosBuilder # PoemARCPortfoliosBuilder, RiskParityARCPortfoliosBuilder
dividend-holder: portfolios.holder.DividendPortfoliosHolder dividend-holder: portfolios.holder.InvTrustPortfoliosHolder
navs-sync: basic.sync.FundNavSync navs-sync: basic.sync.FundNavSync
email: email:
server: smtphz.qiye.163.com server: smtphz.qiye.163.com
user: jft-ra@thizgroup.com user: jft-ra@thizgroup.com
password: 5dbb#30ec6d3 password: 5dbb#30ec6d3
mulit-process: mulit-process:
max-workers: ${MAX_PROCESS:4} max-workers: ${MAX_PROCESS:1}
basic: # 基础信息模块 basic: # 基础信息模块
sync: sync:
start-date: 2007-01-01 # 同步数据开始日期 start-date: 1990-01-01 # 同步数据开始日期
datum: # 资料模块 datum: # 资料模块
change: change:
date: ${DATUM_CHANGE_DATE} date: ${DATUM_CHANGE_DATE}
file: ${DATUM_CHANGE_FILE} file: ${DATUM_CHANGE_FILE}
excludes: # 排除的资料彭博ticker excludes: # 排除的资料彭博ticker
backtest: [] # backtest:
real: [] # - 'FKRCX US Equity' # 富蘭克林黃金基金 美元 A(Ydis)
# navs: # 净值模块 real:
# exrate: # 汇率,如果不开启,整个这块注释掉 - 'XXX LX Equity'
# - from: EUR # 需要转换的货币类型 navs: # 净值模块
# ticker: EURUSD BGN Curncy # 汇率值的彭博ticker exrate: # 汇率,如果不开启,整个这块注释掉
- from: EUR # 需要转换的货币类型
ticker: EURUSD BGN Curncy # 汇率值的彭博ticker
asset-pool: # 资产池模块 asset-pool: # 资产池模块
asset-optimize: # 资产优选模块 asset-optimize: # 资产优选模块
sortino-weight: # sortino计算需要的权重,下面每一条为一次计算,e.g. months: 3, weight: 0.5 表示 3个月数据使用权重0.5来计算分值 sortino-weight: # sortino计算需要的权重,下面每一条为一次计算,e.g. months: 3, weight: 0.5 表示 3个月数据使用权重0.5来计算分值
...@@ -72,19 +74,34 @@ asset-pool: # 资产池模块 ...@@ -72,19 +74,34 @@ asset-pool: # 资产池模块
weight: 0.3 weight: 0.3
- years: 1 - years: 1
weight: 0.2 weight: 0.2
asset-include: {'riskLevel':['LOW','HIGH']} #基金按照字典key分类,并筛选出value中的值,与下面normal-ratio设置的值相对应 asset-include: {'customType':[1,2,3,4]}
asset-filter: {'risk':[1,2,3,4,5]} #基金按照字典key分类,并筛选出value中的值,仅作为筛选
optimize-count: 3 #基金优选个数 optimize-count: 3 #基金优选个数
annual-volatility-filter: #1各资产年化波动率末exclude位 2各资产年化波动率大于volatility
# - customType: 1
# min-retain: 4
# exclude: 0
# volatility: 1000
- customType: 3
min-retain: 4
exclude: 0
volatility: 1000
annual-volatility-section: # 波动率时间区间
- years: 1
portfolios: # 投组模块 portfolios: # 投组模块
holder: # 持仓投组相关 holder: # 持仓投组相关
init-nav: 100000 # 初始金额 init-nav: 100 # 初始金额
min-interval-days: 10 # 两次实际调仓最小间隔期,单位交易日 min-interval-days: 10 # 两次实际调仓最小间隔期,单位交易日
dividend-rate: 0 #设定年化配息率 dividend-rate: 0.0 #设定年化配息率
dividend-drift-rate: 0.1 #超过基准配息率上下10%触发配息率重置
dividend-date: 15 #配息日,每月15号 dividend-date: 15 #配息日,每月15号
dividend-adjust-day: [] #每年的首个季度调整配息 dividend-adjust-day: [1,4,7,10] #每年的首个季度调整配息
warehouse-frequency: 3 #每隔3个月调一次仓 warehouse-frequency: 1 #每隔1个月调一次仓
warehouse-transfer-date: 1 #调仓日
redeem-list: [ 'TEUSAAU LX Equity', 'LIGTRAA ID Equity', 'TEMFHAC LX Equity', 'LUSHUAA ID Equity' ] #从持仓中的低风险资产“直接”按序赎回
solver: # 解算器相关 solver: # 解算器相关
model: prr # 结算模型 ARC ,PRR, ~ 标准解算器
arc: on #是否开启ARC
brr: 0.0 #误差补偿值
trr: 5
tol: 1E-10 # 误差满足条件 tol: 1E-10 # 误差满足条件
navs: # 净值要求 navs: # 净值要求
range: # 需要净值数据的区间, days: 90 表示90自然日,months: 3 表示3个自然月 range: # 需要净值数据的区间, days: 90 表示90自然日,months: 3 表示3个自然月
...@@ -92,24 +109,22 @@ portfolios: # 投组模块 ...@@ -92,24 +109,22 @@ portfolios: # 投组模块
max-nan: # 最大缺失净值条件 max-nan: # 最大缺失净值条件
asset: 8 # 单一资产最多缺少多少交易日数据,则踢出资产池 asset: 8 # 单一资产最多缺少多少交易日数据,则踢出资产池
day: 0.5 # 单一交易日最多缺少百分之多少净值,则删除该交易日 day: 0.5 # 单一交易日最多缺少百分之多少净值,则删除该交易日
normal-ratio: #分别对应低中高风险所占比率 risk: [] # 资产风险等级要求,可分开写也可以合并写,e.g. risk:[ 2, 3 ] 则表示 所有投组资产风险等级都是 2 或 3
LOW: [ 0.5, 0.5, 0.7 ] LARC: [0.50, 0.00] #低阈值
HIGH: [ 0.5, 0.4, 0.2 ] UARC: [1.00, 1.00] #高阈值
riskctl-ratio:
LOW: [ 0.5, 0.5, 0.7 ]
HIGH: [ 0.5, 0.4, 0.2 ]
matrix-rtn-days: 20 # 计算回报率矩阵时,回报率滚动天数 matrix-rtn-days: 20 # 计算回报率矩阵时,回报率滚动天数
asset-count: [3,3] # 投组资产个数。e.g. count 或 [min, max] 分别表示 最大最小都为count 或 最小为min 最大为max,另外这里也可以类似上面给不同风险等级分别配置 asset-count: [3,4] # 投组资产个数。e.g. count 或 [min, max] 分别表示 最大最小都为count 或 最小为min 最大为max,另外这里也可以类似上面给不同风险等级分别配置
mpt: # mpt计算相关 mpt: # mpt计算相关
cvar-beta: 0.2 # 计算Kbeta 需要用到 cvar-beta: 0.2 # 计算Kbeta 需要用到
quantile: 0.9 # 分位点,也可以给不同风险等级分别配置 quantile: 0.9 # 分位点,也可以给不同风险等级分别配置
low-weight: 0.05 # 最低权重 low-weight: 0.05 # 最低权重
# high-weight: [ 1 ] # 最高权重比例,可给一个值,也可以给多个值,当多个值时,第一个表示只有一个资产时权重,第二个表示只有两个资产时权重,以此类推,最后一个表示其他资产个数时的权重 high-weight: [ 0.50 ] # 最高权重比例,可给一个值,也可以给多个值,当多个值时,第一个表示只有一个资产时权重,第二个表示只有两个资产时权重,以此类推,最后一个表示其他资产个数时的权重
poem: # poem相关 poem: # poem相关
cvar-scale-factor: 0.1 # 计算时用到的系数 cvar-scale-factor: 0.1 # 计算时用到的系数
checker: #投组检测模块 checker: #投组检测模块
switch: off #是否开启检查 switch: off #是否开启检查
custom-type-priority: [ 3,2,1,4 ] # 检测优先级 custom-type-priority: [3,2,1,4] # 检测优先级
month-fund-filter: {4:['XXX ID Equity']} # 'LMAOMPU ID Equity' 根据月份删除某几档基金,51勞動節:美盛西方資產亞洲機會債券基金 A 增益配息 (M) 美元
reports: # 报告模块相关 reports: # 报告模块相关
navs: navs:
type: FUND type: FUND
...@@ -176,31 +191,31 @@ reports: # 报告模块相关 ...@@ -176,31 +191,31 @@ reports: # 报告模块相关
# - navs-report # 净值报告 # - navs-report # 净值报告
- hold-report # 持仓报告 - hold-report # 持仓报告
- signal-report # 信号报告 - signal-report # 信号报告
- benckmark-report # benckmark报告 # - benckmark-report # benckmark报告
- combo-report # 持仓对比 # - combo-report # 持仓对比
- indicators-report # 各种特殊指标报告 - indicators-report # 各种特殊指标报告
- fixed-range-report # 固定区间收益报告 - fixed-range-report # 固定区间收益报告
- relative-range-report # 相对区间收益报告 - relative-range-report # 相对区间收益报告
- year-range-report # 单年区间业绩报告 - year-range-report # 单年区间业绩报告
- month-div-rate-report # 月度配息率比较 # - month-div-rate-report # 月度配息率比较
- year-div-rate-report # 年度配息率比较 # - year-div-rate-report # 年度配息率比较
real-daily: real-daily:
file-name: svROBO5_portfolios file-name: IndustryFoF_prr5(實盤)-每月投組推薦
include-report: include-report:
- daily-hold-report # - daily-hold-report
- daily-signal-report - daily-signal-report
email: email:
receives: receives:
- wenwen.tang@thizgroup.com - brody_wu@chifufund.com
copies: ${DAILY_EMAIL_COPIES} copies: ${DAILY_EMAIL_COPIES}
subject: subject:
default: "ROBO5_TAIBEI-实盘版-每日投組推薦_{today}" # default: "ROBO6_TAIBEI-实盘版-每日投組推薦_{today}"
rebalance: "ROBO5_TAIBEI-实盘版-每日投組推薦_{today}_今日有調倉信號!!!" rebalance: "IndustryFoF_prr5(實盤)-每月投組推薦_{today}"
content: content:
default: "Dear All: 附件是今天生成的推薦組合,請驗收,謝謝! 注>:該郵件為自動發送,如有問題請聯繫矽谷團隊 telan_qian@chifufund.com" # default: "Dear All: 附件是今天生成的推薦組合,請驗收,謝謝! 注>:該郵件為自動發送,如有問題請聯繫矽谷團隊 telan_qian@chifufund.com"
rebalance: "Dear All: 件是今天生成的推薦組合以及調倉信號,請驗收,謝謝! 注>:該郵件為自動發送,如有問題請聯繫矽谷團隊 telan_qian@chifufund.com" rebalance: "Dear All: 檔為每月投資組合推薦,請驗收,謝謝! 注>:該郵件為自動發送,如有問題請聯繫矽谷團隊 brody_wu@chifufund.com"
daily-monitor: daily-monitor:
file-name: svROBO5_monitor file-name: svROBO6_monitor
include-report: include-report:
- name: relative-range-report # 相对区间收益报告 - name: relative-range-report # 相对区间收益报告
min-date: ~ min-date: ~
...@@ -228,21 +243,21 @@ reports: # 报告模块相关 ...@@ -228,21 +243,21 @@ reports: # 报告模块相关
receives: receives:
- wenwen.tang@thizgroup.com - wenwen.tang@thizgroup.com
copies: ${MONITOR_EMAIL_COPIES} copies: ${MONITOR_EMAIL_COPIES}
subject: "SVROBO5-实盘版-每日监测_{today}" subject: "SVROBO6-实盘版-每日监测_{today}"
content: "Dear All: 附件是今天生成的监测数据,請驗收,謝謝! 注>:該郵件為自動發送,如有問題請聯繫矽谷團隊 telan_qian@chifufund.com" content: "Dear All: 附件是今天生成的监测数据,請驗收,謝謝! 注>:該郵件為自動發送,如有問題請聯繫矽谷團隊 telan_qian@chifufund.com"
robo-executor: # 执行器相关 robo-executor: # 执行器相关
use: ${ROBO_EXECUTOR:backtest} # 执行哪个执行器,优先取系统环境变量ROBO_EXECUTOR的值,默认backtest use: ${ROBO_EXECUTOR:backtest} # 执行哪个执行器,优先取系统环境变量ROBO_EXECUTOR的值,默认backtest
sync-data: ${SYNC_DATA:off} # 是否开启同步资料数据 sync-data: ${SYNC_DATA:on} # 是否开启同步资料数据
backtest: # 回测执行器相关 backtest: # 回测执行器相关
start-date: 2012-10-16 # 回测起始日期 start-date: 2013-01-02 # 回测起始日期
end-date: 2023-03-01 # 回测截止日期 end-date: 2023-12-29 # 回测截止日期
sealing-period: 10 #调仓封闭期 sealing-period: 10 #调仓封闭期
start-step: ${BACKTEST_START_STEP:1} # 回测从哪一步开始执行 1:计算资产池;2:计算最优投组:3:计算再平衡信号以及持仓投组 start-step: ${BACKTEST_START_STEP:1} # 回测从哪一步开始执行 1:计算资产池;2:计算最优投组:3:计算再平衡信号以及持仓投组
end-step: ${BACKTEST_END_STEP:3} # 回测从哪一步执行完成后结束执行 1:计算资产池;2:计算最优投组:3:计算再平衡信号以及持仓投组 end-step: ${BACKTEST_END_STEP:3} # 回测从哪一步执行完成后结束执行 1:计算资产池;2:计算最优投组:3:计算再平衡信号以及持仓投组
clean-up: true clean-up: off
real: # 实盘执行器 real: # 实盘执行器
export: ${EXPORT_ENABLE:on} # 是否开启报告 export: ${EXPORT_ENABLE:on} # 是否开启报告
start-date: 2023-01-01 # 实盘开始时间 start-date: 2023-05-08 # 实盘开始时间
include-date: [] include-date: []
......
py-jftech:
logger:
version: 1
formatters:
brief:
format: "%(asctime)s - %(levelname)s - %(message)s"
simple:
format: "%(asctime)s - %(filename)s - %(levelname)s - %(message)s"
handlers:
console:
class: logging.StreamHandler
formatter: simple
level: DEBUG
stream: ext://sys.stdout
file:
class: logging.handlers.TimedRotatingFileHandler
level: INFO
formatter: brief
filename: ${LOG_FILE:logs/info.log}
interval: 1
backupCount: 30
encoding: utf8
when: D
# loggers:
# basic.sync:
# level: DEBUG
# handlers: [console]
# propagate: no
root:
level: ${LOG_LEVEL:INFO}
handlers: ${LOG_HANDLERS:[ console ]}
database:
host: ${MYSQL_HOST:192.168.68.85}
port: ${MYSQL_PORT:3306}
user: ${MYSQL_USER:root}
password: ${MYSQL_PWD:changeit}
dbname: ${MYSQL_DBNAME:mdis_prr3} # mdis_prr3
injectable:
names:
backtest: robo_executor.BacktestExecutor
datum: basic.datum.DefaultDatum
hold-report: portfolios.holder.DivHoldReportor
mpt: portfolios.builder.PoemARCPortfoliosBuilder # RiskParityARCPortfoliosBuilder/PoemARCPortfoliosBuilder
dividend-holder: portfolios.holder.InvTrustPortfoliosHolder
navs-sync: basic.sync.FundNavSync
email:
server: smtphz.qiye.163.com
user: jft-ra@thizgroup.com
password: 5dbb#30ec6d3
mulit-process:
max-workers: ${MAX_PROCESS:1}
basic: # 基础信息模块
sync:
start-date: 1990-01-01 # 同步数据开始日期
datum: # 资料模块
change:
date: ${DATUM_CHANGE_DATE}
file: ${DATUM_CHANGE_FILE}
excludes: # 排除的资料彭博ticker
backtest:
- 'FRSTAMP LX Equity' # 富蘭克林坦伯頓全球投資系列-精選收益基金 美元A(Mdis-pc)股
# - 'TEMASAD LX Equity' # 富蘭克林坦伯頓全球投資系列-亞洲債券基金 美元A(Mdis)股
# - 'TEMEAUS LX Equity' # 富蘭克林坦伯頓全球投資系列-新興國家固定收益基金 美元A(Mdis)股
# - 'TEMDAMU LX Equity' # 富蘭克林坦伯頓全球投資系列-新興市場月收益基金美元A穩定月配股
# - 'TEMGINI LX Equity' # 富蘭克林坦伯頓全球投資系列-全球債券基金 美元A(Mdis)股
# - 'TGTRFAD LX Equity' # 富蘭克林坦伯頓全球投資系列-全球債券總報酬基金 美元A(Mdis)股
# - 'LMBADMU ID Equity' # 美盛布蘭迪全球固定收益基金 A 美元 配息
# - 'LGBOAUI ID Equity' # 美盛布蘭迪全球機會固定收益基金 A 美元 配息 (M)
# - 'FTEAMUH LX Equity' # 富蘭克林坦伯頓全球投資系列-歐洲股票收益基金美元避險A(Mdis)股-H1
# - 'TEMHYAD LX Equity' # 富蘭克林坦伯頓全球投資系列-歐洲非投資等級債券基金 歐元A(Mdis)股
real:
- 'FRSTAMP LX Equity' # 富蘭克林坦伯頓全球投資系列-精選收益基金 美元A(Mdis-pc)股
# - 'FTSIADU LX Equity' # 富蘭克林坦伯頓全球投資系列-精選收益基金 美元A(Mdis)股
navs: # 净值模块
exrate: # 汇率,如果不开启,整个这块注释掉
- from: EUR # 需要转换的货币类型
ticker: EURUSD BGN Curncy # 汇率值的彭博ticker
asset-pool: # 资产池模块
asset-optimize: # 资产优选模块
sortino-weight: # sortino计算需要的权重,下面每一条为一次计算,e.g. months: 3, weight: 0.5 表示 3个月数据使用权重0.5来计算分值
- months: 3
weight: 0.5
- months: 6
weight: 0.3
- years: 1
weight: 0.2
asset-include: {'customType':[1,2,3,4]}
optimize-count: 3 #基金优选个数
annual-volatility-filter: #1各资产年化波动率末exclude位 2各资产年化波动率大于volatility
# - customType: 1
# min-retain: 2
# exclude: 1
# volatility: 1000
- customType: 2
min-retain: 2
exclude: 5
# volatility: 1000
# - customType: 3
# exclude: 0
# volatility: 1000
- customType: 4
min-retain: 1
exclude: 2
# volatility: 1000
annual-volatility-section: # 波动率时间区间
- years: 1
portfolios: # 投组模块
holder: # 持仓投组相关
init-nav: 100 # 初始金额
min-interval-days: 10 # 两次实际调仓最小间隔期,单位交易日
dividend-rate: 0.0 #设定年化配息率
dividend-date: 15 #配息日,每月15号
dividend-adjust-day: [1,4,7,10] #每年的首个季度调整配息
warehouse-frequency: 1 #每隔1个月调一次仓
warehouse-transfer-date: 1 #调仓日
redeem-list: [ 'TEUSAAU LX Equity', 'LIGTRAA ID Equity', 'TEMFHAC LX Equity', 'LUSHUAA ID Equity' ] #从持仓中的低风险资产“直接”按序赎回
solver: # 解算器相关
model: prr # 结算模型 ARC ,PRR, ~ 标准解算器
arc: on #是否开启ARC
brr: 0.0 #误差补偿值
trr: 3
tol: 1E-10 # 误差满足条件
navs: # 净值要求
range: # 需要净值数据的区间, days: 90 表示90自然日,months: 3 表示3个自然月
days: 90
max-nan: # 最大缺失净值条件
asset: 8 # 单一资产最多缺少多少交易日数据,则踢出资产池
day: 0.5 # 单一交易日最多缺少百分之多少净值,则删除该交易日
risk: [] # 资产风险等级要求,可分开写也可以合并写,e.g. risk:[ 2, 3 ] 则表示 所有投组资产风险等级都是 2 或 3
LARC: [0.35, 0.10, 0.05, 0.00] #低阈值
UARC: [0.70, 0.70, 0.70, 0.35] #高阈值
matrix-rtn-days: 20 # 计算回报率矩阵时,回报率滚动天数
asset-count: [5,5] # 投组资产个数。e.g. count 或 [min, max] 分别表示 最大最小都为count 或 最小为min 最大为max,另外这里也可以类似上面给不同风险等级分别配置
mpt: # mpt计算相关
cvar-beta: 0.2 # 计算Kbeta 需要用到
quantile: 0.9 # 分位点,也可以给不同风险等级分别配置
low-weight: 0.05 # 最低权重
high-weight: [ 0.35 ] # 最高权重比例,可给一个值,也可以给多个值,当多个值时,第一个表示只有一个资产时权重,第二个表示只有两个资产时权重,以此类推,最后一个表示其他资产个数时的权重
poem: # poem相关
cvar-scale-factor: 0.1 # 计算时用到的系数
checker: #投组检测模块
switch: on #是否开启检查
custom-type-priority: [3,2,1,4] # 检测优先级
month-fund-filter: {4:['XXX ID Equity']} # 'LMAOMPU ID Equity' 根据月份删除某几档基金,51勞動節:美盛西方資產亞洲機會債券基金 A 增益配息 (M) 美元
reports: # 报告模块相关
navs:
type: FUND
tickers:
- TEMTECI LX Equity
- TEPLX US Equity
- FRDPX US Equity
- FKRCX US Equity
- FTNRACU LX Equity
benchmark: # benchmark报告
ft:
init-amount: 100 # 初始金额
stock-rate: # stock型基金比例
RR3: 0.3
RR4: 0.5
RR5: 0.7
fixed-range: # 固定区间收益率
range-dates: # 固定起始截止日期
- start: 2008-01-01
end: 2008-10-27
- start: 2011-05-02
end: 2011-10-04
- start: 2013-05-08
end: 2013-06-24
- start: 2014-09-03
end: 2014-12-16
- start: 2015-05-21
end: 2016-02-11
- start: 2018-09-20
end: 2018-12-24
- start: 2020-02-19
end: 2020-03-23
- start: 2022-01-03
end: 2022-10-12
relative-range: # 相对区间收益率
range-dates: # 相对时间周期
- days: 1
name: '一天'
- weeks: 1
name: '一周'
- months: 1
name: '一月'
- months: 3
name: '三月'
- months: 6
name: '六月'
- years: 1
name: '一年'
- years: 2
name: '两年'
- years: 3
name: '三年'
- years: 5
name: '五年'
- years: 10
name: '十年'
- dates: ~
name: '成立以来'
exports:
backtest: # 回测导出曹策略
save-path: ${EXPORT_PATH:excels} # 导出报告文件存放路径,如果以./或者../开头,则会以执行python文件为根目录,如果以/开头,则为系统绝对路径,否则,以项目目录为根目录
file-name: ${EXPORT_FILENAME:real} # 导出报告的文件名
save-config: ${EXPORT_CONFIG:off} # 是否保存配置文件
include-report: # 需要导出的报告类型列表,下面的顺序,也代表了excel中sheet的顺序
# - funds-report # 基金资料
# - navs-report # 净值报告
- hold-report # 持仓报告
- signal-report # 信号报告
# - benckmark-report # benckmark报告
# - combo-report # 持仓对比
- indicators-report # 各种特殊指标报告
- fixed-range-report # 固定区间收益报告
- relative-range-report # 相对区间收益报告
- year-range-report # 单年区间业绩报告
# - month-div-rate-report # 月度配息率比较
# - year-div-rate-report # 年度配息率比较
real-daily:
file-name: MdisFoF_prr3(實盤)-每月投組推薦
include-report:
# - daily-hold-report
- daily-signal-report
email:
receives:
- brody_wu@chifufund.com
copies: ${DAILY_EMAIL_COPIES}
subject:
# default: "ROBO6_TAIBEI-实盘版-每日投組推薦_{today}"
rebalance: "MdisFoF_prr3(實盤)-每月投組推薦_{today}"
content:
# default: "Dear All: 附件是今天生成的推薦組合,請驗收,謝謝! 注>:該郵件為自動發送,如有問題請聯繫矽谷團隊 brody_wu@chifufund.com"
rebalance: "Dear All: 附檔為每月投資組合推薦,請驗收,謝謝! 注>:該郵件為自動發送,如有問題請聯繫矽谷團隊 brody_wu@chifufund.com"
daily-monitor:
file-name: svROBO6_monitor
include-report:
- name: relative-range-report # 相对区间收益报告
min-date: ~
- name: contribution-report # 贡献率报告
min-date: {days: 30}
- name: high-weight-report # 高风险资产占比
min-date: {days: 30}
- name: asset-pool-report # 基金池
min-date: {days: 30}
- name: combo-report # 持仓报告
min-date: {days: 40}
- name: mpt-report
min-date: {days: 30}
- name: signal-report
min-date: ~
- name: crisis-one-report
min-date: {days: 30}
- name: crisis-two-report
min-date: {days: 30}
- name: market-right-report
min-date: {days: 30}
- name: drift-buy-report
min-date: {days: 30}
email:
receives:
- wenwen.tang@thizgroup.com
copies: ${MONITOR_EMAIL_COPIES}
subject: "SVROBO6-实盘版-每日监测_{today}"
content: "Dear All: 附件是今天生成的监测数据,請驗收,謝謝! 注>:該郵件為自動發送,如有問題請聯繫矽谷團隊 telan_qian@chifufund.com"
robo-executor: # 执行器相关
use: ${ROBO_EXECUTOR:backtest} # 执行哪个执行器,优先取系统环境变量ROBO_EXECUTOR的值,默认backtest
sync-data: ${SYNC_DATA:on} # 是否开启同步资料数据
backtest: # 回测执行器相关
start-date: 2013-01-02 # 回测起始日期
end-date: 2023-12-29 # 回测截止日期
sealing-period: 10 #调仓封闭期
start-step: ${BACKTEST_START_STEP:1} # 回测从哪一步开始执行 1:计算资产池;2:计算最优投组:3:计算再平衡信号以及持仓投组
end-step: ${BACKTEST_END_STEP:3} # 回测从哪一步执行完成后结束执行 1:计算资产池;2:计算最优投组:3:计算再平衡信号以及持仓投组
clean-up: on
real: # 实盘执行器
export: ${EXPORT_ENABLE:on} # 是否开启报告
start-date: 2023-05-08 # 实盘开始时间
include-date: []
py-jftech:
logger:
version: 1
formatters:
brief:
format: "%(asctime)s - %(levelname)s - %(message)s"
simple:
format: "%(asctime)s - %(filename)s - %(levelname)s - %(message)s"
handlers:
console:
class: logging.StreamHandler
formatter: simple
level: DEBUG
stream: ext://sys.stdout
file:
class: logging.handlers.TimedRotatingFileHandler
level: INFO
formatter: brief
filename: ${LOG_FILE:logs/info.log}
interval: 1
backupCount: 30
encoding: utf8
when: D
# loggers:
# basic.sync:
# level: DEBUG
# handlers: [console]
# propagate: no
root:
level: ${LOG_LEVEL:INFO}
handlers: ${LOG_HANDLERS:[ console ]}
database:
host: ${MYSQL_HOST:192.168.68.85}
port: ${MYSQL_PORT:3306}
user: ${MYSQL_USER:root}
password: ${MYSQL_PWD:changeit}
dbname: ${MYSQL_DBNAME:stable_prr3} # stable_prr3
injectable:
names:
backtest: robo_executor.BacktestExecutor
datum: basic.datum.DefaultDatum
hold-report: portfolios.holder.DivHoldReportor
mpt: portfolios.builder.RiskParityARCPortfoliosBuilder # PoemARCPortfoliosBuilder
dividend-holder: portfolios.holder.InvTrustPortfoliosHolder
navs-sync: basic.sync.FundNavSync
email:
server: smtphz.qiye.163.com
user: jft-ra@thizgroup.com
password: 5dbb#30ec6d3
mulit-process:
max-workers: ${MAX_PROCESS:1}
basic: # 基础信息模块
sync:
start-date: 1990-01-01 # 同步数据开始日期
datum: # 资料模块
change:
date: ${DATUM_CHANGE_DATE}
file: ${DATUM_CHANGE_FILE}
excludes: # 排除的资料彭博ticker
backtest:
- 'LCUAGAA ID Equity' # 美盛凱利美國積極成長基金 A 美元 累積
# - 'TEMHYAH LX Equity'
# - 'FKRCX US Equity' # 富蘭克林黃金基金 美元 A(Ydis)
# - 'TEMHYAH LX Equity' # 富蘭克林坦伯頓全球投資系列-歐洲非投資等級債券基金 美元避險A(Mdis)股-H1
real:
- 'XXXX LX Equity'
# - 'TEMHYAH LX Equity' # 富蘭克林坦伯頓全球投資系列-歐洲非投資等級債券基金 美元避險A(Mdis)股-H1
navs: # 净值模块
exrate: # 汇率,如果不开启,整个这块注释掉
- from: EUR # 需要转换的货币类型
ticker: EURUSD BGN Curncy # 汇率值的彭博ticker
asset-pool: # 资产池模块
asset-optimize: # 资产优选模块
sortino-weight: # sortino计算需要的权重,下面每一条为一次计算,e.g. months: 3, weight: 0.5 表示 3个月数据使用权重0.5来计算分值
- months: 3
weight: 0.5
- months: 6
weight: 0.3
- years: 1
weight: 0.2
asset-include: {'customType':[1,2,3,4]}
optimize-count: 4 #基金优选个数
annual-volatility-filter: #1各资产年化波动率末exclude位 2各资产年化波动率大于volatility
- customType: 2 # none
min-retain: 4
exclude: 0
volatility: 1000
- customType: 3 # none
min-retain: 4
exclude: 0
volatility: 1000
annual-volatility-section: # 波动率时间区间
- years: 1
portfolios: # 投组模块
holder: # 持仓投组相关
init-nav: 100 # 初始金额
min-interval-days: 10 # 两次实际调仓最小间隔期,单位交易日
dividend-rate: 0.0 #设定年化配息率
dividend-date: 15 #配息日,每月15号
dividend-adjust-day: [1,4,7,10] #每年的首个季度调整配息
warehouse-frequency: 1 #每隔1个月调一次仓
warehouse-transfer-date: 1 #调仓日
redeem-list: [ 'TEUSAAU LX Equity', 'LIGTRAA ID Equity', 'TEMFHAC LX Equity', 'LUSHUAA ID Equity' ] #从持仓中的低风险资产“直接”按序赎回
solver: # 解算器相关
model: prr # 结算模型 ARC ,PRR, ~ 标准解算器
arc: on #是否开启ARC
brr: 0.0 #误差补偿值
trr: 3
tol: 1E-10 # 误差满足条件
navs: # 净值要求
range: # 需要净值数据的区间, days: 90 表示90自然日,months: 3 表示3个自然月
days: 90
max-nan: # 最大缺失净值条件
asset: 8 # 单一资产最多缺少多少交易日数据,则踢出资产池
day: 0.5 # 单一交易日最多缺少百分之多少净值,则删除该交易日
risk: [] # 资产风险等级要求,可分开写也可以合并写,e.g. risk:[ 2, 3 ] 则表示 所有投组资产风险等级都是 2 或 3
LARC: [0.15, 0.00, 0.00] #低阈值
UARC: [0.35, 0.75, 0.75] #高阈值
matrix-rtn-days: 20 # 计算回报率矩阵时,回报率滚动天数
asset-count: [5,5] # 投组资产个数。e.g. count 或 [min, max] 分别表示 最大最小都为count 或 最小为min 最大为max,另外这里也可以类似上面给不同风险等级分别配置
mpt: # mpt计算相关
cvar-beta: 0.2 # 计算Kbeta 需要用到
quantile: 0.9 # 分位点,也可以给不同风险等级分别配置
low-weight: 0.05 # 最低权重
high-weight: [ 0.50 ] # 最高权重比例,可给一个值,也可以给多个值,当多个值时,第一个表示只有一个资产时权重,第二个表示只有两个资产时权重,以此类推,最后一个表示其他资产个数时的权重
poem: # poem相关
cvar-scale-factor: 0.1 # 计算时用到的系数
checker: #投组检测模块
switch: off #是否开启检查
custom-type-priority: [3,2,1,4] # 检测优先级
month-fund-filter: {4:['XXX ID Equity']} # 'LMAOMPU ID Equity' 根据月份删除某几档基金,51勞動節:美盛西方資產亞洲機會債券基金 A 增益配息 (M) 美元
reports: # 报告模块相关
navs:
type: FUND
tickers:
- TEMTECI LX Equity
- TEPLX US Equity
- FRDPX US Equity
- FKRCX US Equity
- FTNRACU LX Equity
benchmark: # benchmark报告
ft:
init-amount: 100 # 初始金额
stock-rate: # stock型基金比例
RR3: 0.3
RR4: 0.5
RR5: 0.7
fixed-range: # 固定区间收益率
range-dates: # 固定起始截止日期
- start: 2008-01-01
end: 2008-10-27
- start: 2011-05-02
end: 2011-10-04
- start: 2013-05-08
end: 2013-06-24
- start: 2014-09-03
end: 2014-12-16
- start: 2015-05-21
end: 2016-02-11
- start: 2018-09-20
end: 2018-12-24
- start: 2020-02-19
end: 2020-03-23
- start: 2022-01-03
end: 2022-10-12
relative-range: # 相对区间收益率
range-dates: # 相对时间周期
- days: 1
name: '一天'
- weeks: 1
name: '一周'
- months: 1
name: '一月'
- months: 3
name: '三月'
- months: 6
name: '六月'
- years: 1
name: '一年'
- years: 2
name: '两年'
- years: 3
name: '三年'
- years: 5
name: '五年'
- years: 10
name: '十年'
- dates: ~
name: '成立以来'
exports:
backtest: # 回测导出曹策略
save-path: ${EXPORT_PATH:excels} # 导出报告文件存放路径,如果以./或者../开头,则会以执行python文件为根目录,如果以/开头,则为系统绝对路径,否则,以项目目录为根目录
file-name: ${EXPORT_FILENAME:real} # 导出报告的文件名
save-config: ${EXPORT_CONFIG:off} # 是否保存配置文件
include-report: # 需要导出的报告类型列表,下面的顺序,也代表了excel中sheet的顺序
# - funds-report # 基金资料
# - navs-report # 净值报告
- hold-report # 持仓报告
- signal-report # 信号报告
# - benckmark-report # benckmark报告
# - combo-report # 持仓对比
- indicators-report # 各种特殊指标报告
- fixed-range-report # 固定区间收益报告
- relative-range-report # 相对区间收益报告
- year-range-report # 单年区间业绩报告
# - month-div-rate-report # 月度配息率比较
# - year-div-rate-report # 年度配息率比较
real-daily:
file-name: SteadyFoF_prr3(實盤)-每月投組推薦
include-report:
# - daily-hold-report
- daily-signal-report
email:
receives:
- brody_wu@chifufund.com
copies: ${DAILY_EMAIL_COPIES}
subject:
# default: "ROBO6_TAIBEI-实盘版-每日投組推薦_{today}"
rebalance: "SteadyFoF_prr3(實盤)-每月投組推薦_{today}"
content:
# default: "Dear All: 附件是今天生成的推薦組合,請驗收,謝謝! 注>:該郵件為自動發送,如有問題請聯繫矽谷團隊 telan_qian@chifufund.com"
rebalance: "Dear All: 附檔為每月投資組合推薦,請驗收,謝謝! 注>:該郵件為自動發送,如有問題請聯繫矽谷團隊 brody_wu@chifufund.com"
daily-monitor:
file-name: svROBO6_monitor
include-report:
- name: relative-range-report # 相对区间收益报告
min-date: ~
- name: contribution-report # 贡献率报告
min-date: {days: 30}
- name: high-weight-report # 高风险资产占比
min-date: {days: 30}
- name: asset-pool-report # 基金池
min-date: {days: 30}
- name: combo-report # 持仓报告
min-date: {days: 40}
- name: mpt-report
min-date: {days: 30}
- name: signal-report
min-date: ~
- name: crisis-one-report
min-date: {days: 30}
- name: crisis-two-report
min-date: {days: 30}
- name: market-right-report
min-date: {days: 30}
- name: drift-buy-report
min-date: {days: 30}
email:
receives:
- wenwen.tang@thizgroup.com
copies: ${MONITOR_EMAIL_COPIES}
subject: "SVROBO6-实盘版-每日监测_{today}"
content: "Dear All: 附件是今天生成的监测数据,請驗收,謝謝! 注>:該郵件為自動發送,如有問題請聯繫矽谷團隊 telan_qian@chifufund.com"
robo-executor: # 执行器相关
use: ${ROBO_EXECUTOR:backtest} # 执行哪个执行器,优先取系统环境变量ROBO_EXECUTOR的值,默认backtest
sync-data: ${SYNC_DATA:on} # 是否开启同步资料数据
backtest: # 回测执行器相关
start-date: 2013-01-02 # 回测起始日期
end-date: 2023-12-29 # 回测截止日期
sealing-period: 10 #调仓封闭期
start-step: ${BACKTEST_START_STEP:1} # 回测从哪一步开始执行 1:计算资产池;2:计算最优投组:3:计算再平衡信号以及持仓投组
end-step: ${BACKTEST_END_STEP:3} # 回测从哪一步执行完成后结束执行 1:计算资产池;2:计算最优投组:3:计算再平衡信号以及持仓投组
clean-up: on
real: # 实盘执行器
export: ${EXPORT_ENABLE:on} # 是否开启报告
start-date: 2023-05-08 # 实盘开始时间
include-date: []
...@@ -30,41 +30,45 @@ py-jftech: ...@@ -30,41 +30,45 @@ py-jftech:
level: ${LOG_LEVEL:INFO} level: ${LOG_LEVEL:INFO}
handlers: ${LOG_HANDLERS:[ console ]} handlers: ${LOG_HANDLERS:[ console ]}
database: database:
host: ${MYSQL_HOST:localhost} # 192.168.68.85 host: ${MYSQL_HOST:192.168.68.85}
port: ${MYSQL_PORT:3306} port: ${MYSQL_PORT:3306}
user: ${MYSQL_USER:root} user: ${MYSQL_USER:root}
password: ${MYSQL_PWD:123456} # changeit password: ${MYSQL_PWD:changeit}
dbname: ${MYSQL_DBNAME:jftech_robo} dbname: ${MYSQL_DBNAME:usMarket_PRR4}
injectable: injectable:
names: names:
backtest: robo_executor.BacktestExecutor backtest: robo_executor.BacktestExecutor
datum: basic.datum.DefaultDatum # 0604更新 datum: basic.datum.DefaultDatum
hold-report: portfolios.holder.DivHoldReportor hold-report: portfolios.holder.DivHoldReportor
mpt: portfolios.builder.PoemPortfoliosBuilder mpt: portfolios.builder.PoemARCPortfoliosBuilder
# email: dividend-holder: portfolios.holder.InvTrustPortfoliosHolder
# server: smtphz.qiye.163.com navs-sync: basic.sync.FundNavSync
# user: jft-ra@thizgroup.com email:
# password: 5dbb#30ec6d3 server: smtphz.qiye.163.com
user: jft-ra@thizgroup.com
password: 5dbb#30ec6d3
mulit-process: mulit-process:
max-workers: ${MAX_PROCESS:4} max-workers: ${MAX_PROCESS:4}
basic: # 基础信息模块 basic: # 基础信息模块
sync: sync:
start-date: 2007-01-01 # 同步数据开始日期 start-date: 1990-01-01 # 同步数据开始日期
datum: # 资料模块 datum: # 资料模块
change: change:
date: ${DATUM_CHANGE_DATE} date: ${DATUM_CHANGE_DATE}
file: ${DATUM_CHANGE_FILE} file: ${DATUM_CHANGE_FILE}
excludes: # 排除的资料彭博ticker excludes: # 排除的资料彭博ticker
backtest: backtest:
- 'TEMUSGI LX Equity' - 'LCUAGAA ID Equity' # 美盛凱利美國積極成長基金 A 美元 累積
- 'TEMFHYI LX Equity' # - 'FKRCX US Equity' # 富蘭克林黃金基金 美元 A(Ydis)
# - 'FTNRACU LX Equity' # 富蘭克林坦伯頓全球投資系列-天然資源基金 美元A(acc)股
# - 'TEMBDAI LX Equity' # 富蘭克林坦伯頓全球投資系列-生技領航基金 A(acc)股
real: real:
- 'FGFSACU LX Equity' - 'XXXXXXX LX Equity'
- 'TEMFHYI LX Equity' - 'ZZZZZZZ LX Equity'
# navs: # 净值模块 navs: # 净值模块
# exrate: # 汇率,如果不开启,整个这块注释掉 exrate: # 汇率,如果不开启,整个这块注释掉
# - from: EUR # 需要转换的货币类型 - from: EUR # 需要转换的货币类型
# ticker: EURUSD BGN Curncy # 汇率值的彭博ticker ticker: EURUSD BGN Curncy # 汇率值的彭博ticker
asset-pool: # 资产池模块 asset-pool: # 资产池模块
asset-optimize: # 资产优选模块 asset-optimize: # 资产优选模块
sortino-weight: # sortino计算需要的权重,下面每一条为一次计算,e.g. months: 3, weight: 0.5 表示 3个月数据使用权重0.5来计算分值 sortino-weight: # sortino计算需要的权重,下面每一条为一次计算,e.g. months: 3, weight: 0.5 表示 3个月数据使用权重0.5来计算分值
...@@ -74,18 +78,34 @@ asset-pool: # 资产池模块 ...@@ -74,18 +78,34 @@ asset-pool: # 资产池模块
weight: 0.3 weight: 0.3
- years: 1 - years: 1
weight: 0.2 weight: 0.2
asset-include: {'category':['US_STOCK','US_IG_BOND','US_HY_BOND']} asset-include: {'customType':[1,2,3,4]}
optimize-count: 3 #基金优选个数 optimize-count: 3 #基金优选个数
annual-volatility-filter: #1各资产年化波动率末exclude位 2各资产年化波动率大于volatility
- customType: 1
min-retain: 4
exclude: 0
volatility: 1000
- customType: 2
min-retain: 4
exclude: 0
volatility: 1000
annual-volatility-section: # 波动率时间区间
- years: 1
portfolios: # 投组模块 portfolios: # 投组模块
holder: # 持仓投组相关 holder: # 持仓投组相关
init-nav: 100 # 初始金额 init-nav: 100 # 初始金额
min-interval-days: 10 # 两次实际调仓最小间隔期,单位交易日 min-interval-days: 10 # 两次实际调仓最小间隔期,单位交易日
dividend-rate: 0.09 #设定年化配息率 dividend-rate: 0.0 #设定年化配息率
dividend-drift-rate: 0.1 #超过基准配息率上下10%触发配息率重置
dividend-date: 15 #配息日,每月15号 dividend-date: 15 #配息日,每月15号
dividend-adjust-day: [1,4,7,10] #每年的首个季度调整配息 dividend-adjust-day: [1,4,7,10] #每年的首个季度调整配息
warehouse-frequency: 1 #每隔1个月调一次仓 warehouse-frequency: 1 #每隔1个月调一次仓
warehouse-transfer-date: 1 #调仓日
redeem-list: [ 'TEUSAAU LX Equity', 'LIGTRAA ID Equity', 'TEMFHAC LX Equity', 'LUSHUAA ID Equity' ] #从持仓中的低风险资产“直接”按序赎回
solver: # 解算器相关 solver: # 解算器相关
model: prr # 结算模型 ARC ,PRR, ~ 标准解算器
arc: on #是否开启ARC
brr: 0.00 #误差补偿值
trr: 4
tol: 1E-10 # 误差满足条件 tol: 1E-10 # 误差满足条件
navs: # 净值要求 navs: # 净值要求
range: # 需要净值数据的区间, days: 90 表示90自然日,months: 3 表示3个自然月 range: # 需要净值数据的区间, days: 90 表示90自然日,months: 3 表示3个自然月
...@@ -93,24 +113,21 @@ portfolios: # 投组模块 ...@@ -93,24 +113,21 @@ portfolios: # 投组模块
max-nan: # 最大缺失净值条件 max-nan: # 最大缺失净值条件
asset: 8 # 单一资产最多缺少多少交易日数据,则踢出资产池 asset: 8 # 单一资产最多缺少多少交易日数据,则踢出资产池
day: 0.5 # 单一交易日最多缺少百分之多少净值,则删除该交易日 day: 0.5 # 单一交易日最多缺少百分之多少净值,则删除该交易日
fixed-ratio: True risk: [] # 资产风险等级要求,可分开写也可以合并写,e.g. risk:[ 2, 3 ] 则表示 所有投组资产风险等级都是 2 或 3
normal-ratio: #US_STOCK:US_HY_BOND:US_IG_BOND三者分别对应低中高风险所占比率 LARC: [0.40, 0.00, 0.00, 0.00] #低阈值
US_STOCK: [ 0.6, 0.5, 0.7 ] UARC: [0.60, 0.50, 0.50, 0.20] #高阈值
US_HY_BOND: [ 0.2, 0.4, 0.2 ]
US_IG_BOND: [ 0.2, 0.1, 0.1 ]
riskctl-ratio:
US_STOCK: [ 0.2, 0.4, 0.6 ]
US_HY_BOND: [ 0.5, 0.3, 0.1 ]
US_IG_BOND: [ 0.3, 0.3, 0.3 ]
matrix-rtn-days: 20 # 计算回报率矩阵时,回报率滚动天数 matrix-rtn-days: 20 # 计算回报率矩阵时,回报率滚动天数
asset-count: [3,3] # 投组资产个数。e.g. count 或 [min, max] 分别表示 最大最小都为count 或 最小为min 最大为max,另外这里也可以类似上面给不同风险等级分别配置 asset-count: [5,5] # 投组资产个数。e.g. count 或 [min, max] 分别表示 最大最小都为count 或 最小为min 最大为max,另外这里也可以类似上面给不同风险等级分别配置
mpt: # mpt计算相关 mpt: # mpt计算相关
cvar-beta: 0.2 # 计算Kbeta 需要用到 cvar-beta: 0.2 # 计算Kbeta 需要用到
quantile: 0.9 # 分位点,也可以给不同风险等级分别配置 quantile: 0.9 # 分位点,也可以给不同风险等级分别配置
low-weight: 0.05 # 最低权重 low-weight: 0.05 # 最低权重
# high-weight: [ 1 ] # 最高权重比例,可给一个值,也可以给多个值,当多个值时,第一个表示只有一个资产时权重,第二个表示只有两个资产时权重,以此类推,最后一个表示其他资产个数时的权重 high-weight: [ 0.35 ] # 最高权重比例,可给一个值,也可以给多个值,当多个值时,第一个表示只有一个资产时权重,第二个表示只有两个资产时权重,以此类推,最后一个表示其他资产个数时的权重
poem: # poem相关 poem: # poem相关
cvar-scale-factor: 0.1 # 计算时用到的系数 cvar-scale-factor: 0.1 # 计算时用到的系数
checker: # 投组检测模块,设计原因:期望投组同时出现FT&LM,实现每月配息2次
switch: off # 是否开启检查
custom-type-priority: [ 3,2,1,4 ] # 检测优先级
reports: # 报告模块相关 reports: # 报告模块相关
navs: navs:
type: FUND type: FUND
...@@ -177,31 +194,31 @@ reports: # 报告模块相关 ...@@ -177,31 +194,31 @@ reports: # 报告模块相关
# - navs-report # 净值报告 # - navs-report # 净值报告
- hold-report # 持仓报告 - hold-report # 持仓报告
- signal-report # 信号报告 - signal-report # 信号报告
- benckmark-report # benckmark报告 # - benckmark-report # benckmark报告
- combo-report # 持仓对比 - combo-report # 持仓对比
- indicators-report # 各种特殊指标报告 - indicators-report # 各种特殊指标报告
- fixed-range-report # 固定区间收益报告 - fixed-range-report # 固定区间收益报告
- relative-range-report # 相对区间收益报告 - relative-range-report # 相对区间收益报告
- year-range-report # 单年区间业绩报告 - year-range-report # 单年区间业绩报告
- month-div-rate-report # 月度配息率比较 # - month-div-rate-report # 月度配息率比较
- year-div-rate-report # 年度配息率比较 # - year-div-rate-report # 年度配息率比较
real-daily: real-daily:
file-name: svROBO5_portfolios file-name: USFoF_prr4(實盤)-每月投組推薦
include-report: include-report:
- daily-hold-report # - daily-hold-report
- daily-signal-report - daily-signal-report
email: email:
receives: receives:
- wenwen.tang@thizgroup.com - brody_wu@chifufund.com
copies: ${DAILY_EMAIL_COPIES} copies: ${DAILY_EMAIL_COPIES}
subject: subject:
default: "ROBO5_TAIBEI-实盘版-每日投組推薦_{today}" # default: "USFoF-PRR4-實盤版-每月投組推薦_{today}"
rebalance: "ROBO5_TAIBEI-实盘版-每日投組推薦_{today}_今日有調倉信號!!!" rebalance: "USFoF_prr4(實盤)-每月投組推薦_{today}"
content: content:
default: "Dear All: 附件是今天生成的推薦組合,請驗收,謝謝! 注>:該郵件為自動發送,如有問題請聯繫矽谷團隊 telan_qian@chifufund.com" # default: "Dear All: 附件是每月生成的推薦組合,請驗收,謝謝! 注>:該郵件為自動發送,如有問題請聯繫矽谷團隊 telan_qian@chifufund.com"
rebalance: "Dear All: 件是今天生成的推薦組合以及調倉信號,請驗收,謝謝! 注>:該郵件為自動發送,如有問題請聯繫矽谷團隊 telan_qian@chifufund.com" rebalance: "Dear All: 檔為每月投資組合推薦,請驗收,謝謝! 注>:該郵件為自動發送,如有問題請聯繫矽谷團隊 brody_wu@chifufund.com"
daily-monitor: daily-monitor:
file-name: svROBO5_monitor file-name: svROBO6_monitor
include-report: include-report:
- name: relative-range-report # 相对区间收益报告 - name: relative-range-report # 相对区间收益报告
min-date: ~ min-date: ~
...@@ -229,20 +246,22 @@ reports: # 报告模块相关 ...@@ -229,20 +246,22 @@ reports: # 报告模块相关
receives: receives:
- wenwen.tang@thizgroup.com - wenwen.tang@thizgroup.com
copies: ${MONITOR_EMAIL_COPIES} copies: ${MONITOR_EMAIL_COPIES}
subject: "SVROBO5-实盘版-每日监测_{today}" subject: "SVROBO6-实盘版-每日监测_{today}"
content: "Dear All: 附件是今天生成的监测数据,請驗收,謝謝! 注>:該郵件為自動發送,如有問題請聯繫矽谷團隊 telan_qian@chifufund.com" content: "Dear All: 附件是今天生成的监测数据,請驗收,謝謝! 注>:該郵件為自動發送,如有問題請聯繫矽谷團隊 telan_qian@chifufund.com"
robo-executor: # 执行器相关 robo-executor: # 执行器相关
use: ${ROBO_EXECUTOR:backtest} # 执行哪个执行器,优先取系统环境变量ROBO_EXECUTOR的值,默认backtest use: ${ROBO_EXECUTOR:backtest} # 执行哪个执行器,优先取系统环境变量ROBO_EXECUTOR的值,默认backtest
sync-data: ${SYNC_DATA:off} # 是否开启同步资料数据 sync-data: ${SYNC_DATA:on} # 是否开启同步资料数据
backtest: # 回测执行器相关 backtest: # 回测执行器相关
start-date: 2012-10-16 # 回测起始日期 start-date: 2013-01-02 # 回测起始日期
end-date: 2023-03-01 # 回测截止日期 end-date: 2023-12-29 # 回测截止日期
sealing-period: 10 #调仓封闭期 sealing-period: 10 #调仓封闭期
start-step: ${BACKTEST_START_STEP:1} # 回测从哪一步开始执行 1:计算资产池;2:计算最优投组:3:计算再平衡信号以及持仓投组 start-step: ${BACKTEST_START_STEP:1} # 回测从哪一步开始执行 1:计算资产池;2:计算最优投组:3:计算再平衡信号以及持仓投组
end-step: ${BACKTEST_END_STEP:3} # 回测从哪一步执行完成后结束执行 1:计算资产池;2:计算最优投组:3:计算再平衡信号以及持仓投组 end-step: ${BACKTEST_END_STEP:3} # 回测从哪一步执行完成后结束执行 1:计算资产池;2:计算最优投组:3:计算再平衡信号以及持仓投组
clean-up: true clean-up: on
real: # 实盘执行器 real: # 实盘执行器
start-date: 2022-09-01 # 实盘开始时间 export: ${EXPORT_ENABLE:on} # 是否开启报告
start-date: 2023-05-08 # 实盘开始时间
include-date: []
......
...@@ -121,7 +121,7 @@ class MptARCPortfoliosBuilder(MptPortfoliosBuilder): ...@@ -121,7 +121,7 @@ class MptARCPortfoliosBuilder(MptPortfoliosBuilder):
try: try:
portfolio = rmp.get_one(day, type, risk) portfolio = rmp.get_one(day, type, risk)
if not portfolio: if not portfolio:
result = self.build_portfolio(day, type) result, detail = self.build_portfolio(day, type)
for build_risk, datas in result.items(): for build_risk, datas in result.items():
datas['portfolio'] = self._checker.check(day, json.loads(datas['portfolio'])) datas['portfolio'] = self._checker.check(day, json.loads(datas['portfolio']))
try: try:
......
...@@ -396,7 +396,7 @@ class DivHoldReportor(RoboReportor): ...@@ -396,7 +396,7 @@ class DivHoldReportor(RoboReportor):
@property @property
def report_name(self) -> str: def report_name(self) -> str:
return '投组净值' return '投組淨值'
def load_report(self, max_date=dt.today(), min_date=None) -> List[dict]: def load_report(self, max_date=dt.today(), min_date=None) -> List[dict]:
holds = pd.DataFrame(rhp.get_list(max_date=max_date, min_date=min_date)) holds = pd.DataFrame(rhp.get_list(max_date=max_date, min_date=min_date))
...@@ -419,7 +419,7 @@ class DailyHoldReportor(RoboReportor): ...@@ -419,7 +419,7 @@ class DailyHoldReportor(RoboReportor):
@property @property
def report_name(self) -> str: def report_name(self) -> str:
return '每日持信息' return '每日持信息'
def load_report(self, max_date=prev_workday(dt.today()), min_date=None) -> List[dict]: def load_report(self, max_date=prev_workday(dt.today()), min_date=None) -> List[dict]:
holds = pd.DataFrame(rhp.get_list(max_date=max_date, min_date=min_date)) holds = pd.DataFrame(rhp.get_list(max_date=max_date, min_date=min_date))
......
...@@ -93,7 +93,7 @@ class SignalReportor(RoboReportor): ...@@ -93,7 +93,7 @@ class SignalReportor(RoboReportor):
@property @property
def report_name(self) -> str: def report_name(self) -> str:
return '调仓信号' return '調倉信號'
def load_report(self, max_date=dt.today(), min_date=None) -> List[dict]: def load_report(self, max_date=dt.today(), min_date=None) -> List[dict]:
result = [] result = []
...@@ -109,7 +109,7 @@ class SignalReportor(RoboReportor): ...@@ -109,7 +109,7 @@ class SignalReportor(RoboReportor):
'rebalance_date': rebalance_date, 'rebalance_date': rebalance_date,
'portfolio_type': PortfoliosType(signal['portfolio_type']).name, 'portfolio_type': PortfoliosType(signal['portfolio_type']).name,
'ft_ticker': datums[fund_id]['ftTicker'], 'ft_ticker': datums[fund_id]['ftTicker'],
'blooberg_ticker': datums[fund_id]['bloombergTicker'], 'bloomberg_ticker': datums[fund_id]['bloombergTicker'],
'fund_name': datums[fund_id]['chineseName'], 'fund_name': datums[fund_id]['chineseName'],
'weight': weight 'weight': weight
}) })
...@@ -126,7 +126,7 @@ class DailySignalReportor(RoboReportor): ...@@ -126,7 +126,7 @@ class DailySignalReportor(RoboReportor):
@property @property
def report_name(self) -> str: def report_name(self) -> str:
return '每日调仓信号' return '每月調倉信號'
def load_report(self, max_date=prev_workday(dt.today()), min_date=None) -> List[dict]: def load_report(self, max_date=prev_workday(dt.today()), min_date=None) -> List[dict]:
signals = pd.DataFrame(rrs.get_list(max_date=max_date, min_date=min_date)) signals = pd.DataFrame(rrs.get_list(max_date=max_date, min_date=min_date))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment