股票历史走势的比较及显示

        本文总结一下以前参加的一个股票分析软件的子项目(仅放了部分代码),项目用QT实现的,股票历史数据存储在excel文件中。

        子项目的目标是根据提供的股票历史数据查找与近期股票数据相似的时间段,并根据历史数据对走势进行预测。主要功能包括:

  • (1)股票任意时间段数据的显示
  • (2)相似历史数据的查找
  • (3)股票未来走势的预测
  • (4)更新股票数据
  • (5)导入/存储相应的数据

下面分别对上面的功能做一下思路性的概括总结:

  • 股票数据的显示

使用蜡烛图对股票数据进行显示,包含当股价、交易量、走势等,如下图所示:

    /***************价格图(蜡烛图)*****************/

    //数据链

    QCandlestickSeries *acmeSeries = new QCandlestickSeries();

    acmeSeries->setName( name );

    acmeSeries->setIncreasingColor(QColor(Qt::red));

    acmeSeries->setDecreasingColor(QColor(Qt::green));

    //acmeSeries->setBodyOutlineVisible(false);

    //acmeSeries->setBodyWidth(0.01);

    //横轴显示的信息

    QStringList categories;

    for( i=0;i<stock_chart->date.size();i++ )

        categories.append( stock_chart->date.at(i) );

    //添加最近交易天数的数据

    add_chart_set( stock_chart,acmeSeries );

    //创建Chart

    QChart *chart = new QChart();

    chart->addSeries(acmeSeries);

    //chart->setTitle( name );

    chart->setAnimationOptions(QChart::SeriesAnimations);

    chart->createDefaultAxes();

    QBarCategoryAxis *axisX = qobject_cast<QBarCategoryAxis *>(chart->axes(Qt::Horizontal).at(0));

    axisX->setCategories(categories);

    axisX->setLabelsAngle( 90 );

    axisX->setLabelsFont( QFont("Times",7) );

    QValueAxis *axisY = qobject_cast<QValueAxis *>(chart->axes(Qt::Vertical).at(0));

    axisY->setMax(axisY->max() * 1.01);

    axisY->setMin(axisY->min() * 0.99);

    chart->legend()->setVisible(false);

    //chart->legend()->setAlignment(Qt::AlignBottom);

    stock_chart->chart_view->setChart( chart );

    /***************价格图(蜡烛图)*****************/

    /***************交易量图*****************/

    QBarSet *set0 = new QBarSet("Jane");

    for( i=0;i<stock_chart->date.size();i++ )

        *set0 << stock_chart->volumes.at(i).toDouble()/100000;

    QBarSeries *series = new QBarSeries();

    series->append(set0);

    QChart *chart2 = new QChart();

    chart2->addSeries(series);

    //chart2->setTitle("Simple barchart example");

    chart2->setAnimationOptions(QChart::SeriesAnimations);

    chart2->createDefaultAxes();

    QBarCategoryAxis *axisX2 = qobject_cast<QBarCategoryAxis *>(chart2->axes(Qt::Horizontal).at(0));

    axisX2->setCategories(categories);

    axisX2->setLabelsAngle( 90 );

    axisX2->setLabelsFont( QFont("Times",7) );

    axisX2->setLabelsVisible(false);

    QValueAxis *axisY2 = qobject_cast<QValueAxis *>(chart2->axes(Qt::Vertical).at(0));

    axisY2->setMax(axisY2->max() * 1.01);

    axisY2->setMin(axisY2->min() * 0.99);

    //axisY2->setLabelsVisible(false);

    chart2->legend()->setVisible(false);

    //chart2->legend()->setAlignment(Qt::AlignBottom);

    stock_chart->chart_volume->setChart( chart2 );

 /***************交易量图*****************/

(二)相似历史数据的查找

因为查找历史数据是比较费时的操作,所以需要创建一个子线程专门用来进行查找,并连接好控制信号,例如开始、结束等,当查找到符合条件的数据时发生search_resul信号,并发送到主线程中处理:

    /******************创建子线程*****************/

    child_thread  = new QThread();

    child_process = new ProcessObject();

    child_process->moveToThread( child_thread );

    connect( child_thread,SIGNAL(finished()),child_process,SLOT(deleteLater()) );

    connect( child_thread,SIGNAL(finished()),child_thread,SLOT(deleteLater()) );

    connect( this,SIGNAL(start_search(QString,MultString,ListDouble,bool)),

             child_process,SLOT(reply_start_search(QString,MultString,ListDouble,bool)) );

    connect( child_process,SIGNAL(search_result(QString,ListInt,ListDouble)),

             this,SLOT(reply_search_result(QString,ListInt,ListDouble)) );

    connect( this,SIGNAL(stop_search()),child_process ,SLOT(reply_stop_search()) );

child_thread->start();

查找算法使用了相似性算法,算法本身不难,主要问题是在如何使用数据。

double similarity(QList<double> data1,QList<double> data2)

{

    if( data1.isEmpty() || data2.isEmpty() )

        return 0;

    if( data1.size() != data2.size() )

        return 0;

    if( data1.size() < 1  )

        return 0;

    int i;

    int _size = data1.size();

    double r1,r2,r3,avg1,avg2,var1,var2;

    r1 = r2 = var1 = var2 = 0;

    //平均值

    for( i=0;i<_size;i++ )

    {

        r1 += data1[i];

        r2 += data2[i];

    }

    avg1 = r1/_size;

    avg2 = r2/_size;

    //方差

    r1 = r2 = 0;

    for( i=0;i<_size;i++ )

    {  

        r1 += ( data1[i] - avg1 )*( data1[i] - avg1 );

        r2 += ( data2[i] - avg2 )*( data2[i] - avg2 );

    }

    var1 = 1/sqrt( r1/(_size -1) );

    var2 = 1/sqrt( r2/(_size -1) );

    //数据标准化

    QList<double> std_data1,std_data2;

    std_data1.clear();

    std_data2.clear();

    for( i=0;i<_size;i++ )

    {

        std_data1.append ( ( data1[i] - avg1)*var1 );

        std_data2.append ( ( data2[i] - avg2)*var2 );

    }

    //计算相关性,consine

    r1 = r2 = r3 = 0;

    for( i=0;i<_size;i++ )

    {

        r1 = r1 + std_data1[i]*std_data2[i];

        r2 = r2 + std_data1[i]*std_data1[i];

        r3 = r3 + std_data2[i]*std_data2[i];

    }

    return (r1/sqrt(r2*r3));

}

下图是正在查找股票数据的界面,查找的结果包含开始位置,结束时间(excel中的下标),相似度,相似度可以自己调节:

(三)股票未来走势的预测

            未来走势预测是根据在历史数据中查找到的时间段来计算的,因为历史数据已经得到了走势数据,所以预测还是比较比较简单,下图就是预测的图,红色表示预测的数据,绿色表示实际的数据(因为没有更新数据,所以实际数据没显示出来):

(四)更新股票数据

            点击界面上的更新按钮即可更新股票数据。在新浪网获取股票数据,15点后可自动更新一次,网络部分使用QNetworkManager,发送request请求。

    //获取名字,例如,003300.xls,获取到的是003300
        QString _name = stock_names.takeFirst();
        _name = _name.split('.').at(0).trimmed();
        if (_name.split('.').isEmpty())
            return;
 
        //构造网址,注:更改datalen可以获取到更多时间的数据
        //100相当于获取到半年的数据,这里暂时取50
        //完整的:QString url = "http://money.finance.sina.com.cn/quotes_service/api/json_v2.php/CN_MarketData.getKLineData?symbol=sh000001&scale=240&ma=no&datalen=100";
 
        QString url = "http://money.finance.sina.com.cn/quotes_service/api/json_v2.php/CN_MarketData.getKLineData?symbol=";
        if( _name.at(0)=='0' )//0开头,深证
            url = url + "sz";
        else                  //其他情况应该是6开头了,上证
            url = url + "sh";
 
        url = url + _name;
        url = url + "&scale=240&ma=no&datalen=50";
 
        //发送网络请求(更新第一个股票,其他股票的更新参考reply_network_finished()
        QNetworkRequest request;
        request.setUrl( QUrl(url) );
        QNetworkReply *reply = network_manager->get(request);
        connect( reply,SIGNAL( finished() ),this,SLOT( reply_network_finished() ) );
(五)数据的存储
数据存储在json文件中。存储内容包含查找到的数据,预测数据等。
    //源数据对应的时间
    QJsonArray _src_days;
    for (i = 0;i < info.src_day.size();i ++)
        _src_days.append(info.src_day.at(i));
    jsobject.insert("src_day",QJsonValue(_src_days));
     //源数据对应的股价
    QJsonArray _src_prices;
    for (i = 0;i < info.src_price.size();i ++)
        _src_prices.append(info.src_price.at(i));
    jsobject.insert("src_price",QJsonValue(_src_prices));
 
    //目标数据对应的时间
    QJsonArray _dst_days;
    for (i = 0;i < info.dst_day.size();i ++)
        _dst_days.append(info.dst_day.at(i));
    jsobject.insert("dst_day",QJsonValue(_dst_days));
    //目标数据对应的股价
    QJsonArray _dst_prices;
    for (i = 0;i < info.dst_price.size();i ++)
        _dst_prices.append(info.dst_price.at(i));
    jsobject.insert("dst_price",QJsonValue(_dst_prices));
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/65092.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

股票数据下载-如何下载股票历史行情数据?

股票数据是研究和分析行情的基础&#xff0c;不管是量化分析还是数据对比&#xff0c;股票数据都是最基础的部分。之前各个炒股软件基本都有下载股票数据的功能&#xff0c;但是后来就取消或者加了限制了。 只要两步就能下载&#xff1a; 填股票代码、邮箱收到股票历史数据…

股票历史数据-股票历史数据下载

股票历史数据-股票历史数据下载 共享一个股票历史数据下载系统工具&#xff0c;可以在线下载股票历史数据&#xff0c;下载股票历史数据是&#xff1a;A股所有股票从成立到最近一天的所有股票历史数据&#xff0c;亲测手机在线就能下载a股股票历史数据 亲测获取步骤&#xf…

A股全市场股票历史行情低频日频EOD数据

A股市场全部历史日频数据每日盘后更新 数据源 本文中的日频数据源来自恒生&#xff0c;包括前后复权和无复权行情&#xff0c;数据分股票代码压缩&#xff0c;每日盘后更新上传网盘 共享网盘链接与详情 全A股票前复权历史行情数据&#xff1a; 链接&#xff1a;https://pa…

中国上市公司2001-2020年历史股票数据下载(获得方式见网页 http://yanzw.cn )

中国上市公司2001-2020年历史股票数据下载 中国上市公司2001-2020年历史股票数据下载中国上海交易所上市公司和深圳交易所上市公司股票数据历史数据详细信息下载方式(获得方式) 中国上市公司2001-2020年历史股票数据下载 中国上海交易所上市公司和深圳交易所上市公司股票数据 …

美股实时行情数据

美股实时行情数据 所有美股实时交易行情数据&#xff0c;美股实时数据&#xff0c;支持代码筛选。 1. 产品功能 支持所有美股实时交易数据查询&#xff08;国内数据延迟 15 分钟&#xff09;&#xff1b;包含美股实时交易多项指标数据&#xff1b;毫秒级查询性能&#xff1b;…

股票历史数据-股票历史行情数据下载

股票历史数据-股票历史行情数据下载 共享一个股票历史行情数据下载的工具&#xff0c;股票历史行情数据下载的是从股票成立到最近一天的所有历史数据&#xff0c;亲测手机就能下载股票历史行情数据、查询股票历史行情数据 亲测获取步骤&#xff1a; 下载需要两步&#xff08;…

股票交易日志7 12.22

总资产&#xff1a;196877.63 当日参考盈亏&#xff1a;91.00 买入卖出&#xff1a; 今天又买了两只股&#xff0c;都是今天看市场动向&#xff0c;汽车和科技类的&#xff0c;于是入手了两只我觉得目前股价被低估的股票&#xff0c;目前看起来确实&#xff01;入手之后就在小…

股票历史数据-A股所有股票历史数据下载

分享一个A股所有股票历史数据下载工具&#xff0c;可以在线下载A股所有股票历史数据&#xff0c;下载的是A股所有股票从成立到最近一天的所有股票历史数据&#xff0c;亲测手机在线就能下载A股所有股票历史数据 亲测获取步骤&#xff1a; 下载数据只需要两步&#xff08;查询只…

股票数据下载-下载股票历史数据

今天介绍最简单的股票数据下载方法&#xff0c;在线可以批量下载&#xff0c;目前A股、港股、美股所有个股的股票历史数据都能下载到&#xff0c;主要是免费… 下载只要两步&#xff1a; 填股票代码、邮箱收到数据Excel&#xff08;可以多个股票放在一个Excel文件&#xff0c…

股票历史数据下载-A股所有股票的历史数据下载

股票历史数据下载-A股所有股票的历史数据下载 分享一个沪深A股所有股票的历史数据下载的工具&#xff0c;下载股票历史数据是A股从成立到最近一天的所有历史数据&#xff0c;亲测手机就能下载A股所有股票的历史数据、港股、美股的历史数据也都有 亲测下载步骤&#xff1a; 下…

AI 教父离职谷歌 ,只为畅谈 AI 之危

整理 | 朱珂欣 出品 | CSDN程序人生&#xff08;ID&#xff1a;coder_life&#xff09; 5 月 1 日&#xff0c;据《纽约时报》和路透社等外媒报道&#xff0c;深度学习之父、图灵奖得主 Geoffrey Hinton 已于上周从谷歌离职&#xff0c;并就其长期推广的 AI 技术风险发出警告…

首批因 AI 失业的人出现

据时代财经 4 月 5 日消息&#xff0c;已经有一众游戏公司将 AI 绘画引进工作流程&#xff0c;用以摆脱游戏行业巨大的人才压力和资金焦虑&#xff0c;根据早前&#xff0c;心动网络创始人黄一孟透露的消息&#xff0c;已有游戏团队把原画外包团队给砍了。另有某游戏美术外包公…

介绍主密钥,传输秘钥,工作秘钥

近期在从事Pos应用的开发&#xff0c;由于之前未接触过相关开发&#xff0c;所以很多概念性的东西不是很明白&#xff0c;因此做下总结记录供以后查阅&#xff0c;参考了其他人的博客。链接在博客底部。 目前来说主要接触密钥的分别时&#xff1a;工作密钥 主密钥 传输密钥 1.工…

HashiCorp Vault 秘钥管理

官网地址&#xff1a; Vault | HashiCorp Developer 使用原因&#xff1a; facebook审计需要将用的accesstoken等秘钥使用vault秘钥管理工具进行管理 简介&#xff1a; 使用 UI、CLI 或 HTTP API 保护、存储和严格控制对令牌、密码、证书、用于保护机密的加密密钥和其他敏…

GPG使用方法总结(密钥管理,加解密文件)

文章目录 0、GnuPG 公用说明 1、生成密钥 2、密钥管理 3、加密和解密 4、签名 5、参考 6、公钥加密遇到的问题 gpg采用的是非对称加密方式&#xff0c;简单理解就是用公钥加密文件&#xff0c;用私钥解密文件。如果你需要发送加密信息&#xff0c;首先获取接收者的公钥&…

ChatGPT/GPT-4做知识图谱构建推理怎么样?浙大等最新《大语言模型在知识图谱构建与推理》论文,量化评估LLM在KG表现...

来源&#xff1a;专知 ChatGPT/GPT-4做知识图谱构建推理怎么样&#xff1f; 这篇论文对大型语言模型&#xff08;LLMs&#xff09;在知识图谱&#xff08;KG&#xff09;构建和推理中的作用进行了详尽的定量和定性评估。我们使用了八个不同的数据集&#xff0c;涵盖了实体、关系…

10倍速度开发贪吃蛇游戏之AI辅助

今天就来聊聊AI代码辅助神器&#xff0c;即便是零基础也能上手&#xff0c;因为实在是太强了&#xff0c;这以后叫程序员们怎么活啊&#xff01;话不多说&#xff0c;直接上神器 我用的是cursor,其实目前AI辅助代码不止cursor&#xff0c;还有微软家的copilot X这个根植于gith…

人工智能这么厉害,比如GPT-4,为什么没有看到程序员失业?

目录 一、一次理性的反思 看看网友基于GPT-4生成代码的测试案例&#xff1a; 二、人工智能与程序员相辅相成 三、无独有偶的低代码 1、提升开发价值 2、利于团队升级 四、最后 OpenAI发布了GPT-4&#xff0c;这个远超以往的任何人工智能的模型&#xff0c;在逻辑、推理、…

遇到panic异常,导致程序崩溃。

新上的项目&#xff0c;在运行一段时间后&#xff0c;会出现自动崩溃的情况。从日志没有看出任何错误&#xff08;使用logger包进行打印的日志&#xff09;。每次崩溃的前夕&#xff0c;程序一直在正确的运行&#xff08;崩溃&#xff09;。前几天程序又出错&#xff0c;恰巧调…

Android中Crash(闪退,崩溃)的一般问题与解决方案

Crash Exception 在Android 中经常会遇到&#xff0c;那么遇到异常我们该如何解决&#xff0c;本文将举例解决部分Android看法中遇到的异常。 NullPointerException 空指针ClassCastException 类型转换异常IndexOutOfBoundsException 下标越界异常ActivityNotFoundException Ac…