Lionel_Starick 2020-06-20 00:08 采纳率: 0%
浏览 122

【Python】作业求助qwq这里边界条件有什么错误吗?

最近写股票投资策略的大作业写到头疼。

PS:我的学校只是把编程作为必修,但是我不是计算机系的,之前也没有编程底子。所以写起来大作业感觉很艰难。

以下是的作业要求的策略一:

(先前会获得一个csv文件,其中包括了时间倒序排列的股票收盘价,按照下文进行m,n的找寻。进行测试时,使用的是含有56条数据的格力电器近期股票,再次就认为是一个)

策略1:规定在第x天,从x-m+1到x天的收盘价的平均值为mx;在第y天,从第y-n+1到第y天的收盘价的平均值为ny。当mx-1-mx-20,也就是x-1天的m天平均值小于x-2天的m天平均值,而第x天的m天平均值大于x-1天的m天平均值,则按第x+1天的收盘价买入股票;之后,如果存在一个y>x,有ny-1-ny-2>0且 ny-ny-1<0时,按第y+1天的收盘价卖出股票。然后再向后找买入点、卖出点,直到文件记录结束。

规定初始金额10000元,股票数为0。每次都进行全额买卖,假设股票数量也可以是小数。

例如在m=2,n=3的条件下,2020/3/05符合第m天的条件,则在2020/3/06以18.25元买入,购入10000/ 18.25=547.9452股,接下来,以2020/3/06这一天开始,由于这一天符合第n天的条件,则以2020/3/09的收盘价卖出,547.9452*17.54=9610.959。接下来,从2020/3/09开始,找到符合m的日期2020/3/20,但之后找不到符合条件的y,则不再做交易,完成本次模拟。即买卖必需成对完成,每一次的买,要找到后续与之配对的卖,否则不进行交易。

如果有股票停牌,在文件中是以0表示收盘价,则忽略这一天。

只考虑交易日,不考虑非交易日(例如周末,节假日等文件中没有记录的时间)。

要求试探所有可能的m和n,找到最终剩余金额最大的m和n的组合,用上述网站上的实际数据测试你的程序。

下面是我的代码

import csv
content = []
contents = []
#读取表格
with open('C:\\Users\\86139\\Desktop\\课程作业、文件 大纲\\2019-2020大一\\大一下学期\\python\\大作业\\测试文件\\000651short.csv','r') as f:
    row = csv.reader(f,delimiter = ',')
    next(row)
    for i in row:
        content.append(i[3])#存储的是收盘价
    f.close()
for i in content:
    if eval(i) >0:
        contents.append(eval(i))#将字符串转为数字
contents = contents[::-1]#时间顺序排列

#策略一
L = len(contents)#天数的最大值
mairu1 = []
maichu1 = []
maichu = []
for n in range(1,L):
    for m in range(1,L):
        benqian = 10000#本钱定为10000元
        # 时间的第一个标记点
        x = m + 1
        while x < L-1:
            x = x+1 #仍然存在问题的想法
            # 边界确定的标准是不让所有的索引超出边界
            if sum(contents[x-m-1:x-2]) > sum(contents[x-m:x-1]) < sum(contents[x-m+1:x]):
                gupiaoshu = benqian / contents[x+!]
                mairu1.append([m,n, benqian])
                # 时间的第二个节点,以规定y的取值下界
                for y in range(x + 1, L):
                    if sum(contents[y-n-2:y-3]) < sum(contents[y-n-1:y-2]) > sum(contents[y-n:y-1]) :
                        benqian = gupiaoshu * contents[y]
                        maichu1.append([m, n, benqian])
                        x = y + 1
                        # 把第一个节点的赋值刷新,这样可以使得x的下界换为卖出点的后一天
                        break

        while len(mairu1) > len(maichu1):
            mairu1 = mairu1[0:-1]
        while len(mairu1) < len(maichu1):
            maichu1 = maichu1[0:-1]


        maichu.append(maichu1[-1])
zhi = []
for i in maichu:
    zhi.append(i[2])
zuidazhi = max(zhi)
for i in maichu:
    if zuidazhi == i[2]:
        print('m=%d,n=%d,现有资金=%d'%tuple(i))

我的问题是,虽然按照答案给出的可以获得最多钱的m,n的结果运算,获得的钱款是正确的,但是仍然可以找到另外多组的m,n,使得钱款更多,对其他可以获得更多钱款的数据的debug运行看起来也没啥问题,但是后来我认为,边界的界定可能有疏漏,只是我真的不知道哪里有错误了qwq希望大佬帮忙qwq今天ddl了。

  • 写回答

1条回答 默认 最新

  • 关注
    评论

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况