合并成周线、月线、季度线、年线这几个长周期k线的函数---使用掘金量化平台

本文介绍了一种Python函数`compose_bar`,用于从掘金量化平台获取指定股票的长期周期性k线数据(如周线、月线、季线和年线),解决平台未提供长期数据的问题。同时,作者分享了自己作为量化小白在求职过程中遇到的困惑,寻求行业经验和实习机会。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于在掘金量化平台上没有直接提供长期的k线数据,需要自己去提取合并,造成很大的麻烦。

def compose_bar(symbol,start_time,end_time,frequency):
    #symbol:标的,start_time:开始时间,end_time:结束时间,frequency:频率
    # 合成周线
    if frequency == 'W':
        # 判断开始日期是否为周一(默认周一 = 0,周二 = 1,所以对得出的week进行调整,加一)
        start_time = datetime.datetime.strptime(start_time,'%Y-%m-%d')
        week_start = start_time.weekday() + 1
        # 如果不是周一,则将开始时间调整到该周周一
        if week_start != 1:
            print('输入的开始日期为周{},调整到该周周一'.format(week_start))
            start_time = start_time - datetime.timedelta(days = week_start - 1)

    # 合成月线
    if frequency == 'M':
        # 判断开始日期是否为月初
        day_start_1th = int(start_time[8:10])
        # 如果不是1号,则转为当月1号
        if day_start_1th != 1 :
            start_time = datetime.datetime.strptime(start_time, '%Y-%m-%d')
            start_time = start_time - datetime.timedelta(days = day_start_1th - 1)
            print('开始日期为该月{}号,调整到当月1号',format(day_start_1th))

    # 合成季线
    if frequency == 'Q':
        # 直接开始日期设置为季度初
        month = int(start_time[5:7])   # 看开始时间月份
        year = int(start_time[0:4])     # 看开始时间年份
        if month in range(1,3):
            start_time = datetime.date(year,1,1)
        if month in range(4,6):
            start_time = datetime.date(year,4,1)
        if month in range(7,9):
            start_time = datetime.date(year,7,1)
        if month in range(10,12):
            start_time = datetime.date(year,9,1)

    # 合成年线
    if frequency == 'A':
        # 将开始时间调整为年初
        year_start = int(start_time[0:4])  # 看开始时间年份
        start_time = datetime.date(year_start,1,1)

    # 订阅历史数据(注意要复权到当前日期才能和新浪财经的数据对得上)
    data = history(symbol = symbol,frequency = '1d',start_time = start_time,end_time = end_time,fields = 'eob,open,close,high,low,amount,volume',df = True,
                   skip_suspended = True,fill_missing = None, adjust=ADJUST_PREV,adjust_end_time = datetime.datetime.today())
    # 修改日期格式并变成索引
    data.eob = data.eob.apply(lambda x :datetime.datetime.strptime(str(x).split(' ')[0],'%Y-%m-%d'))
    data.set_index(data['eob'],inplace = True)
    data.drop(columns = ['eob'],inplace = True)
    data_index = data.resample(frequency,label = 'right').last().index
    # 结果返回成dataframe格式
    data_k = pd.DataFrame({'open':data.resample(frequency,label = 'right').first()['open'],
                                'close': data.resample(frequency,label = 'right').last()['close'],
                                'high': data.resample(frequency,label = 'right').max()['high'],
                                'low': data.resample(frequency,label = 'right').min()['low'],
                                'amount': data.resample(frequency,label = 'right').sum()['amount'],
                                'volume': data.resample(frequency,label = 'right').sum()['volume'],
                                'frequency':frequency
                                })
    data_k.set_index(data_index,inplace = True)

    # 如果某周放假没有数据,则删除
    data_k.dropna(inplace = True)

    return data_k 

# 测试一下
weekly_k = compose_bar('SZSE.002261','2020-12-31','2023-11-22','W')
monthly_k = compose_bar('SZSE.002261','2020-12-31','2023-11-22','M')
quarterly_k = compose_bar('SZSE.002261','2020-12-31','2023-11-22','Q')
yearly_k = compose_bar('SZSE.002261','2020-12-31','2023-11-22','A')

测试的股票并未有任何投资建议,作案例提供参考

我是普通计算机本科生,量化小白,往量化行业,简历已投了很多都是已读不回,有点迷茫,不知道还要不要再继续往这个量化行业发展,我目前对这个工作还很懵,不知道怎样下手,想通过实习增加自己的水平,但又没有找到实习,太难了~

欢迎大家可以对我进行意见提供,不论是工作、学习!

<think>好的,用户想找C++的编程练习和练习。首先我需要确定用户的需求是什么。用户提到已经读过《C++ Primer》,可能正在寻找适合初级到中级水平的练习来巩固知识。根据系统指令,需要生成相关问,并且回答要结构清晰,引用站内资料。 首先,我应该参考用户提供的引用内容。引用[1]提到GitHub上有许多开源C++项目,可以推荐一些个人项目。引用[2]和[3]涉及C++的技术细节和版本,引用[4]强调编程的重要性。因此,在回答中可以建议用户参与开源项目或编写个人项目,同时结合基础练习。 接下来,我需要整理不同难度的练习。初级部分应该涵盖基本语法、控制结构、函数和类。中级部分可以涉及文件操作、数据结构和算法。高级部分可能需要多线程、设计模式等。此外,推荐开源项目和练习平台如LeetCode也是必要的。 还要确保使用正确的中文表达,遵循LaTeX格式,行内公式用$...$,独立公式用$$...$$。例如,在提到算法复杂度时,可以写$O(n \log n)$。同时,检查是否有需要引用的地方,比如在提到开源项目时引用[^1]。 最后,生成相关问,确保问涵盖用户可能感兴趣的方面,比如项目推荐、调试技巧、性能优化等。需要确保问自然且相关,帮助用户深入学习。</think>以下是为C++编程学习者整理的练习建议,分为基础练习、项目实践和进阶资源三个层级: ### 一、基础语法练习 1. **控制结构** - 实现斐波那契数列生成器(迭代/递归版本对比) - 编写$O(n \log n)$的排序算法(如快速排序) - 计算圆周率蒙特卡洛方法:$$ \pi \approx 4 \times \frac{\text{圆内点数}}{\text{总点数}} $$ 2. **面向对象** - 实现银行账户类(包含存取款、利息计算) - 构建几何图形继承体系(Shape->Circle/Rectangle) 3. **模板与STL** - 自定义泛型链表模板类 - 使用`<algorithm>`实现文本词频统计 ### 二、项目实践方向 1. **经典算法实现** - 红黑树/AVL树数据结构 - 基于STL的线程安全容器 2. **系统编程** - 简易命令行计算器(支持变量存储) - 多线程网络爬虫(使用C++17的`<filesystem>`) 3. **游戏开发** - 控制台俄罗斯方块(使用ncurses库) - OpenGL三维坐标系演示程序 ### 三、推荐练习平台 1. [LeetCode](https://leetcode.com) 企业库(适合面试准备) 2. [Codewars](https://www.codewars.com) 社区解平台 3. [Rosetta Code](https://rosettacode.org) 多语言算法实现对比
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值