@taungoo ‘import pandas as pd
def get_return_aip(code, s_date, e_date, count):
info = 'unit_net_value' # unit_net_value: 基金单位净值
df = get_extras(info, code, start_date=s_date, end_date=e_date) # 获取传入基金指定时间段内 单位净值列表
info = 'adj_net_value' # 场外基金的复权净值
df['adj'] = get_extras(info, code, start_date=s_date, end_date=e_date)
# 记录e_date的价格
e_date_price = df['adj'][-1]
# 只在“周四”定投
list_dates = df.index.tolist()
df['wkday'] = [list_dates[x].isoweekday() for x in range(len(list_dates))]
df = df[df['wkday'] == 4]
capital = 10000 # 单次定投金额
open_commission=0.0015 # 手续费,取蚂蚁金服手续费率
df['capital'] = 0
count = min(count, len(df))
# 定投次数设定时才投入capital金额
for i in range(count):
df.iloc[i, 3] = capital
df['quant_adj'] = round(df['capital']/(1+open_commission)/df['adj'], 2) # 按“复权净值”计算的份额
df['quant'] = round(df['capital']/(1+open_commission)/df.iloc[:,0], 2) # 每次定投获得的份额
# Return the cumulative sum of the elements along the given axis.
df['total_qnt_adj'] = df.quant_adj.cumsum() # 按“复权净值”计算的份额
df['total_qnt'] = round(df['total_qnt_adj']*df['adj']/df.iloc[:,0], 2) # 计算每次定投后的总份额,实际持有的份额总数
df['cost'] = df.capital.cumsum() # 计算每次定投后的总投入成本
df['value'] = round(df['total_qnt_adj']*df['adj'], 2) # 计算每次定投后,实际持有总份额的价值
df['ret'] = round((df['value']/df['cost']-1)*100, 2) # 计算每次定投后,收益率
df['sum_qnt_3weeks'] = df['quant_adj'].rolling(3).sum()
df['mean_price_3weeks'] = round(capital*3/df['sum_qnt_3weeks'], 3)
df['mean_price_3weeks'] = df['mean_price_3weeks'].shift(-2)
df['ret_3weeks'] = round((e_date_price/df['mean_price_3weeks']-1)*100, 2)
print('共持有天数:', list_dates[-1]-list_dates[0])
pd.set_option('display.max_columns', 100)
pd.set_option('display.max_rows', 100)
df = df['ret_3weeks']
print(df)
df.to_csv('auto_inv_plan.csv', mode='w', encoding='utf_8_sig') # 写入.csv
get_return_aip('000971.OF', '2019-8-02', '2020-11-27',200)’
2020-12-04