【问题标题】:Whats the best possible way to represent a time as a double type将时间表示为双精度类型的最佳方法是什么
【发布时间】:2020-08-20 15:33:17
【问题描述】:

我正在尝试使用一个名为 QCustomPlot 的库,在 X 轴上,我希望能够将股票市场的用户时区从上午 9:30 到下午 4:00 开放,但我需要的参数是什么时候设置 x 轴的范围必须是双倍的,将时间设置为我可以使用的格式的最佳方法是什么?提前谢谢!

补充:还有什么简单的方法可以让y轴的范围根据标的股票的当前价格上下波动吗?

代码:

string symbol_std = symbol.toStdString();


    //Retrieves json format of data
    Json::Value chartData = IEX::stocks::chartYtd(symbol_std);

    //Size of json
    int n = chartData.size();

    //Stores x and y values
    QVector<double> time(n), average(n);


    QDateTime start = QDateTime(QDate(2020, 1, 1));
    start.setTimeSpec(Qt::UTC);
    double startTime = start.toTime_t();
    double binSize = 3600*24;
    time[0] = startTime;

    //Reads in data from json(historical data 1 day delayed)
    for(int i = 0; i < chartData.size(); i++)
    {
        time[i + 1] = startTime + 3600*(i+1);
        average[i] = (chartData[i]["close"].asDouble());

        if((average[i] == 0) && (time[i] != chartData.size() - 1))
        {
            average[i] = average[i-1];
        }


    }
    //Initializes graph
    ui->stockGraph->addGraph();
    ui->stockGraph->graph(0)->setData(time, average);

    // give the axes some labels:
    ui->stockGraph->xAxis->setLabel("Time");
    ui->stockGraph->yAxis->setLabel("Price");

    // set axes ranges, so we see all data:
    ui->stockGraph->xAxis->setRange(time[0], time[n]);
    ui->stockGraph->yAxis->setRange(210, 340);
    ui->stockGraph->replot();

图表的可视化

【问题讨论】:

  • 为什么 X 必须是双精度的?
  • 看起来你只需要通过将它们乘以一个值来标准化你的时间,以使它们达到你想要的范围(小时可能最容易阅读)。将其转换为字符串(例如(上午 9:30...)时间似乎超出了您使用的函数可以处理的范围。
  • @MichaelDorgan 这似乎是我最好的选择,感谢您的帮助!

标签: c++ qt qwt


【解决方案1】:

将时间转换为我可以使用的格式的最佳方法是什么?

您需要QwtDateScaleEngineQwtDateScaleDraw。这些会将您的 double 值解释为从纪元“1970-01-01T00:00:00 UTC”开始的时间(以毫秒为单位)。

ui->stockGraph->setAxisScaleDraw(QwtPlot::xBottom, new QwtDateScaleDraw());
ui->stockGraph->setAxisScaleEngine(QwtPlot::xBottom, new QwtDateScaleEngine());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-22
    • 2010-09-11
    • 2010-09-13
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多