从零学习量化交易36涨跌趋势归一化分类2

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

# -*- coding: utf-8 -*-
"""
Created on Sat Feb 15 14:56:35 2025
从零学习-量化交易(35)-涨跌趋势归一化分类(2)
@author: Administrator
"""
import sys, os
sys.path.append("topqt/")

import numpy as np
import pandas as pd
import tushare as ts
import plotly as py
import plotly.figure_factory as pyff

import math
import arrow
import ffn
import pypinyin
import pandas_datareader as pdr
import matplotlib.pyplot as plt

import zsys2025  # 20250213
import ztools as zt
import ztools_str as zstr
import ztools_data2025 as zdat
import ztools_draw2025 as zdr
import ztools_tq2025 as ztq  # 20250213
import zpd_talib2025 as zta

#1
print('\n#1,set.sys')
pd.set_option('display.width', 450)    
pd.set_option('display.float_format', zt.xfloat3)    


#2
print('\n#2,读取数据')
#fss='/zdat/cn/xday/000001.csv'
#fss='data/inx_000001.csv'
fss='data/300682.csv'
df=pd.read_csv(fss,index_col=0)
df=df.sort_index()

#3
print('\n#3,整理数据')
df['xopen']=df['open'].shift(-1)
df['xclose']=df['close'].shift(-1)
print(df.tail())
#
#4
print('\n#4,数据分类')
df['kclose']=df['xclose']/df['xopen']*100
df['ktype']=df['kclose'].apply(zt.iff3type,d0=99.5,d9=101.5,v3=3,v2=2,v1=1)
#
print('df.head(100)')
print(df.head(100))
print('\ndf.tail(100)')
print(df.tail(100))


#5
print('\n#5,数据分析')
n9=len(df.index)
n3,n2,n1=sum(df['ktype']==3),sum(df['ktype']==2),sum(df['ktype']==1)
k3,k2,k1=round(n3/n9*100,2),round(n2/n9*100,2),round(n1/n9*100,2)
print('n9,',n9)
print('n3,n2,n1,',n3,n2,n1)
print('k3,k2,k1,%,',k3,k2,k1)


#9
print('\n#9,ok')

(2)程序输出结果

runfile('D:/zwPython/zwrk/1_Quant_TensorFlow/35-NormalizedClassificationofRisingandFalling trends-2.py', wdir='D:/zwPython/zwrk/1_Quant_TensorFlow')
Reloaded modules: zsys2025, ztools, zsys, ztools_str, ztools_web, ztools_data, ztools_tq, zpd_talib, ztools_data2025, zpd_talib2025, ztools_draw2025, ztools_tq2025

#1,set.sys

#2,读取数据

#3,整理数据
             open   high    low  close     volume  xopen  xclose
date                                                            
2025-02-10 11.890 12.310 11.770 12.240 355964.000 12.180  12.010
2025-02-11 12.180 12.180 11.680 12.010 267600.000 12.290  12.860
2025-02-12 12.290 12.980 12.110 12.860 410936.000 12.850  12.810
2025-02-13 12.850 13.070 12.540 12.810 335640.000 12.830  13.850
2025-02-14 12.830 13.990 12.820 13.850 543671.000    nan     nan

#4,数据分类
df.head(100)
             open   high    low  close    volume  xopen  xclose  kclose  ktype
date                                                                          
2017-08-01  3.657  4.537  3.657  4.537   140.000  5.064   5.064 100.000      2
2017-08-02  5.064  5.064  5.064  5.064    56.000  5.644   5.644 100.000      2
2017-08-03  5.644  5.644  5.644  5.644    64.000  6.284   6.284 100.000      2
2017-08-04  6.284  6.284  6.284  6.284   107.000  6.991   6.991 100.000      2
2017-08-07  6.991  6.991  6.991  6.991   821.000  7.764   7.764 100.000      2
          ...    ...    ...    ...       ...    ...     ...     ...    ...
2017-12-19 10.717 10.944 10.684 10.897  8242.000 10.931  10.677  97.676      1
2017-12-20 10.931 10.931 10.651 10.677  7838.000 10.744  10.877 101.238      2
2017-12-21 10.744 10.964 10.551 10.877 11166.000 10.771  11.017 102.284      3
2017-12-22 10.771 11.117 10.771 11.017 16105.000 11.017  10.884  98.793      1
2017-12-25 11.017 11.091 10.584 10.884 11501.000 10.951  11.477 104.803      3

[100 rows x 9 columns]

df.tail(100)
             open   high    low  close     volume  xopen  xclose  kclose  ktype
date                                                                           
2024-09-10  8.700  9.190  8.550  9.040 218674.000  9.010   8.970  99.556      2
2024-09-11  9.010  9.040  8.880  8.970 119333.000  9.000   8.960  99.556      2
2024-09-12  9.000  9.130  8.900  8.960 153363.000  8.970   8.790  97.993      1
2024-09-13  8.970  9.060  8.760  8.790 123229.000  8.770   8.600  98.062      1
2024-09-18  8.770  8.800  8.440  8.600 137237.000  8.680   8.710 100.346      2
          ...    ...    ...    ...        ...    ...     ...     ...    ...
2025-02-10 11.890 12.310 11.770 12.240 355964.000 12.180  12.010  98.604      1
2025-02-11 12.180 12.180 11.680 12.010 267600.000 12.290  12.860 104.638      3
2025-02-12 12.290 12.980 12.110 12.860 410936.000 12.850  12.810  99.689      2
2025-02-13 12.850 13.070 12.540 12.810 335640.000 12.830  13.850 107.950      3
2025-02-14 12.830 13.990 12.820 13.850 543671.000    nan     nan     nan      2

[100 rows x 9 columns]

#5,数据分析
n9, 1778
n3,n2,n1, 482 499 797
k3,k2,k1,%, 27.11 28.07 44.83

#9,ok

(3)程序代码注释

# -*- coding: utf-8 -*-
"""
Created on Sat Feb 15 14:56:35 2025
从零学习-量化交易(35)-涨跌趋势归一化分类(2)
@author: Administrator
"""
# 导入 sys 和 os 模块
# sys 模块提供了与 Python 解释器交互的功能,比如修改模块搜索路径
# os 模块用于与操作系统交互,例如文件和目录操作
import sys, os
# 将 "topqt/" 目录添加到系统模块搜索路径中,以便后续能导入该目录下的自定义模块
sys.path.append("topqt/")

# 导入 numpy 库,用于高效的数值计算,如数组和矩阵运算
import numpy as np
# 导入 pandas 库,用于数据处理和分析,提供 DataFrame 和 Series 等数据结构
import pandas as pd
# 导入 tushare 库,可用于获取金融数据
import tushare as ts
# 导入 plotly 库,用于创建交互式可视化图表
import plotly as py
# 导入 plotly.figure_factory 模块,包含创建特殊图表的工厂函数
import plotly.figure_factory as pyff

# 导入 math 模块,提供常见的数学函数
import math
# 导入 arrow 库,用于处理日期和时间,具有简洁的 API
import arrow
# 导入 ffn 库,用于金融数据的分析和可视化
import ffn
# 导入 pypinyin 库,可将中文转换为拼音
import pypinyin
# 导入 pandas_datareader 库,用于从各种数据源获取金融数据
import pandas_datareader as pdr
# 导入 matplotlib.pyplot 模块,用于创建静态可视化图表
import matplotlib.pyplot as plt

# 导入自定义模块 zsys2025,可能包含系统相关的配置和函数
import zsys2025  # 20250213
# 导入自定义模块 ztools,可能包含通用的工具函数
import ztools as zt
# 导入自定义模块 ztools_str,可能包含字符串处理的工具函数
import ztools_str as zstr
# 导入自定义模块 ztools_data2025,可能包含数据处理的工具函数
import ztools_data2025 as zdat
# 导入自定义模块 ztools_draw2025,可能包含绘图的工具函数
import ztools_draw2025 as zdr
# 导入自定义模块 ztools_tq2025,可能包含与 tushare 相关的工具函数
import ztools_tq2025 as ztq  # 20250213
# 导入自定义模块 zpd_talib2025,可能包含与 pandas 和 talib 相关的工具函数
import zpd_talib2025 as zta

#1
# 打印提示信息,表明开始进行系统设置
print('\n#1,set.sys')
# 设置 pandas 显示数据的宽度为 450 个字符,使输出更易读
pd.set_option('display.width', 450)    
# 设置 pandas 显示浮点数的格式,使用 zt.xfloat3 函数进行格式化
pd.set_option('display.float_format', zt.xfloat3)    

#2
# 打印提示信息,表明开始读取数据
print('\n#2,读取数据')
# 注释掉的路径为其他可能的数据文件路径
#fss='/zdat/cn/xday/000001.csv'
#fss='data/inx_000001.csv'
# 指定要读取的 CSV 文件路径
fss='data/300682.csv'
# 使用 pandas 的 read_csv 函数读取 CSV 文件,并将第一列作为索引
df = pd.read_csv(fss, index_col=0)
# 对 DataFrame 按照索引进行排序
df = df.sort_index()

#3
# 打印提示信息,表明开始整理数据
print('\n#3,整理数据')
# 在 DataFrame 中创建新列 'xopen',其值为 'open' 列向下移动一行的数据
# 目的是获取下一个交易日的开盘价
df['xopen'] = df['open'].shift(-1)
# 在 DataFrame 中创建新列 'xclose',其值为 'close' 列向下移动一行的数据
# 目的是获取下一个交易日的收盘价
df['xclose'] = df['close'].shift(-1)
# 打印 DataFrame 的最后几行数据,用于查看整理后的数据情况
print(df.tail())

#4
# 打印提示信息,表明开始进行数据分类
print('\n#4,数据分类')
# 在 DataFrame 中创建新列 'kclose',计算下一个交易日收盘价与开盘价的比值并乘以 100
# 该值反映了下一个交易日股价的相对变化情况
df['kclose'] = df['xclose'] / df['xopen'] * 100
# 在 DataFrame 中创建新列 'ktype',对 'kclose' 列的每个元素应用 zt.iff3type 函数进行分类
# d0=99.5 是下限阈值
# d9=101.5 是上限阈值
# v3=3 表示当 'kclose' 大于 d9 时返回的值
# v2=2 表示当 'kclose' 在 d0 和 d9 之间时返回的值
# v1=1 表示当 'kclose' 小于 d0 时返回的值
df['ktype'] = df['kclose'].apply(zt.iff3type, d0=99.5, d9=101.5, v3=3, v2=2, v1=1)
# 打印 DataFrame 的前 100 行数据,查看数据分类结果
print('df.head(100)')
print(df.head(100))
# 打印 DataFrame 的后 100 行数据,查看数据分类结果
print('\ndf.tail(100)')
print(df.tail(100))

#5
# 打印提示信息,表明开始进行数据分析
print('\n#5,数据分析')
# 计算 DataFrame 的行数,即数据的总数量
n9 = len(df.index)
# 分别统计 'ktype' 列中值为 3、2、1 的元素个数
n3, n2, n1 = sum(df['ktype'] == 3), sum(df['ktype'] == 2), sum(df['ktype'] == 1)
# 分别计算值为 3、2、1 的元素个数占总数据量的百分比,并保留两位小数
k3, k2, k1 = round(n3 / n9 * 100, 2), round(n2 / n9 * 100, 2), round(n1 / n9 * 100, 2)
# 打印数据的总数量
print('n9,', n9)
# 打印值为 3、2、1 的元素个数
print('n3,n2,n1,', n3, n2, n1)
# 打印值为 3、2、1 的元素个数占总数据量的百分比
print('k3,k2,k1,%,', k3, k2, k1)

#9
# 打印提示信息,表明程序执行完毕
print('\n#9,ok')

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

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

相关推荐

发表回复

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