分红养家策略
策略逻辑说明:
1. 策略核心思想
该策略基于分红和资产配置的逻辑,通过定期分红和动态调整资产配置,实现长期稳健的投资收益。策略的核心思想是:
-
分红:每年第一天进行分红,将部分投资收益分配给投资者。
-
资产配置:通过股票和债券的组合,实现资产的分散配置,降低投资风险。
-
动态调整:根据市场情况动态调整持仓,确保资产配置符合策略要求。
2. 策略运行流程
策略的运行流程分为以下几个步骤:
2.1 每年第一天分红
-
分红额度:根据年金利率计算分红额度,并将分红金额分配给投资者。
-
再平衡:根据债券仓位比例,调整债券基金的持仓,确保资产配置符合策略要求。
2.2 每日更新
-
股票池:获取当前股票池中的股票列表。
-
卖出:卖出不在股票池中的股票。
-
买入:根据现金储备率和股票仓位比例,买入股票池中的股票。
2.3 记录净值
-
记录净值:记录当前投资组合的净值,单位为万元。
3. 策略特点
-
分红:每年第一天进行分红,将部分投资收益分配给投资者。
-
资产配置:通过股票和债券的组合,实现资产的分散配置,降低投资风险。
-
动态调整:根据市场情况动态调整持仓,确保资产配置符合策略要求。
4. 策略适用场景
-
市场环境:适合长期投资,能够在市场波动中实现稳健的投资收益。
-
投资者类型:适合有一定量化交易经验的投资者,能够理解策略的逻辑并进行参数调整。
5. 策略优化方向
-
参数优化:可以调整年金利率、现金储备率、债券仓位等参数,以适应不同的市场环境。
-
风险控制:可以增加更多的风险控制措施,如止损、止盈等。
-
多资产配置:可以引入更多的资产类别,如黄金、房地产等,进一步提高资产的分散配置。
策略名称解释:
-
分红:策略每年第一天进行分红,将部分投资收益分配给投资者。
-
养家:策略通过资产配置和动态调整,实现长期稳健的投资收益,适合家庭理财。
因此,策略名称为分红养家策略,既体现了策略的核心逻辑,也突出了策略的特点。
代码逻辑详解:
1. 初始化函数 initialize(context)
-
设定了日志级别、真实价格和避免未来数据。
-
安排了每日更新任务。
2. 每日更新 iUpdate(context)
-
参数设置:设定了基准指数、股票数量、年金利率、现金储备率、债券仓位和债券基金。
-
每年第一天分红:根据年金利率计算分红额度,并将分红金额分配给投资者。同时,根据债券仓位比例,调整债券基金的持仓。
-
股票池:获取当前股票池中的股票列表。
-
卖出:卖出不在股票池中的股票。
-
买入:根据现金储备率和股票仓位比例,买入股票池中的股票。
-
记录净值:记录当前投资组合的净值,单位为万元。
总结:
该策略通过分红和资产配置相结合,实现长期稳健的投资收益。策略的核心在于分红和资产配置的逻辑,适合有一定量化交易经验的投资者使用。
策略代码
# 标题:致敬市场(12)——赚钱的策略
# 分红养家
def initialize(context):
log.set_level('order', 'error') # 信息过滤
set_option('use_real_price', True) #使用真实价格
set_option('avoid_future_data', True) # 避免未来数据
run_daily(iUpdate, time='10:00') # 更新
def iUpdate(context):
# 参数
index = '399310.XSHE' # 国证50
n = 50 # 50只股票
rente_ratio = 0.05 # 年金利率,5%
cash_ratio = 2*rente_ratio # 现金储备率
treasury_ratio = 0.4 # 债券仓位,40%
treasury_fund = '000012.XSHG' # 债券基金,国债指数
cur_data = get_current_data()
# 每年第一天分红,再平衡
if context.current_dt.year > context.previous_date.year:
# 分红额度
rente = int(rente_ratio * context.portfolio.total_value)
# 分红
log.info('!!!分红+++', rente, int(context.portfolio.available_cash))
inout_cash(-rente)
# 再平衡
if not cur_data[treasury_fund].paused:
treasury_size = treasury_ratio * context.portfolio.total_value
log.info('再平衡', treasury_fund)
order_target_value(treasury_fund, treasury_size)
# 股票池
stocks = get_index_stocks(index)
# 卖出
for s in context.portfolio.positions:
if s not in stocks and\
not cur_data[s].paused:
log.info('sell', s, cur_data[s].name)
order_target(s, 0)
# 买进
cash_size = cash_ratio * context.portfolio.total_value
position_size = (1.0 - cash_ratio - treasury_ratio)/n * context.portfolio.total_value
for s in stocks:
if context.portfolio.available_cash < cash_size:
break # 现金不够,不买
if s not in context.portfolio.positions and\
not cur_data[s].paused:
log.info('buy', s, cur_data[s].name)
order_value(s, position_size)
# 记录净值,万元
record(NetValue = context.portfolio.total_value/10000)
# end
2025-02-23
