python中for循环结束得出的值,怎么对其计算

 

def fit_fun(new_pos):  # 目标函数
    # lz_dim = [0.1, 0.2, 0.3, 0.4, 0.1, 0.2, 0.3, 0.4]
    #print(new_pos[0])
    Rx = 0.04 # 期望值
    df = pd.read_csv("./2021年.csv", encoding='gbk')
    df.insert(1, "粒子维度", new_pos[0])  # 在第一列插入粒子维数列
    print(new_pos[0])
    index_lst = list(df.columns)  # 列索引
    # 列索引循环读取数据
    total = 0
    for num in range(2, len(index_lst)-1):  # 第二列到第n-1列是不同日期的收益率,最后一列是均值。
        print(index_lst[num])
        df["E_xr"] = df["粒子维度"] * df[index_lst[num]]  # 粒子占比*不同股票每天的收益率
        res = sum(df["E_xr"]) - Rx  # 当天收益率- 预期收益率
        print("res",res)
        if res < 0:  # 若当天收益率没有预期收益率高,也就是负值,
            res1 =np.square(res) # 下半方差求平方
            print("res1", res1)
            total = total + res1  # 依次(占比*每天日期)求和
            print("total",total)
            break
    total1 = (1 / 52) * total # (1/T)*total;总的下半方差
    print("total1",total1)

    res2 = Rx - sum(df["粒子维度"] * df["均值"])  # 如果预期收益率大于投资组合收益率,就加上惩罚项
    if res2> 0:
        total = total1 + 1000* res2  # 惩罚项:1000*res1
    return total
 

 

第一个for循环计算的是f(x)=前半部分公式,if判断(红色框-0.04),若<0就求平方,再求和。

问题1:代码total1=(1/52)*total 是绿色框,T=52,,这样写对么?

问题2:公式+后面的用res2,这样连接对么,应该怎么改?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值