本文代码和文章发在FMZ发明者比特币量化交易平台上: 使用JavaScript实现量化策略并发执行--封装Go函数 - 发明者量化 https://www.fmz.com/digest-topic/3981 在实现量化策略时,很多情况下,并发执行可以降低延时提升效率.以对冲机器人为例,需要获取两个币的深度,顺序执行的代码如下: var depthA = exchanges[0].GetDepth() var depthB = exchanges[1].GetDepth() 请求一次rest AP…
在实现量化策略时,很多情况下,并发执行可以降低延时提升效率.以对冲机器人为例,需要获取两个币的深度,顺序执行的代码如下: 请求一次rest API存在延时,假设是100ms,那么两次获取深度的时间实际上不一样,如果需要更多的访问,延时问题将会更突出,影响策略的执行. JavaScript由于没有多线程,因此底层封装了Go函数解决这个问题,但由于设计机制,实现起来较为繁琐. 在大多数简单情况下,这样写策略并无问题.但注意到每次策略循环都要重复这个过程,中间变量a,b实际上只是临时辅助.如果我们的并…
1.动态平衡策略 按照当前的 BTC 的价值,账户余额保留¥5000 现金和 0.1个 BTC,即现金和BTC 市值的初始比例是 1:1. 如果 BTC 的价格上涨至¥6000,即 BTC 市值大于账户余额,并且其之间的差超过设定的阈值,就卖掉(6000-5000)/6000/2个币.说明 BTC 升值了,把钱兑换回来. 如果 BTC 的价格下跌至¥4000,即 BTC市值小于账户余额,并且其之间的差超过设定的阈值,就买入(5000-4000)/4000/2个币.说明 BTC 贬值了,把 BTC…
目录 1.Futrue 2.FutureTask 3.CompletionService 4.CompletableFuture 5.总结 ================正文分割线================= 开启线程执行任务,不管是使用Runnable(无返回值不支持上报异常)还是Callable(有返回值支持上报异常)接口,都可以轻松实现.那么如果是开启线程池并需要获取结果归集的情况下,如何实现,以及优劣,干货如下: 任务执行完,结果归集时,几种方式: 1.Futrue 原理: 如下…
在<浏览器环境下JavaScript脚本加载与执行探析之defer与async特性>中,我们研究了延迟脚本(defer)和异步脚本(async)的执行时机.浏览器支持情况.浏览器bug以及其他的细节问题.而除了defer和async特性,动态脚本和Ajax脚本注入也是两种常用的创建无阻塞脚本的方法.总的来看,这两种方法都能达到脚本加载不影响页面解析和渲染的作用,但是在不同的浏览器中,这两种技术所创建的脚本的执行时机还是有一定差异,今天我们再来探讨一下通过动态脚本技术和Ajax注入的脚本在这些方…
JavaScript 内存管理 & 垃圾回收机制 标记清除 js 中最常用的垃圾回收方式就是标记清除.当变量进入环境时,例如,在函数中声明一个变量,就将这个而变量标记为“进入环境”.从逻辑上讲,永远不能释放进入环境的变量所占用的内存,因为只要执行流进入相应的环境,就可能会用到它们.而当变量离开环境时,则将其标记为“离开环境”. 引用计数 这是最简单的垃圾收集算法.此算法把“对象是否不再需要”简化定义为“对象有没有其他对象引用它”.如果没有引用指向该对象(零引用),对象将被垃圾回收机制回收.Net…
原文链接:https://blog.csdn.net/taiyangdao/article/details/52159065 TestNG在执行测试时,默认suitethreadpoolsize=1,-randomizesuites=false,即非并发顺序执行测试. 但是TestNG提供了多种方式,以支持测试的并发多线程执行. 1. 针对多个测试规划的情况,为每个testng*.xml配置文件使用独立的线程执行 java org.testng.TestNG -suitethreadpoolsi…
引言 任务的执行 大多数并发应用程序都是围绕"任务执行(Task  Execution)"来构造的:任务通常是一些抽象的且离散的工作单元. 任务通常是一些抽象的且离散的工作单元.通过把应用程序的工作分解到多个任务中,可以简化程序的组织结构,提供一种自然的事务边界来优化错误恢复过程,以及提供一种自然的并行工作结构来提升并发性. 一.在线程中执行任务 当围绕"任务执行"来设计应用程序时,第一步是要找出清晰的任务边界. 在理想情况下,各个任务之间是相互独立的:任务不依赖其…
背景: 工作中有两个异地机房需要传数据,数据全名很规范,在某个目录下命名为统一的前缀加上编号.如/path/from/file.{1..100}.而机房间的专线对单个scp进程的传输速度是有限制的,比如最大在100Mb/s,如果直接启动100个scp,则又会遇到ssh的并发连接数限制. 所以需要控制并发数,即不超过ssh的并发限制,又要让单网卡上的带宽接近饱和,尽快完成传输(假设专线带宽远大于单机网卡带宽) 实现 之前知道通过mkfifo创建一个命名管道,可以实现对并发的控制.现在来实现一个.…
这一章节里面,我们会主要的针对JavaScript中的策略模式进行理解和学习 一.定义 策略模式: 定义一系列的算法,把他们封装起来,并且是他们可以相互替换. (这样的大的定义纲领,真的不好理解,特别是对于初学者来说) 那么我们就直接来看看代码 二.使用Javascript 中的一般方法来实现 根据每一位员工的年底业绩考核,来核算年终奖的需求. 1.我们还是来用我们最为熟悉的 JS 代码来实现这个功能 var calculateBonus = function(salary,perLevel){…