diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9a99103..039fa70 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -62,6 +62,7 @@ SET( SOURCE_FILES
common/avgcoststocks.cpp
common/chart.cpp
common/csvmodel.cpp
+ common/tradelog.cpp
main.cpp)
SET( HEADER_FILES
Model/acsmodel.h
@@ -71,7 +72,8 @@ SET( HEADER_FILES
common/threadpool.h
common/timer.h
common/csvreader.h
- common/csvmodel.h )
+ common/csvmodel.h
+ common/tradelog.h)
#file(GLOB CLIENT_FILE *.cpp *.h)
diff --git a/Model/acsmodel.cpp b/Model/acsmodel.cpp
index 6ca43bf..70c9aec 100644
--- a/Model/acsmodel.cpp
+++ b/Model/acsmodel.cpp
@@ -60,11 +60,11 @@ QVariant ACSModel::headerData(int section, Qt::Orientation orientation, int role
if (role == Qt::DisplayRole && orientation == Qt::Horizontal) {
switch (section) {
case 0:
- return QString("Assets");
+ return QString("Amount");
case 1:
return QString("Price");
case 2:
- return QString("TotalAmount");
+ return QString("Total");
}
}
diff --git a/README.md b/README.md
index 07fb9de..2e66495 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,12 @@
-#Service Stock Markets
+## Service Stock Markets
The service for calculate some parameters stock market
-##Requirements
-
-QT
+## Requirements
+
-C++17 compiler support
-Cmake
+
-QT
-Doxygen
-
-C++17 compiler support
-##Build
+
+## Build
git clone https://github.com/silverstringer/ssm.git
mkdir build && cd build
@@ -14,18 +15,24 @@ cmake ..
make -j8
-##Install
+## Install
make install
-##Run
+## Run
-##Usage
+## Usage
1) Simple Dollar Cost Average Digital Asset( on bull market)
2) Different percentage on month
3) Calculate average price of asset
-*Advanced. Save result on *.csv file, build graph
+*Advanced. Save resultDCA on *.csv file, build graph
+
+## TODO.
+1.Assets allocation by percentage [ ]
+2.Import history order from broker [ ]
+3.Analyze history orders, profit and loss all assets [any]
+4.Usage DB sqlite for store or csv?
diff --git a/common/avgcoststocks.h b/common/avgcoststocks.h
index 6014b68..f2591c9 100644
--- a/common/avgcoststocks.h
+++ b/common/avgcoststocks.h
@@ -12,7 +12,7 @@
/**
- * @brief average result of buy assets
+ * @brief average resultDCA of buy assets
*/
class AvgCostStocks : public QWidget
{
diff --git a/common/chart.cpp b/common/chart.cpp
index be30971..8b7b7f1 100755
--- a/common/chart.cpp
+++ b/common/chart.cpp
@@ -1,6 +1,12 @@
#include "chart.h"
QT_CHARTS_USE_NAMESPACE
+
+Graph::Graph() {
+
+ m_datetimeFormat = "yyyy-MM-dd HH:mm:ss";
+}
+
void Graph::setChartView(QChart *chart)
{
QChartView *chartView = new QChartView(chart);
@@ -8,7 +14,7 @@ void Graph::setChartView(QChart *chart)
chartView->setRubberBand(QChartView::HorizontalRubberBand); //for zoom graph
QDialog *dialog = new QDialog();
- dialog->setWindowTitle(title);
+ dialog->setWindowTitle(m_title);
QVBoxLayout *mainlayout = new QVBoxLayout();
mainlayout->addWidget(chartView);
@@ -33,30 +39,71 @@ void Graph::buildBarChart(const std::map &data) {
QChart *chart = new QChart();
chart->addSeries(series);
- chart->setTitle(title);
+ chart->setTitle(m_title);
chart->setAnimationOptions(QChart::SeriesAnimations);
QStringList categories;
- categories << titleAxisX;
+ categories << m_titleAxisX;
QBarCategoryAxis *axisX = new QBarCategoryAxis();
axisX->append(categories);
chart->addAxis(axisX, Qt::AlignBottom);
series->attachAxis(axisX);
QValueAxis *axisY = new QValueAxis();
- auto max = std::max_element(data.begin(), data.end(),
- [](const std::pair &p1, const std::pair &p2) {
- return p1.second < p2.second;
- });
- auto min = std::min_element(data.begin(), data.end(),
- [](const std::pair &p1, const std::pair &p2) {
- return p1.second < p2.second;
- });
-
- axisY->setRange(0, max->second + min->second);
- axisY->setTickCount(10);
+ auto param = min_max_range_element(data);
+ axisY->setRange(0, param.first + param.second);
- axisY->setTitleText(titleAxisY);
+ axisY->setTickCount(data.size() * 1.5);
+
+ axisY->setTitleText(m_titleAxisY);
+ chart->legend()->setVisible(true);
+ chart->legend()->setAlignment(Qt::AlignBottom);
+ chart->addAxis(axisY, Qt::AlignLeft);
+ series->attachAxis(axisY);
+
+ setChartView(chart);
+
+}
+
+
+void Graph::buildBarChartDiffDepo(const std::map &data)
+{
+
+ QBarSet *set[data.size()];
+ auto depo = data.begin()->second;
+ QStackedBarSeries *series = new QStackedBarSeries();
+ int i = 0;
+ for (auto&& [key, value] : data) {
+ set[i] = new QBarSet(key);
+ *set[i] <append(set[i]);
+ i++;
+ }
+
+ QChart *chart = new QChart();
+ chart->addSeries(series);
+ chart->setTitle(m_title);
+ chart->setAnimationOptions(QChart::SeriesAnimations);
+
+ QStringList categories;
+ for (auto&& [key, value] : data) {
+ categories << key;
+ }
+
+ QBarCategoryAxis *axisX = new QBarCategoryAxis();
+ axisX->append(categories);
+ chart->addAxis(axisX, Qt::AlignBottom);
+ series->attachAxis(axisX);
+
+ QValueAxis *axisY = new QValueAxis();
+ auto param = min_max_range_element(data);
+
+// axisY->setRange(0, max->second + min->second);
+// axisY->setTickCount(data.size() * 1.5);
+
+ axisY->setTitleText(m_titleAxisY);
chart->legend()->setVisible(true);
chart->legend()->setAlignment(Qt::AlignBottom);
chart->addAxis(axisY, Qt::AlignLeft);
@@ -77,7 +124,7 @@ void Graph::buildLineChart(const std::map &data) {
chart->legend()->hide();
chart->addSeries(series);
chart->createDefaultAxes();
- chart->setTitle(titleAxisY);
+ chart->setTitle(m_titleAxisY);
// QValueAxis *axisY = new QValueAxis();
//
// axisY->setTickCount(10);
@@ -91,3 +138,63 @@ void Graph::buildLineChart(const std::map &data) {
setChartView(chart);
}
+
+void Graph::buildDateTimeAxes(const std::map &data) {
+
+ QLineSeries *series = new QLineSeries();
+
+ for (auto items : data) {
+ QDateTime momentInTime = QDateTime::fromString(items.first, m_datetimeFormat);
+ series->append(momentInTime.toMSecsSinceEpoch(), items.second);
+ }
+
+ QChart *chart = new QChart();
+ chart->legend()->hide();
+ chart->addSeries(series);
+ chart->setTitle(m_titleAxisY);
+
+
+ QDateTimeAxis * axisX = new QDateTimeAxis;
+ axisX->setTickCount(10);
+// axisX->setTickCount(data.size()/4);
+ axisX->setFormat(m_datetimeFormat);
+ chart->addAxis(axisX, Qt::AlignBottom);
+ series->attachAxis(axisX);
+
+
+ auto param = min_max_range_element(data);
+
+ QValueAxis * axisY = new QValueAxis;
+ axisY->setLabelFormat(" %i");
+ axisY->setRange(0, param.first + param.second);
+ axisY->setTickCount(10);
+
+ axisY->setTitleText(m_titleAxisY);
+ chart->addAxis(axisY, Qt::AlignLeft);
+ series->attachAxis(axisY);
+
+ setChartView(chart);
+}
+
+void Graph::buildPieChart(const std::map &data) {
+
+ QPieSeries * series = new QPieSeries();
+ for(auto &items: data)
+ series->append(items.first, items.second);
+
+ series->setLabelsVisible(true);
+ series->setLabelsPosition(QPieSlice::LabelInsideHorizontal);
+
+ QPieSlice * slice = series->slices().at(1);
+ for( auto slice : series->slices())
+ slice->setLabel(QString("%1% %2").arg(100 * slice->percentage(), 0, 'f', 1).arg(slice->label()));
+ slice->setExploded();
+ slice->setLabelVisible();
+ slice->setPen(QPen(Qt::darkGreen,2));
+ slice->setBrush(Qt::green);
+
+ QChart *chart = new QChart();
+// chart->legend()->hide();
+ chart->addSeries(series);
+ setChartView(chart);
+}
diff --git a/common/chart.h b/common/chart.h
index d50f250..55bc0d5 100755
--- a/common/chart.h
+++ b/common/chart.h
@@ -3,31 +3,52 @@
#include
#include
#include
+#include
#include
#include
#include
#include
#include
+#include
#include
#include
#include