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