5天平均累计净值

import pandas as pd
import matplotlib.pyplot as plt

# 读取CSV文件
data = pd.read_csv('history_006567.csv')

# 将日期列转换为datetime类型,并设置为索引
data['日期'] = pd.to_datetime(data['日期'], format='%Y/%m/%d')
data.set_index('日期', inplace=True)

# 使用 '5D' 作为频率参数来填充缺失的日期
data = data.asfreq(freq='5D')

# 计算每5天的平均累计净值,确保只计算有数据的日期
data['5天平均累计净值'] = data['累计净值'].rolling(window=5).mean().shift(-1)

# 标记A, B, C, D时间段的开始日期
time_periods = data.index[::5]
print(time_periods)
# 初始化买入、加仓和卖出的日期及条件
buy_dates = []
add_positions_dates = []
sell_dates = []
total_investment = 0
total_return = 0

# 遍历时间段,应用买入和加仓规则
for i in range(1, len(time_periods), 2):
    # 获取当前时间段D的开始日期和前一个时间段C的结束日期
    start_date = time_periods[i]
    end_date = time_periods[i - 1]

    # 计算时间段C和D的平均累计净值
    average_C = data.loc[end_date, '5天平均累计净值']
    average_D = data.loc[start_date, '5天平均累计净值']

    print(start_date)
    # 买入规则 A > B > C > D
    if average_D < average_C:
        buy_dates.append(start_date)
        total_investment += 1  # 假设每次买入的本金是1单位
        print(f"买入日期: {start_date}")

    # 加仓规则 A > B > C > D
    if i < len(time_periods) - 2:
        next_start_date = time_periods[i + 2]
        average_next_start = data.loc[next_start_date, '5天平均累计净值']
        if average_next_start > average_D > average_C:
            add_positions_dates.append(next_start_date)
            total_investment += 1  # 同样假设加仓的本金是1单位
            print(f"加仓日期: {next_start_date}")

# 应用卖出规则
# 假设我们在最后一个时间段结束时卖出
sell_date = time_periods[-1]
cumulative_return = (data.loc[sell_date, '累计净值'] - total_investment) / total_investment
if cumulative_return > 0.05 or cumulative_return < -0.3:
    sell_dates.append(sell_date)
    print(f"卖出日期: {sell_date}")

# 打印收益率
print('buy_dates',buy_dates)
print('add_positions_dates',add_positions_dates)
print('sell_dates',sell_dates)
print(f"总收益: {cumulative_return * 100:.2f}%")

# 注意:这里的计算非常简化,实际投资决策需要考虑更多因素,如交易成本、资金的时间价值等。

 

posted @ 2024-05-09 00:04  罗论明  阅读(3)  评论(0编辑  收藏  举报