从零学习量化交易017股票时间因子拆分

(1)打开Spyder软件,在目录D:\zwPython\zwrk\1_Quant_TensorFlow,新建文件
17-StockTimeFactorSplit.py

# -*- coding: utf-8 -*-
"""
Created on Thu Feb 13 11:48:04 2025
Program Function:Program Function:SMA Multi-Factor Calculation
@author: Administrator
"""

import sys, os
sys.path.append("topqt/")

import numpy as np
import pandas as pd
import tushare as ts

#  TopQuant
import zsys 
import zpd_talib2025 as zta
import ztools_str as zstr
import ztools_data as zdat
import ztools_datadown as zddown

import ztools_draw2025 as zdr

#----------

#1
fss='data/300766.csv'
print('\n#1,fss',fss)
df=pd.read_csv(fss,index_col=0)
df=df.sort_index(ascending=True);
print(df.tail())

#2
#
df['xtim']=df.index
df['xyear']=df['xtim'].apply(zstr.str_2xtim,ksgn='y')
df['xmonth']=df['xtim'].apply(zstr.str_2xtim,ksgn='m')
df['xday']=df['xtim'].apply(zstr.str_2xtim,ksgn='d')
#
df['xday_week']=df['xtim'].apply(zstr.str_2xtim,ksgn='dw')
df['xday_year']=df['xtim'].apply(zstr.str_2xtim,ksgn='dy')
#df['xday_month']=df['xtim'].apply(zstr.str_2xtim,ksgn='dm')
df['xweek_year']=df['xtim'].apply(zstr.str_2xtim,ksgn='wy')
#

df['xhour']=df['xtim'].apply(zstr.str_2xtim,ksgn='h')
df['xminute']=df['xtim'].apply(zstr.str_2xtim,ksgn='t')

print('\n#2,dateLst:',zsys.dateLst)
print('\ndf.tail')
print(df.tail())


#3
df=pd.read_csv(fss,index_col=0)
df=df.sort_index(ascending=True);
df['xtim']=df.index
df2=zdat.df_xtim2mtim(df,'xtim',True)
print('\n#3,df2.tail')
print(df2.tail())

(2)程序输出结果

runfile('D:/zwPython/zwrk/1_Quant_TensorFlow/17-StockTimeFactorSplit.py', wdir='D:/zwPython/zwrk/1_Quant_TensorFlow')
Reloaded modules: zsys, zpd_talib2025, ztools_str, ztools, ztools_web, ztools_data, ztools_tq, zpd_talib, ztools_datadown, ztools_draw2025

#1,fss data/300766.csv
             open   high    low  close     volume
date                                             
2025-02-06  34.70  34.70  34.11  34.70   780546.0
2025-02-07  36.39  41.60  35.85  39.94  1863298.0
2025-02-10  41.01  47.93  41.00  47.93  1251341.0
2025-02-11  50.48  57.52  47.91  52.07  1771705.0
2025-02-12  50.70  57.13  49.53  55.00  1553976.0

#2,dateLst: ['xyear', 'xmonth', 'xday', 'xday_week', 'xday_year', 'xweek_year']

df.tail
             open   high    low  close  ...  xday_year xweek_year  xhour  xminute
date                                    ...                                      
2025-02-06  34.70  34.70  34.11  34.70  ...         37          5      0        0
2025-02-07  36.39  41.60  35.85  39.94  ...         38          5      0        0
2025-02-10  41.01  47.93  41.00  47.93  ...         41          6      0        0
2025-02-11  50.48  57.52  47.91  52.07  ...         42          6      0        0
2025-02-12  50.70  57.13  49.53  55.00  ...         43          6      0        0

[5 rows x 14 columns]

#3,df2.tail
             open   high    low  close  ...  xday xday_week  xday_year  xweek_year
date                                    ...                                       
2025-02-06  34.70  34.70  34.11  34.70  ...     6         3         37           5
2025-02-07  36.39  41.60  35.85  39.94  ...     7         4         38           5
2025-02-10  41.01  47.93  41.00  47.93  ...    10         0         41           6
2025-02-11  50.48  57.52  47.91  52.07  ...    11         1         42           6
2025-02-12  50.70  57.13  49.53  55.00  ...    12         2         43           6

[5 rows x 12 columns]

(3)程序代码注释

# -*- coding: utf-8 -*-
# 指定文件编码为 UTF - 8,确保文件中包含的非 ASCII 字符(如中文注释)能被 Python 正确处理。

"""
Created on Thu Feb 13 11:48:04 2025
Program Function:Program Function:SMA Multi-Factor Calculation
@author: Administrator
"""
# 这是一个多行注释,记录了代码的创建时间、程序功能(简单移动平均线多因子计算)以及作者信息。

import sys, os
# 导入 Python 的标准库模块 sys 和 os。
# sys 模块提供了与 Python 解释器交互的功能,例如修改模块搜索路径等。
# os 模块提供了与操作系统交互的功能,如文件和目录操作、环境变量获取等。

sys.path.append("topqt/")
# 将 "topqt/" 目录添加到 Python 的模块搜索路径中。
# 这样在使用 import 语句导入模块时,Python 解释器会去该目录下查找相应的模块文件,方便引入自定义模块。

import numpy as np
# 导入 numpy 库,并将其重命名为 np。
# numpy 是一个用于科学计算的基础库,提供了高性能的多维数组对象和处理这些数组的工具。

import pandas as pd
# 导入 pandas 库,并将其重命名为 pd。
# pandas 是一个用于数据处理和分析的库,提供了 DataFrame 和 Series 等数据结构。

import tushare as ts
# 导入 tushare 库,并将其重命名为 ts。
# tushare 是一个免费、开源的 Python 财经数据接口包,可用于获取金融数据。

#  TopQuant
import zsys 
# 导入自定义模块 zsys,该模块可能包含一些系统级别的配置或工具函数。

import zpd_talib2025 as zta
# 导入自定义模块 zpd_talib2025,并将其重命名为 zta。
# 该模块可能包含使用 TA - Lib 进行技术分析的相关函数。

import ztools_str as zstr
# 导入自定义模块 ztools_str,并将其重命名为 zstr。
# 该模块可能包含字符串处理相关的函数。

import ztools_data as zdat
# 导入自定义模块 ztools_data,并将其重命名为 zdat。
# 该模块可能包含数据处理相关的函数。

import ztools_datadown as zddown
# 导入自定义模块 ztools_datadown,并将其重命名为 zddown。
# 该模块可能包含数据下载相关的函数。

import ztools_draw2025 as zdr
# 导入自定义模块 ztools_draw2025,并将其重命名为 zdr。
# 该模块可能包含数据可视化相关的函数。

#----------

#1
fss = 'data/300766.csv'
# 定义要读取的 CSV 文件路径,该文件可能包含股票的相关数据。

print('\n#1,fss', fss)
# 打印 CSV 文件的路径,方便确认读取的文件。

df = pd.read_csv(fss, index_col=0)
# 使用 pandas 的 read_csv 函数读取指定路径的 CSV 文件。
# index_col=0 表示将文件的第一列作为 DataFrame 的索引。

df = df.sort_index(ascending=True);
# 对 DataFrame 对象 df 按照索引进行升序排序,确保数据按索引顺序排列。

print(df.tail())
# 打印 DataFrame 对象 df 的最后几行数据,方便查看数据的基本情况。

#2
#
df['xtim'] = df.index
# 将 DataFrame 对象 df 的索引赋值给新的列 'xtim',方便后续对时间数据进行处理。

df['xyear'] = df['xtim'].apply(zstr.str_2xtim, ksgn='y')
# 调用 ztools_str 模块中的 str_2xtim 函数。
# 对 'xtim' 列的每个元素应用该函数,参数 ksgn='y' 表示提取年份信息。
# 将提取的年份信息作为新的列 'xyear' 添加到 DataFrame 对象 df 中。

df['xmonth'] = df['xtim'].apply(zstr.str_2xtim, ksgn='m')
# 同样调用 str_2xtim 函数,参数 ksgn='m' 表示提取月份信息。
# 将提取的月份信息作为新的列 'xmonth' 添加到 DataFrame 对象 df 中。

df['xday'] = df['xtim'].apply(zstr.str_2xtim, ksgn='d')
# 调用 str_2xtim 函数,参数 ksgn='d' 表示提取日期信息。
# 将提取的日期信息作为新的列 'xday' 添加到 DataFrame 对象 df 中。

#
df['xday_week'] = df['xtim'].apply(zstr.str_2xtim, ksgn='dw')
# 调用 str_2xtim 函数,参数 ksgn='dw' 表示提取星期几的信息。
# 将提取的星期几信息作为新的列 'xday_week' 添加到 DataFrame 对象 df 中。

df['xday_year'] = df['xtim'].apply(zstr.str_2xtim, ksgn='dy')
# 调用 str_2xtim 函数,参数 ksgn='dy' 表示提取一年中的第几天的信息。
# 将提取的一年中的第几天信息作为新的列 'xday_year' 添加到 DataFrame 对象 df 中。

#df['xday_month'] = df['xtim'].apply(zstr.str_2xtim, ksgn='dm')
# 这行代码被注释掉了,原本可能是想提取一个月中的第几天的信息。

df['xweek_year'] = df['xtim'].apply(zstr.str_2xtim, ksgn='wy')
# 调用 str_2xtim 函数,参数 ksgn='wy' 表示提取一年中的第几周的信息。
# 将提取的一年中的第几周信息作为新的列 'xweek_year' 添加到 DataFrame 对象 df 中。

#
df['xhour'] = df['xtim'].apply(zstr.str_2xtim, ksgn='h')
# 调用 str_2xtim 函数,参数 ksgn='h' 表示提取小时信息。
# 将提取的小时信息作为新的列 'xhour' 添加到 DataFrame 对象 df 中。

df['xminute'] = df['xtim'].apply(zstr.str_2xtim, ksgn='t')
# 调用 str_2xtim 函数,参数 ksgn='t' 表示提取分钟信息。
# 将提取的分钟信息作为新的列 'xminute' 添加到 DataFrame 对象 df 中。

print('\n#2,dateLst:', zsys.dateLst)
# 打印 zsys 模块中的 dateLst 列表,该列表可能包含一些日期相关的配置信息。

print('\ndf.tail')
# 打印提示信息,表示接下来要打印 DataFrame 对象 df 的最后几行数据。

print(df.tail())
# 打印 DataFrame 对象 df 的最后几行数据,方便查看添加新列后的情况。

#3
df = pd.read_csv(fss, index_col=0)
# 再次使用 pandas 的 read_csv 函数读取指定路径的 CSV 文件,并将第一列作为索引。

df = df.sort_index(ascending=True);
# 对 DataFrame 对象 df 按照索引进行升序排序,确保数据按索引顺序排列。

df['xtim'] = df.index
# 将 DataFrame 对象 df 的索引赋值给新的列 'xtim'。

df2 = zdat.df_xtim2mtim(df, 'xtim', True)
# 调用 ztools_data 模块中的 df_xtim2mtim 函数。
# 传入三个参数:DataFrame 对象 df、要处理的列名 'xtim' 和一个布尔值 True(具体含义取决于函数实现)。
# 该函数的作用可能是对 'xtim' 列的时间数据进行某种转换,并返回一个新的 DataFrame 对象 df2。

print('\n#3,df2.tail')
# 打印提示信息,表示接下来要打印 DataFrame 对象 df2 的最后几行数据。

print(df2.tail())
# 打印 DataFrame 对象 df2 的最后几行数据,方便查看转换后的结果。

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/907158
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 4小时前
下一篇 4小时前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注