import pandas as pd import numpy as np from datetime import datetime import pymysql from sqlalchemy import create_engine # 导入自定义卦象计算模块 from guaCalc_huangjijingshi import guaCalc_huangjijingshi from luckCalc_huangjijingshi import luckCalc_huangjijingshi # ========== 数据库连接配置 ========== # 你的账号、密码、主机、端口 username = 'cn_ainvest_db' password = 'cn_ainvest_sd3a1' host = 'rm-2zewagytttzk6f24xno.mysql.rds.aliyuncs.com' port = 3306 database = 'ai_strategy' # 这里改成你要的数据库 # 创建 SQLAlchemy engine engine = create_engine(f'mysql+pymysql://{username}:{password}@{host}:{port}/{database}') # ========== 文件路径配置 ========== configPath = r'C:\AI trading\config\Rey\test_reinforcement' matlabPath = r'D:\Dropbox\Matlab\Rey\MATLAB' # 修改为你的 Excel 文件路径 tempPath = r'C:\Users\24011\Documents\WeChat Files\wxid_k4ep58f81rx421\FileStorage\File\2025-04\tuigua_huangjijingshi - 副本\tuigua_huangjijingshi - 副本\皇极经世.xlsx' # ========== 加载 64 卦映射表 ========== Map64Gua = pd.read_excel(tempPath, sheet_name="bagua") # 转换爻数据为整数 for col in ['yao1', 'yao2', 'yao3', 'yao4', 'yao5', 'yao6']: Map64Gua[col] = Map64Gua[col].apply(lambda x: int(x) if str(x).isdigit() else x) Map64GuaOmit = Map64Gua[Map64Gua['change_omit'] == 0] # ========== 从数据库加载 24 节气数据 ========== def load_solar_terms(conn_params): """通过 SQLAlchemy 连接读取 solar_terms 表""" sqlquery = 'SELECT * FROM solar_terms' df = pd.read_sql(sqlquery, engine) df['As_Of_Date'] = pd.to_datetime(df['As_Of_Date']) df = df.sort_values('As_Of_Date') return df # 加载数据并标记重要节气 solar_terms = load_solar_terms(engine) important_terms = ['冬至', '雨水', '谷雨', '夏至', '处暑', '霜降'] solar_terms['isImportant'] = solar_terms['Solar_Terms'].isin(important_terms).astype(int) Map24Jieqi = solar_terms.copy() # ========== 示例:计算某个日期的卦象 ========== kDate = datetime(1973, 7, 17, 17, 20, 0) print("计算日期:", kDate) # 调用卦象计算函数 Gua1Hour, Gua1Day, Gua1Month, Gua1Year, GuaLuck = guaCalc_huangjijingshi( Map64Gua, Map24Jieqi, kDate ) print("年卦:", Gua1Year) print("月卦:", Gua1Month) print("日卦:", Gua1Day) print("时卦:", Gua1Hour) print("吉凶卦:", GuaLuck) # ========== 计算 1990-2030 每年的年卦 ========== # 生成日期范围 start_date = datetime(1990, 1, 1) end_date = datetime(2030, 1, 1) date_range = pd.date_range(start=start_date, end=end_date, freq='YS') # 每年第一天 year_gua_list = [] for date in date_range: _, _, _, Gua1Year, _ = guaCalc_huangjijingshi(Map64Gua, Map24Jieqi, date) year_gua_list.append({ 'Year': date.year, 'Trigram': Gua1Year.trigram if hasattr(Gua1Year, 'trigram') else None, }) yearGuaMap = pd.DataFrame(year_gua_list) #========== 计算年份吉凶 ========== LuckYear = luckCalc_huangjijingshi(Map64Gua, yearGuaMap, GuaLuck) print("\n年份吉凶计算结果:") print(LuckYear)