Code Monkey home page Code Monkey logo

jones2000 / hqchart Goto Github PK

View Code? Open in Web Editor NEW
2.8K 73.0 710.0 441.56 MB

HQChart - H5, 微信小程序 沪深/港股/数字货币/期货/美股 K线图(kline),走势图,缩放,拖拽,十字光标,画图工具,截图,筹码图. 分析家语法,通达信语法,(麦语法),第3方数据替换接口

Home Page: https://jones2000.github.io/HQChart/webhqchart.demo/samples/kline_index_edit.html

License: Apache License 2.0

JavaScript 95.39% CSS 0.40% HTML 1.70% Makefile 0.01% Batchfile 0.01% Vue 1.66% Python 0.78% Dockerfile 0.01% C# 0.02% C 0.01% C++ 0.03%
candlestick-chart china-stock trading-view stock chart canvas javascript html5 h5 wechat

hqchart's Introduction

jones github stats

hqchart's People

Contributors

ashghost avatar dependabot[bot] avatar jones2000 avatar li-yiang avatar shaojunmei0102 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hqchart's Issues

web端不支持强制横屏模式的问题

我想知道既然web端不支持强制横屏模式, dom元素可以通过css3的translate方式旋转90度达到切换横屏效果, hqChart到底是什么方式实现canvas横屏模式的呢? 自己使用原生canvas实现过简单的k线绘制

分时图如何标点

大大有一个问题,就是使用分时图,怎么对买入的点进行标注,比如买涨的时候是红点,买跌的时候是绿点,然后又如何定时清除这些点

多图同列时,附图指标的控制错乱

在多图同列状态下,附图指标的关闭按钮只会显示到第一个图,点击关闭按钮时则从最后一个开始依次关闭。另外,无论在哪个子窗口移动光标,价格提示框都只会在第一个图显示。
WX20200316-084927

还没研究您的源代码,只是修改了下您的测试页面 webhqchart.demo/demo/bit_demo.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>币K线图</title>  
    <!-- 加载资源 -->
    <link rel="stylesheet" href="content/css/tools.css" />
    <link rel="stylesheet" href="../jscommon/umychart.resource/font/iconfont.css" />

    <script src="content/js/jquery.min.js"></script>
    <script src="content/js/webfont.js"></script>
    <script src="../jscommon/umychart.network.js"></script>
    <script src="../jscommon/umychart.js"></script>             <!-- K线图形 -->
    <script src="../jscommon/umychart.complier.js"></script>    <!-- 麦语言解析执行器 -->
    <script src="../jscommon/umychart.index.data.js"></script>  <!-- 基础指标库 -->
    <script src="../jscommon/umychart.style.js"></script>       <!-- 白色风格和黑色风格配置信息 -->

    <script src='bit_demo_testdata.js'></script> <!--测试数据 分钟线全量数据 -->
    <script src='bit_demo_testdata2.js'></script> <!--测试数据 分钟线增量数据 -->

    <script src='bit_demo_testdata3.js'></script> <!--测试数据 日线全量数据 -->
    <script src='bit_demo_testdata4.js'></script> <!--测试数据 日线增量数据 -->
    <style>
        body{
            width:100%;
            height:100%;
            overflow:hidden;
        }
        .chart{display: inline-block;float:left;}
    </style>
</head>
<body>
    <div id="kline" class="chart"></div>
    <div id="kline1" class="chart"></div>
    <div id="kline2" class="chart"></div>
    <div id="kline3" class="chart"></div>

    
    <script>

        //简单的把K线控件封装下
        function KLineChart(divKLine)
        {
            this.DivKLine=divKLine;
            this.Chart=JSChart.Init(divKLine);   //把K线图绑定到一个Div上
            var self=this;
            //K线配置信息
            this.Option= {
                Type:'历史K线图',   //创建图形类型
                
                Windows: //窗口指标
                [
                    {Index:"MA", Modify:true,Change:true},
                    {Index:"RSI", Modify:true,Change:true}, 
                ], 

                
                Symbol:'BTCUSDT.BIT',
                //Symbol:'600000.sh',
                IsAutoUpdate:true,          //是自动更新数据
                AutoUpdateFrequency:5000,   //数据更新频率
    
                IsShowRightMenu:true,          //右键菜单
                IsShowCorssCursorInfo:true,    //是否显示十字光标的刻度信息
                //CorssCursorTouchEnd:true,
    
                KLine:  //K线设置
                {
                    DragMode:1,                 //拖拽模式 0 禁止拖拽 1 数据拖拽 2 区间选择
                    Right:0,                    //复权 0 不复权 1 前复权 2 后复权
                    Period:0,                   //周期 0 日线 1 周线 2 月线 3 年线 
                    MaxReqeustDataCount:1000,   //数据个数
                    MaxRequestMinuteDayCount:10, //分钟数据取5天
                    PageSize:50,               //一屏显示多少数据
                    //Info:["互动易","大宗交易",'龙虎榜',"调研","业绩预告","公告"],       //信息地雷
                    IsShowTooltip:true,                 //是否显示K线提示信息
                },
    
                KLineTitle: //标题设置
                {
                    IsShowName:true,       //不显示股票名称
                    IsShowSettingInfo:true //不显示周期/复权
                },

                NetworkFilter:function(data, callback) { self.NetworkFilter(data, callback); } ,   //绑定网络协议回调
    
                Border: //边框
                {
                    Left:5,         //左边间距
                    Right:70,       //右边间距
                    Bottom:25,      //底部间距
                    Top:25          //顶部间距
                },
                
                Frame:  //子框架设置
                [
                    {SplitCount:3,StringFormat:0, IsShowLeftText:false},
                    {SplitCount:2,StringFormat:0, IsShowLeftText:false},
                    {SplitCount:2,StringFormat:0, IsShowLeftText:false}
                ],

                ExtendChart:    //扩展图形
                [
                    //{Name:'KLineTooltip' }  //手机端tooltip
                ],
            };
                 
            this.Create=function()  //创建图形
            {
                var self=this;
                $(window).resize(function() { self.OnSize(); });    //绑定窗口大小变化事件

                //var blackStyle=HQChartStyle.GetStyleConfig(STYLE_TYPE_ID.BLACK_ID); //读取黑色风格配置
                //JSChart.SetStyle(blackStyle);
                //this.DivKLine.style.backgroundColor=blackStyle.BGColor; //设置最外面的div背景

                //this.OnSize();  //让K线全屏
                this.Chart.SetOption(this.Option);  //设置K线配置
            }


            this.OnSize=function()  //自适应大小调整
            {
                // var height= $(window).height();
                // var width = $(window).width();
                // this.DivKLine.style.top='px';
                // this.DivKLine.style.left='px';
                // this.DivKLine.style.width=width+'px';
                // this.DivKLine.style.height=height+'px';
                this.Chart.OnSize();
            }

            this.NetworkFilter=function(data, callback)
            {
                console.log('[NetworkFilter] data', data);
                switch(data.Name)
                {
                    case 'KLineChartContainer::ReqeustHistoryMinuteData':   //1分钟全量数据下载
                        this.RequestHistoryMinuteData(data, callback);
                        break;
                    case 'KLineChartContainer::RequestMinuteRealtimeData':  //1分钟增量数据更新
                        this.RequestMinuteRealtimeData(data,callback);
                        break;
                    case 'KLineChartContainer::RequestHistoryData':     //日线全量数据下载
                        this.RequestHistoryData(data,callback);
                        break;
                    case 'KLineChartContainer::RequestRealtimeData':    //日线增量数据更新
                        this.RequestRealtimeData(data,callback);
                        break;
                }
            }

            this.RequestHistoryMinuteData=function(data, callback)
            {
                data.PreventDefault=true;
                var self=this;
                var symbol=data.Request.Data.symbol;

                setTimeout(() => {
                    self.RecvHistoryMinuteData(BIT_TEST_DATA,callback); 
                }, 200);
               
            }

            this.RecvHistoryMinuteData=function(data, callback)
            {
                var hqChartData={code:0, data:[]};
                hqChartData.symbol='BTCUSDT.BIT';
                hqChartData.name='BTCUSDT';

                var yClose=null;
                for(var i=data.data.length-1; i>=0; --i)
                {
                    var item=data.data[i];
                    var timestamp = item.id;
                    var dateTime = new Date();
                    dateTime.setTime(timestamp * 1000);

                    var date=dateTime.getFullYear()*10000+(dateTime.getMonth()+1)*100+dateTime.getDate();
                    var time=dateTime.getHours()*100+dateTime.getMinutes();
                    var newItem=[date,yClose, item.open, item.high, item.low, item.close, item.vol, item.amount, time];

                    yClose=item.close;
                    hqChartData.data.push(newItem);
                }

                callback(hqChartData);
            }

            this.RequestMinuteRealtimeData=function(data,callback)
            {
                data.PreventDefault=true;
                var self=this;
                var symbol=data.Request.Data.symbol;

                setTimeout(() => {
                    self.RecvMinuteRealtimeData(BIT_TEST_DATA2,callback); 
                }, 200);
            }

            this.RecvMinuteRealtimeData=function(data,callback)
            {
                var hqChartData={code:0, data:[], ver:2.0 };
                hqChartData.symbol='BTCUSDT.BIT';
                hqChartData.name='BTCUSDT';

                var yClose=null;
                for(var i=data.data.length-1; i>=0; --i)
                {
                    var item=data.data[i];
                    var timestamp = item.id;
                    var dateTime = new Date();
                    dateTime.setTime(timestamp * 1000);

                    var date=dateTime.getFullYear()*10000+(dateTime.getMonth()+1)*100+dateTime.getDate();
                    var time=dateTime.getHours()*100+dateTime.getMinutes();
                    var newItem=[date,yClose, item.open, item.high, item.low, item.close, item.vol, item.amount, time];

                    yClose=item.close;
                    hqChartData.data.push(newItem);
                }

                callback(hqChartData);
            }

            this.RequestHistoryData=function(data,callback)
            {
                data.PreventDefault=true;
                var self=this;
                var symbol=data.Request.Data.symbol;

                setTimeout(() => {
                    self.RecvHistoryData(BIT_TEST_DATA3,callback); 
                }, 200);
            }

            this.RecvHistoryData=function(data,callback)
            {
                var hqChartData={code:0, data:[]};
                hqChartData.symbol='BTCUSDT.BIT';
                hqChartData.name='BTCUSDT';

                var yClose=null;
                for(var i=data.data.length-1; i>=0; --i)
                {
                    var item=data.data[i];
                    var timestamp = item.id;
                    var dateTime = new Date();
                    dateTime.setTime(timestamp * 1000);

                    var date=dateTime.getFullYear()*10000+(dateTime.getMonth()+1)*100+dateTime.getDate();
                    var time=dateTime.getHours()*100+dateTime.getMinutes();
                    var newItem=[date,yClose, item.open, item.high, item.low, item.close, item.vol, item.amount];

                    yClose=item.close;
                    hqChartData.data.push(newItem);
                }

                callback(hqChartData);
            }

            this.RequestRealtimeData=function(data,callback)
            {
                data.PreventDefault=true;
                var self=this;
                var symbol=data.Request.Data.symbol;

                setTimeout(() => {
                    self.RecvRealtimeData(BIT_TEST_DATA4,callback); 
                }, 200);
            }

            this.RecvRealtimeData=function(data,callback)
            {
                var stock={symbol:'BTCUSDT.BIT', name:'BTCUSDT'};
                var hqChartData={code:0, stock:[stock]};

                var item=data.data[0];   //取最新的一条更新
                var timestamp = item.id;
                var dateTime = new Date();
                dateTime.setTime(timestamp * 1000);

                var date=dateTime.getFullYear()*10000+(dateTime.getMonth()+1)*100+dateTime.getDate();
                var time=dateTime.getHours()*100+dateTime.getMinutes();

                stock.date=date;
                stock.open=item.open;
                stock.high=item.high;
                stock.low=item.low;
                stock.vol=item.vol;
                stock.price=item.close;
                stock.amount=item.amount;
                //stock.yclose; 最好前收盘也要

                callback(hqChartData);
            }
        }

        $(function () 
        {
            WebFont.load({ custom: { families: ['iconfont'] } });   //预加载下iconfont资源

            var ww = $(window).width()/2, wh = $(window).height()/2, klineControl={};
            $('.chart').width(ww).height(wh);
            $('.chart').each(function(i,n){
                var id = $(this).attr('id');
                klineControl[id] = new KLineChart(document.getElementById(id));
                klineControl[id].Create();
            });
            $(window).resize(function(){
                var ww = $(window).width()/2, wh = $(window).height()/2;
                $('.chart').width(ww).height(wh);
            });
            // var klineControl=new KLineChart(document.getElementById('kline'));
            // klineControl.Create();
            // var klineControl1=new KLineChart(document.getElementById('kline1'));
            // klineControl1.Create();
        })

    </script>  
</body>  
</html>

订单流测试数据

demo_orderflow 是否可以考虑将 [ 订单流测试数据 ] 抽离到localdata中呢?这样对于一些并不擅长前端的同学可以更友好?

分析家周期统计类的函数增加支持周期数组

目前好多周期类统计的函数只支持单数值周期,不支持数组周期,
如MA(data,n) n是周期。
n分2种数值类型

  1. 一个单数值如10,
  2. n也可以是一个数组, 如[10, 5 ,6 ......] 统计不同周期数据

开一个坑,逐步对这些函数支持周期数组 (c++, js , py 这3个版本统一增加)

react 下使用问题

Hi,
我参考react 下的demo ,代码如下

import React from "react";
import HQChart from "hqchart";

class KLine extends React.Component {
  constructor(props) {
    //构造函数
    super(props);
    this.initCanvas = this.initCanvas.bind(this);
    this.state = {
      Symbol: "600000.sh",
      KLine: {
        JSChart: null,
        Option: {
          Symbol: "",
          Type: "历史K线图",

          //窗口指标
......

编译的时候,出现下面的错误

ERROR in ../node_modules/hqchart/src/jscommon/umychart.vue/umychart.stock.vue.js
Module not found: Error: Can't resolve 'jquery' in 'C:\clarkwu\stock_app\node_modules\hqchart\src\jscommon\umychart.vue'
 @ ../node_modules/hqchart/src/jscommon/umychart.vue/umychart.stock.vue.js 1274:8-9 1298:12-13 1809:8-9 1853:8-9 1898:8-9 1943:9-10 1988:8-9 2032:8-9 2058:8-9 2144:8-9 2206:8-9 2231:8-9 2259:8-9 2286:8-9 2825:8-9 2946:8-9 3007:8-9 3164:8-9 3238:8-9 3313:8-9 3367:8-9 3580:8-9 3662:8-9 3770:4-5 3841:0-22
 @ ../node_modules/hqchart/index.js
 @ ./src/components/KLine/index.js
 @ ./src/main.js

我看代码/node_modules/hqchart/index.js

//行情图形库
module.exports.Chart = require('./src/jscommon/umychart.vue/umychart.vue.js').default;

//行情股票数据接口类
module.exports.Stock = require('./src/jscommon/umychart.vue/umychart.stock.vue.js').default;

我看是vue的代码,问一下react下使用,正确的方式是什么?

视图放大

使用自己的接口,调用this.KLine.JSChart.JSChartContainer.RecvMinuteHistoryData(hqChartData);进行传入数据。但是数据传入之后视图没有调用
image,没有调用成功放大操作

index.js 和 vendor.js 文件太大了。能不能优化下?

Time: 3482ms
Asset Size Chunks Chunk Names
535877f50039c0cb49a6196a5b7517cd.woff 28.2 kB [emitted]
732389ded34cb9c52dd88271f1345af9.ttf 56 kB [emitted]
index.js 8.56 MB 0 [emitted] [big] index
vendor.js 6.3 MB 1 [emitted] [big] vendor
index.html 2.48 kB [emitted]

vue方式,本地建立服务器,首次请求需要1分钟才能刷新。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.