88 lines
3.1 KiB
Python
88 lines
3.1 KiB
Python
|
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)
|