用python编定投基金程序的基本思路

2023-06-13  本文已影响0人  旺财叔

1、导入基金数据,形成DataFrame数据形式df,数据包含日期和每一日的基金净值;

注:任何一直创业板指数基金的数据都可以,大同小异。

df = pd.read_excel(r"D:\python\fund_110026.xls") #导入excel表格

print("导入数据完成!")

并落实看是否需要逆序操作,确保第一行为最老的日期。

2、构造定投信号模块

为df数据新增一列“invest”,用来存储定投信号;

比如,每周一次定投,将定投日的信号“invest”设置为1,其余非定投日设置为0。

df.at[indexs,'invest'] = 1

3、构造定投模块;

1)构造收益计算模块,为df数据增加收益数据;

计算过程为:增加多列数据:每日的累计定投份额,每日的基金价值,每日的累计投入资金等,最后计算总收益率,年化收益率。

df2.at[indexs,'total_yield_rate'] = (df2.at[indexs,'total_value'] - df2.at[indexs,'total_invest']) / df2.at[indexs,'total_invest']

df2.at[indexs,'annual_yield'] = df2.at[indexs,'total_yield_rate'] * 365 / int(df2.at[indexs,'days'].days)

2)设置清仓条件,当符合清仓条件时,将定投的收益模块终值定投;

获得清仓时的日期,从而获得清仓与第一次开始定投的时间差,获得真实的清仓日历天数,清仓时的真实总收益和真实年化收益率等信息。

if ((int(df2.at[indexs,'days'].days) > 60) and (df2.at[indexs,'total_yield_rate'] > 0.5))and (df2.at[indexs,'annual_yield'] > 0.2): 

                indexs_sign = indexs

                break;

4、构建不同日期开始定投的反复定投程序;

可设置清仓条件,将条件传入收益计算模块。

每一个开始日期,调用一次定投模块,最后形成一个新的DataFrame数据,存储每一个日期(开始定投)及其对应的清仓日历天数,真实总收益和真实年化收益率。

df5 = df1.iloc[i:(len(df1)-1)]           #选取第i行到最后一行的数据

5、统计所有日期的清仓天数的数据特征。

包括平均清仓周期,最大清仓周期,最小清仓周期,清仓周期中位数等。

甚至可以利用统计函数得出概率最大的清仓周期。

days_mean = df100['days'].mean()

days_median = df100['days'].median()


6、最后,可以变换不同的清仓条件(总收益率和年化收益率),寻找每一种组合下的清仓周期,最后通过下列条件来确定清仓条件。

1)确保无论哪一天投入都不会出现无法卖出的情况;

2)确保清仓周期不会过长(比如大于3年半);

3)满足前两个条件下能获得更好的年化收益率,并确定对应的最大概率的清仓周期,清仓周期区间(用于一笔资金分批投入时,衡量单笔资金量)。

上一篇下一篇

猜你喜欢

热点阅读