效果:从后台获取回测数据,在前端动态展现,和聚宽实现的回测效果相仿

大体思路:先传一个[[int,0],[int,0],[int,0],[int,0],[int,0],...]格式的死数据到前端渲染x轴,这样在我们动态加载数据的时候就不会出现x轴动态的变化的尴尬场面了,但是还有一个问题就是0轴上的数据也会显示到数据框,这个时候我们就需要设置一个属性 enableMouseTracking: false 这个属性我找了好长时间,所以一定要记住!

index.html代码

var chart = Highcharts.stockChart('container', {
rangeSelector: {
allButtonsEnabled: true
},
chart: {
animation: false,
showAxes: true
},
credits: { //版权信息配置
enabled: false
},
tooltip: { // 数据提示框配置
split: false,//把x轴和y轴放在一个图标里
xDateFormat: '%Y年%m月%d日,%A',//鼠标移动到趋势线上时显示的日期格式
shared: true,
pointFormatter: function () {
return '<span style="color: '+ this.series.color + '">\u25CF</span> '+ this.series.name+': <b>'+ (this.y*100).toFixed(3) + '%</b><br/>'
}
},
xAxis: {
crosshair: { // 十字准星线配置
width: 1,
color: "black"
},
type: 'datetime', // 时间轴
tickmarkPlacement:"on", // 点和x轴对齐
labels: {
formatter: function () {
return Highcharts.dateFormat("%Y-%m-%d", this.value);
}
},
minTickInterval: 24
},
yAxis: {
labels: {
formatter: function () {
return this.value*100+"%"; // y轴数据百分比
}
}
},
series: [{
name:'',
data:[],
color:"black",
enableMouseTracking: false //鼠标移动的时候0轴信息不显示
},{
name: '策略收益',
data:[],
color:"#058DC7"
}]
});
var ws;
var return_dic;
var i=0;
function run_py() {
ws = new WebSocket("ws://127.0.0.1:8888/run_py/");
var msg = {
py_name: $("#py_name").val(),
py_count: $("#py_count").val()
};
ws.onopen = function() {
ws.send(JSON.stringify(msg));
};
// 思路:第0个数据列渲染一个0轴,其余数据列通过addpoint动态渲染
ws.onmessage = function (evt) {
return_dic = JSON.parse(evt.data);
if ("date_false" in return_dic){
chart.series[0].setData(return_dic.date_false); // 先把0轴渲染出来
}else {
console.log(chart.series[0].data[i].x);
chart.series[1].addPoint([chart.series[0].data[i].x,return_dic.returns]); // 动态添加真实数据
i+=1;
}
};
}

  注意注意:一定是 (this.y*100).toFixed(3)而不是this.y.toFixed(5)*100,不然页面会有bug,踩过坑的人都懂

后端代码

class EchoWebSocket(tornado.websocket.WebSocketHandler):
def open(self):
print("WebSocket opened") def on_message(self, message): #主逻辑在这里写的,注意不要忘了发完数据关闭close掉连接,如果要求一直连着那就没必要关了
self.write_message(u"You said: " + message) def on_close(self):
print("WebSocket closed")

highstaock+websocket实现动态展现的更多相关文章

  1. highstock+websocket实现动态展现

    效果:从后台获取回测数据,在前端动态展现,和聚宽实现的回测效果相仿 大体思路:先传一个[[int,0],[int,0],[int,0],[int,0],[int,0],...]格式的死数据到前端渲染x ...

  2. Python动态展现之一

    首先: def f(): print('first') def g(): f() g() def f(): print('second') g() 结果: >>> first sec ...

  3. web端百度地图API实现实时轨迹动态展现

    最近在工作中遇到了一个百度地图api中的难题,恐怕有的程序员可能也遇到过.就是实时定位并显示轨迹,网上大部分都是通过创建polyline对象贴到地图上.当然,百度地图的画线就是这样实现的,但是好多人会 ...

  4. iOS开发笔记-根据frame大小动态调整fontSize的自适应文本及圆形进度条控件的实现

    最近同样是新App,设计稿里出现一种圆形进度条的设计,如下: 想了想,圆形进度条实现起来不难,但是其中显示百分比的文本确需要自适应,虽然可以使用时自己设定文本字体的大小,但是这样显得很麻烦,也很low ...

  5. 数据可视化之powerBI技巧(十八)Power BI动态技巧:动态显示列和度量值

    今天分享一个可视化小技巧,如何在PowerBI的表格中动态显示需要的列? 就是这样的效果, 也就是根据切片器的筛选,来显示需要的列,做起来很简单,步骤如下: 01 逆透视表 进入Powerquery编 ...

  6. FK JavaScript之:ArcGIS JavaScript API之地图动画

    地图要素动画应用场景:动态显示地图上的要素的属性随着时间的改变而改变,并根据其属性的变化设置其渲染.比如:某水域项目中,随着时间的变化,动态展现水域的清淤进度 本文目的:对ArcGIS JavaScr ...

  7. 【读书笔记《Android游戏编程之从零开始》】11.游戏开发基础(SurfaceView 游戏框架、View 和 SurfaceView 的区别)

    1. SurfaceView 游戏框架实例 实例效果:就是屏幕上的文本跟着点击的地方移动,效果图如下: 步骤: 新建项目“GameSurfaceView”,首先自定义一个类"MySurfac ...

  8. ZK框架的分析与应用

    前言:本文是在下的在学习ZK官方文档时整理出来的初稿.本来里面有很多的效果图片和图片代码的.奈何博客园中图片不能粘贴上去,所以感兴趣的筒子们就将就吧.内容中,如有不好的地方,欢迎斧正! ZK框架的分析 ...

  9. Android自定义窗口动画

    第一步,设置出现和消失的xml 1.在res/anim下创建enter_anim.xml,设置窗口出现的动画 <?xml version="1.0" encoding=&qu ...

随机推荐

  1. K-Means 聚类

    机器学习中的算法主要分为两类,一类是监督学习,监督学习顾名思义就是在学习的过程中有人监督,即对于每一个训练样本,有对应的标记指明它的类型.如识别算法的训练集中猫的图片,在训练之前会人工打上标签,告诉电 ...

  2. [SDOI2010] 魔法猪学院

    Description 给定e和边权,求有多少条不同的道路能从1到n使得边权之和的和小于e Solution A*裸题 娘的要是SPFA再把dis写成to就剁手 // By YoungNeal #in ...

  3. Java TimSort算法 源码 笔记

    本来准备看Java容器源码的.但是看到一开始发现Arrays这个类我不是很熟,就顺便把Arrays这个类给看了.Arrays类没有什么架构与难点,但Arrays涉及到的两个排序算法似乎很有意思.那顺便 ...

  4. 【Python】 hash值计算 hashlib & hmac

    hashlib & hmac *不是很清楚能不能把这种hash值取样算法称之为加密,但是似乎好像也是这么说的哈(非科班出身的野路子就是没这种基本知识的) ■ 基本用法 hashlib支持MD5 ...

  5. Jenkins + Docker 持续集成

    Jenkins介绍 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能. 安装部署Jenkins ...

  6. Python3 的描述符--完整例子详细解释

    ##描述符类的例子,这个例子说明了描述符和被描述符之间的关系 ##摄氏温度 class Celsius(): ## 1 描述符类 def __init__(self,value = 26.0): ## ...

  7. 小程序之Tab切换(二)

    之前写的那个Tab切换是常规逻辑写的,接下来我会列出小程序api自带的写法,当然了 这个写法更加简单,实用.我们只需要配置app.json这个文件即可. 先看效果图: app.json代码:(有木有感 ...

  8. strcat函数

    原型:char  *strcat  ( char  *dest, const  char  *src) 用法:#include  <string.h> 功能:连接两个字符串:strcat( ...

  9. Linux x86_64内核中断初始化

    Linux x86_64内核中断初始化 [TOC] 中断分类 Linux系统中,中断分为: 硬中断:由外部设备或者执行异常产生的需要快速处理的中断.如缺页中断.定时器硬件中断. 根据内部产生还是外部产 ...

  10. iOS开发-OC分支结构

     BOOL类型 返回值:真:YES  假:NO BOOL数据类型占一个字节的内存空间,占位符为%d. 计算机在识别时,YES就替换成1,NO就替换成0. bool是C语言中的布尔类型,返回值为true ...