From 5a5fa5ab4c4f1af0d1aea6f4f09e7a1bb165bad4 Mon Sep 17 00:00:00 2001
From: wumu <mayi@mayi.com>
Date: 星期三, 06 八月 2025 23:34:13 +0800
Subject: [PATCH] 250806
---
separateanalysis.ui | 98 ++++++++++++++++
clientmainwindow.h | 2
clientmainwindow.cpp | 4
getstocklist.cpp | 4
separateanalysis.cpp | 144 ++++++++++++++++++++++++
separateanalysis.h | 34 +++++
historydata.cpp | 12 +
stock_plan.pro | 9 +
8 files changed, 297 insertions(+), 10 deletions(-)
diff --git a/clientmainwindow.cpp b/clientmainwindow.cpp
index 0cd291c..2388166 100644
--- a/clientmainwindow.cpp
+++ b/clientmainwindow.cpp
@@ -48,6 +48,9 @@
m_agileStrategy = new AgileStrategy(this);
ui->tabWidget->addTab(m_agileStrategy,"鐏靛姩绛栫暐");
+ m_separateAnalysis = new SeparateAnalysis(this);
+ ui->tabWidget->addTab(m_separateAnalysis,"涓偂鍒嗘瀽");
+
// 鍏宠仈涓�涓�2涓晫闈㈢殑淇″彿鍜屾Ы锛岀敤鏉ヤ紶閫掑浘琛ㄦ墍闇�鐨勬暟鎹強灞曠ず
connect(m_getStockList,SIGNAL(sendChartData(QLineSeries*)),m_stockPolicy,SLOT(showNewStockData(QLineSeries*)));
@@ -63,4 +66,5 @@
connect(m_history,SIGNAL(sendHistoryModel(QVector<QVector<QString>> &)),m_getStockList,SLOT(showHistoryModelData(QVector<QVector<QString>> &)));
connect(m_history,SIGNAL(sendHistoryModel(QStandardItemModel*)),m_getStockList,SLOT(showHistoryModelData(QStandardItemModel*)));
+ //connect(m_getStockList,SIGNAL(sendCodeNames(QMap<QString,QString>&)),m_separateAnalysis,SLOT(setNamesToCombo(QMap<QString,QString>&)));
}
diff --git a/clientmainwindow.h b/clientmainwindow.h
index b820070..d305686 100644
--- a/clientmainwindow.h
+++ b/clientmainwindow.h
@@ -10,6 +10,7 @@
#include "historydata.h"
#include "deepseekmainwindow.h"
#include "agilestrategy.h" // 鐏靛姩绛栫暐
+#include "separateanalysis.h"
namespace Ui {
@@ -36,6 +37,7 @@
HistoryData *m_history; // 鍘嗗彶鐩稿叧
DeepSeekMainWindow *m_deepSeek; // 涓偂娣辨悳
AgileStrategy *m_agileStrategy; // 鐏靛姩绛栫暐
+ SeparateAnalysis *m_separateAnalysis; // 涓偂鍒嗘瀽 鍗曠嫭鍒嗘瀽
};
diff --git a/getstocklist.cpp b/getstocklist.cpp
index 8bc6012..4350c64 100644
--- a/getstocklist.cpp
+++ b/getstocklist.cpp
@@ -45,9 +45,9 @@
// 妯″瀷鍙婅〃鏍艰鍥�
m_model = new QStandardItemModel(this);
- m_model->setColumnCount(10); // 璁剧疆10鍒�
+ m_model->setColumnCount(11); // 璁剧疆11鍒�
QStringList labels;
- labels<<"鑲$エ鍚嶅瓧"<<"鑲$エ浠e彿"<<"鎬诲競鍊�(浜�)"<<"娴侀�氬競鍊�(浜�)"<<"娑ㄨ穼骞�(%)"<<"鏀剁洏浠�"<<"鎴愪氦棰�(浜�)"<<"鎴愪氦閲�(鎵�)"<<"鎹㈡墜鐜�(%)"<<"甯傜泩鐜�";
+ labels<<"鑲$エ鍚嶅瓧"<<"鑲$エ浠e彿"<<"鎬诲競鍊�(浜�)"<<"娴侀�氬競鍊�(浜�)"<<"娑ㄨ穼骞�(%)"<<"鏀剁洏浠�"<<"鎴愪氦棰�(浜�)"<<"鎴愪氦閲�(鎵�)"<<"鎹㈡墜鐜�(%)"<<"甯傜泩鐜�"<<"浜ゆ槗棰濇帓鍚�";
m_model->setHorizontalHeaderLabels(labels); // 璁剧疆妯″瀷鐨勫垪鏍囩鍚�
m_customModel = new CustomSortProxyModel;
m_customModel->setSourceModel(m_model); // 璁剧疆婧愭ā鍨�
diff --git a/historydata.cpp b/historydata.cpp
index b2c83c2..719f8aa 100644
--- a/historydata.cpp
+++ b/historydata.cpp
@@ -38,7 +38,7 @@
ui->tableView->setSortingEnabled(true);
QStringList labels;
- labels<<"鑲$エ鍚嶅瓧"<<"鑲$エ浠e彿"<<"甯傚��(浜�)"<<"娑ㄨ穼骞�"<<"鏀剁洏浠�"<<"鎴愪氦棰�(浜�)"<<"鎴愪氦閲�"<<"鎹㈡墜鐜�"<<"PE_TTM";
+ labels<<"鑲$エ鍚嶅瓧"<<"鑲$エ浠e彿"<<"甯傚��(浜�)"<<"娑ㄨ穼骞�"<<"鏀剁洏浠�"<<"鎴愪氦棰�(浜�)"<<"鎴愪氦閲�"<<"鎹㈡墜鐜�"<<"PE_TTM"<<"浜ゆ槗棰濇帓鍚�";
m_model->setHorizontalHeaderLabels(labels);
initMySQL(); // 鍒濆鍖朚ySQL
@@ -320,7 +320,7 @@
QString searchTime = ui->dateEdit->text();
qDebug()<<"鏌ヨ鐨勬椂闂�:"<<searchTime;
- QString sql = QString("select name,code,market_capital,percent,close,amount,volume,turnover_rate,pe_ttm from stock_day_info where time_trade = '%1'").arg(searchTime);
+ QString sql = QString("select name,code,market_capital,percent,close,amount,volume,turnover_rate,pe_ttm,amount_rank from stock_day_info where time_trade = '%1'").arg(searchTime);
qDebug()<<"sql:"<<sql;
m_modelDatas.clear(); // 娓呯┖鏁扮粍涓殑鏁版嵁
@@ -341,8 +341,9 @@
QString volume = que.value(6).toString();
QString turnover_rate = que.value(7).toString();
QString pe_ttm = que.value(8).toString();
+ QString amount_rank = que.value(9).toString();
- m_modelDatas.append({name,code,market_capital,percent,close,amount,volume,turnover_rate,pe_ttm});
+ m_modelDatas.append({name,code,market_capital,percent,close,amount,volume,turnover_rate,pe_ttm,amount_rank});
QList<QStandardItem*> items;
items.append(new QStandardItem(name));
@@ -366,6 +367,7 @@
items.append(new QStandardItem(volume));
items.append(new QStandardItem(turnover_rate));
items.append(new QStandardItem(pe_ttm));
+ items.append(new QStandardItem(amount_rank));
m_model->appendRow(items);
rows++;
}
@@ -537,8 +539,8 @@
QString time_trade = "2025-06-01";
if(log_days.size() > 1){
- //time_trade = log_days.at(log_days.size() - 2); // 鏈熬鍊掓暟绗簩涓洿鏂�
- time_trade = log_days.first(); // 浠庣涓�涓紑濮嬫洿鏂�
+ time_trade = log_days.at(log_days.size() - 2); // 鏈熬鍊掓暟绗簩涓洿鏂�
+ //time_trade = log_days.first(); // 浠庣涓�涓紑濮嬫洿鏂�
}
qDebug()<<"time_trade:"<<time_trade;
diff --git a/separateanalysis.cpp b/separateanalysis.cpp
new file mode 100644
index 0000000..c1f749a
--- /dev/null
+++ b/separateanalysis.cpp
@@ -0,0 +1,144 @@
+锘�#include "separateanalysis.h"
+#include "ui_separateanalysis.h"
+
+#include <QDateTime>
+#include <QMessageBox>
+#include <QSqlQuery>
+#include <QDebug>
+#include <QSqlError>
+
+SeparateAnalysis::SeparateAnalysis(QWidget *parent) :
+ QMainWindow(parent),
+ ui(new Ui::SeparateAnalysis)
+{
+ ui->setupUi(this);
+
+ m_model = new QStandardItemModel(this);
+ m_model->setColumnCount(11); // 璁剧疆10鍒�
+ QStringList labels;
+ labels<<"鑲$エ鍚嶅瓧"<<"鑲$エ浠e彿"<<"鎬诲競鍊�(浜�)"<<"娑ㄨ穼骞�(%)"<<"鏀剁洏浠�"<<"鎴愪氦棰�(浜�)"<<"鎴愪氦閲�(鎵�)"<<"鎹㈡墜鐜�(%)"<<"甯傜泩鐜�"<<"浜ゆ槗棰濇帓鍚�"<<"浜ゆ槗鏃堕棿"<<"鎺掑悕瓒嬪娍鍙樺寲";
+ m_model->setHorizontalHeaderLabels(labels); // 璁剧疆妯″瀷鐨勫垪鏍囩鍚�
+ ui->tableView->setModel(m_model);
+
+ initMySQL(); // 鍒濆鍖栨暟鎹簱
+}
+
+SeparateAnalysis::~SeparateAnalysis()
+{
+ delete ui;
+}
+
+void SeparateAnalysis::calcRankChange()
+{
+
+}
+
+void SeparateAnalysis::initMySQL()
+{
+ //娣诲姞涓�涓暟鎹簱
+ db=QSqlDatabase::addDatabase("QMYSQL"); //鎷彿鍐呰鍐欏嚭鏁版嵁搴撶殑绫诲瀷
+ //璁剧疆鏁版嵁搴�
+ db.setHostName("127.0.0.1"); //璁剧疆鏁版嵁搴撶殑涓绘満ip
+ //璁剧疆鏁版嵁搴撶殑鐢ㄦ埛鍚�
+ db.setUserName("root");
+ //璁剧疆鏁版嵁搴撶殑瀵嗙爜
+ db.setPassword("root"); //杩欎釜灏辨槸瀹夎MySQL鏃惰缃殑瀵嗙爜
+ //璁剧疆鏁版嵁搴撶殑鍚嶅瓧
+ db.setDatabaseName("stock_plan");
+ //鎵撳紑鏁版嵁搴擄紙宸茬粡瀹夎杩噈ysql椹卞姩浜嗭級
+ if(db.open()==false){
+ QMessageBox::warning(this,"waring",db.lastError().text());
+ }else{
+ qDebug()<<"SeparateAnalysis mysql conn ok";
+ }
+}
+void SeparateAnalysis::on_pushButton_search_clicked()
+{
+ ui->label_status->setText("姝e湪鏌ヨ,璇风◢绛�...");
+ qint64 tt = QDateTime::currentMSecsSinceEpoch();
+ QString name = ui->comboBox_name->currentText();
+ QString sql = QString("select name,code,market_capital,percent,close,amount,volume,turnover_rate,pe_ttm,amount_rank,time_trade from stock_day_info where name = '%1'").arg(name);
+
+ QSqlQuery que(db);
+ int rows = 0;
+ if(que.exec(sql)){
+ qDebug()<<"select ok";
+ m_model->setRowCount(0); // 閲嶇疆妯″瀷琛屾暟
+ //int rows = 0;
+ int rank_val = 0;
+ while (que.next()) {
+ QString name = que.value(0).toString();
+ QString code = que.value(1).toString();
+ QString market_capital = QString::number(que.value(2).toDouble()/100000000);
+ QString percent = que.value(3).toString();
+ QString close = que.value(4).toString();
+ QString amount = QString::number(que.value(5).toDouble()/100000000);
+ QString volume = que.value(6).toString();
+ QString turnover_rate = que.value(7).toString();
+ QString pe_ttm = que.value(8).toString();
+ QString amount_rank = que.value(9).toString();
+ QString time_trade = que.value(10).toString();
+
+ //m_modelDatas.append({name,code,market_capital,percent,close,amount,volume,turnover_rate,pe_ttm,amount_rank});
+
+ QList<QStandardItem*> items;
+ items.append(new QStandardItem(name));
+ items.append(new QStandardItem(code));
+ items.append(new QStandardItem(market_capital));
+ //items.append(new QStandardItem(percent));
+ QStandardItem *percentItem = new QStandardItem(percent);
+ if(percent.toDouble() > 0){
+ percentItem->setData(QColor("red"),Qt::DecorationRole); // 娣诲姞涓�涓楗扮殑棰滆壊涓虹孩鑹�
+ percentItem->setData(QColor("red"),Qt::TextColorRole); // 灏嗗瓧浣撻鑹茶缃负绾㈣壊
+ items.at(0)->setData(QColor("red"),Qt::TextColorRole); // 灏嗚偂绁ㄥ悕瀛楄缃负绾㈣壊
+ }
+ else if(percent.toDouble() < 0){
+ percentItem->setData(QColor("green"),Qt::BackgroundColorRole);
+ items.at(0)->setData(QColor("green"),Qt::TextColorRole);
+ }
+ items.append(percentItem);
+
+ items.append(new QStandardItem(close));
+ items.append(new QStandardItem(amount));
+ items.append(new QStandardItem(volume));
+ items.append(new QStandardItem(turnover_rate));
+ items.append(new QStandardItem(pe_ttm));
+ items.append(new QStandardItem(amount_rank));
+ items.append(new QStandardItem(time_trade));
+ if(rank_val != 0){
+ double rank_rate = 1 - (amount_rank.toDouble()/rank_val);
+ //items.append(new QStandardItem(QString::number(rank_rate)));
+ rank_val = amount_rank.toInt();
+ QStandardItem * amount_rank_item = new QStandardItem(QString::number(rank_rate));
+ if(rank_rate > 0.9){
+ amount_rank_item->setData(QColor("red"),Qt::BackgroundColorRole);
+ }
+ items.append(amount_rank_item);
+
+ }
+ if(rank_val == 0 && amount_rank.toInt() != 0){
+ rank_val = amount_rank.toInt();
+ }
+ m_model->appendRow(items);
+ rows++;
+ }
+ qDebug()<<"鏌ヨ鍒拌鏁�:"<<rows;
+
+ }else{
+ qDebug()<<"select fail"<<que.lastError().text();
+ }
+
+ qint64 need = QDateTime::currentMSecsSinceEpoch()-tt;
+ ui->label_status->setText(QString("鑰楁椂:%1 姣,鏌ヨ瀹屾垚.鏉℃暟: %2").arg(QString::number(need)).arg(QString::number(rows)));
+ ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
+
+}
+
+void SeparateAnalysis::setNamesToCombo(QMap<QString, QString> &names)
+{
+ // 浼氬崱椤匡紝闇�瑕佺爺绌朵竴涓�
+ ui->comboBox_name->clear();
+ for(auto key:names.values()){
+ ui->comboBox_name->addItem(key);
+ }
+}
diff --git a/separateanalysis.h b/separateanalysis.h
new file mode 100644
index 0000000..0b4e324
--- /dev/null
+++ b/separateanalysis.h
@@ -0,0 +1,34 @@
+锘�#ifndef SEPARATEANALYSIS_H
+#define SEPARATEANALYSIS_H
+
+#include <QMainWindow>
+#include <QSqlDatabase>
+#include <QStandardItemModel>
+
+namespace Ui {
+class SeparateAnalysis;
+}
+
+class SeparateAnalysis : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ explicit SeparateAnalysis(QWidget *parent = 0);
+ ~SeparateAnalysis();
+
+ void calcRankChange(); // 缁熻鎺掑悕鍙樺寲鎯呭喌锛屼富瑕佺粺璁″綋澶╂瘮鍓嶄竴澶╃殑鍙樺寲鎯呭喌锛屽拰1鐨勫樊鍊硷紝杈惧埌0.90+ 璇存槑鍙互涔板叆瑙傚療浜�
+private slots:
+ void on_pushButton_search_clicked();
+ void setNamesToCombo(QMap<QString,QString> &names);
+
+private:
+ Ui::SeparateAnalysis *ui;
+ void initMySQL();
+ QSqlDatabase db;
+
+ QStandardItemModel *m_model;
+
+};
+
+#endif // SEPARATEANALYSIS_H
diff --git a/separateanalysis.ui b/separateanalysis.ui
new file mode 100644
index 0000000..b981af3
--- /dev/null
+++ b/separateanalysis.ui
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>SeparateAnalysis</class>
+ <widget class="QMainWindow" name="SeparateAnalysis">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>800</width>
+ <height>600</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>MainWindow</string>
+ </property>
+ <widget class="QWidget" name="centralwidget">
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="0" column="0">
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
+ <string>鏌ヨ鏉′欢</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>涓偂鍒楄〃:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QComboBox" name="comboBox_name">
+ <property name="editable">
+ <bool>true</bool>
+ </property>
+ <item>
+ <property name="text">
+ <string>闀挎睙鐢靛姏</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="pushButton_search">
+ <property name="text">
+ <string>鏌ヨ</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_status">
+ <property name="text">
+ <string>鏌ヨ鎯呭喌</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QTableView" name="tableView"/>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/stock_plan.pro b/stock_plan.pro
index a66bbbe..2e9b583 100644
--- a/stock_plan.pro
+++ b/stock_plan.pro
@@ -36,7 +36,8 @@
historydata.cpp \
deepseekmainwindow.cpp \
bargraphics.cpp \
- agilestrategy.cpp
+ agilestrategy.cpp \
+ separateanalysis.cpp
HEADERS += \
clientmainwindow.h \
@@ -50,7 +51,8 @@
historydata.h \
deepseekmainwindow.h \
bargraphics.h \
- agilestrategy.h
+ agilestrategy.h \
+ separateanalysis.h
FORMS += \
clientmainwindow.ui \
@@ -61,4 +63,5 @@
regularinvestment.ui \
historydata.ui \
deepseekmainwindow.ui \
- agilestrategy.ui
+ agilestrategy.ui \
+ separateanalysis.ui
--
Gitblit v1.8.0