huangjijingshi/huangjijingshi20250217.py

88 lines
3.1 KiB
Python
Raw Normal View History

2025-05-06 17:57:02 +08:00
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)