(转)基于FPGA技术的FAST行情解码研究

2023-11-17

http://mp.weixin.qq.com/s/BviH6gAqej6lHd9XxFKUfg

【交易技术前沿】基于FPGA技术的FAST行情解码研究 / 钟浪辉,陈敏,陈坚,刘啸林,秦轶轩,李道双

2017-09-08 上交所技术服务

本文选自《交易技术前沿》第二十七期 (2017年6月)。
钟浪辉1,陈敏1,陈坚1,刘啸林1,秦轶轩2,李道双2,
1上交所技术有限责任公司
2南京艾科朗克信息科技有限公司
E-mail :lhzhong@sse.com.cn

1、FAST行情与解码技术
2015年上海证券交易所正式启用了FAST行情。目前FAST行情的基本情况为:
这里写图片描述
FAST行情最大的优势在于行情时延降低和发布频率提高,理论上时延低于10毫秒。与此同时,行情的快速解析至关重要,因为行情快速解析直接影响到了资管产品的盈亏,是资管产品盈亏的首要因素。目前,上海证券交易所对行情的法定解析依靠EzSR软件,它依托主流通用操作系统、通用处理器(CPU)、主流通用网卡等,存在通用计算机无法逾越的性能瓶颈。
为了提高解析行情的速度,我们需要更专业的解决方案,考虑到证券行业相比其它行业具有日新月异的特色,新的解决方案必须能够快速更新,适应不断变化的业务需求。
2、新的解决方案面临的备选技术
专用芯片(ASIC)具备最快的运行速度和极高的可靠性,但是自定制此类专用芯片需要大量的初期投资、漫长的设计与制造过程,巨大的非经常性工程(NRE)费用,最主要的是一旦固化并生产出来就不能再变更,一般情况下需要大规模生产来降低单价成本。
GPU(Graphic Processing Unit)是一种专门运行绘图运算工作的处理器,其并不能完全替代CPU,但是可以减少显卡对CPU的依赖,加快绘图运算工作,尤其是在进行三维绘图运算时,功效更加明显。后来人们发现GPU的并行运算原理其实可以被推广到一般的运算当中,于是GPGPU(General Purpose GPU)的概念出现了,它开始运用OpenGL的shading language让GPU来执行一些简单的一般运算,因流水线深度受限,流式计算并不合适。
FPGA (Field Programmable Gate Array) 是一种硬件可重构的体系结构,通过对其自身内部电路进行重新连接(硬件编程)来实现用户想要的功能。FPGA具备硬件运行速度与可靠性,同时具有软件的灵活性,但却没有通用处理器数量的限制,而且不同于通用处理器的串行处理特性,它有真正的并行处理能力,每个处理单元相互独立。FPGA是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物,常被用作ASIC专用芯片的小批量替代品,除在通信、军工、工业控制等传统领域外,近年来被大规模部署在微软、百度等公司的数据中心、人工智能等领域,甚至在欧美的金融领域广泛应用。
3、各类技术的比较
ASIC 专用芯片在吞吐量、延迟和功耗三方面都无可指摘,但ASIC 研发成本高、周期长,不适合灵活多变的证券业务。
CPU、GPU与FPGA的比较如下:

这里写图片描述

这里写图片描述

相比CPU以及GPU,FPGA更适合计算密集型任务。FPGA同时拥有流水线并行和数据并行,而GPU只有数据并行。
例如处理一个数据包有10个步骤,FPGA 可以搭建一个10级流水线,流水线的不同级在处理不同的数据包,每个数据包流经10级之后处理完成。每处理完成一个数据包,就能马上输出。而GPU的数据并行方法是做10个计算单元,每个计算单元也在处理不同的数据包,然而所有的计算单元必须按照统一的步调,做相同的事情。这就要求10个数据包必须一起输入、一起输出,输入输出的延迟增加了。GPU在上百甚至几千个内核满负荷计算时拥有无与伦比的计算性能,但是行情解码处理这类负荷并不能让它表现出高性能。
对通信密集型任务,FPGA 上的收发器可以直接接上40 Gbps甚至100 Gbps的网线,以线速处理任意大小的数据包。而CPU 需要从网卡把数据包收上来才能处理。虽然GPU也可以高性能处理数据包,但GPU是没有网口的,意味着需要首先把数据包由网卡收上来,再让GPU去做处理,这样吞吐量受到CPU和网卡的限制。
综上, FPGA 的主要优势是稳定又极低的延迟,适用于流式的计算密集型任务和通信密集型任务,例如行情解码、资管产品事前、事中的风险控制。不管通信还是机器学习、加密解密,算法都是很复杂的,如果试图用FPGA完全取代CPU,势必会带来 FPGA 逻辑资源极大的浪费,也会提高FPGA程序的开发成本。更实用的做法是FPGA和CPU协同工作,局部性和重复性强的归FPGA,复杂的归CPU。

4、FPGA主要设计流程

FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。目前在全球市场中,Xilinx、Intel两大公司对FPGA的技术与市场仍然占据绝对垄断地位。FPGA设计的主要流程如图1所示。
图1 FPGA设计流程
这里写图片描述
4.1电路设计与输入
电路设计与输入是指通过某些规范的描述方式,将工程师电路构思输入给EDA工具。常用的设计方法有硬件描述语言(HDL)和原理图设计输入方法等。原理图设计输入法在早期应用得比较广泛,它根据设计要求,选用器件、绘制原理图、完成输入过程。这种方法的有点是直观、便于理解、元器件库资源丰富。但是在大型设计中,这种方法的可维护性较差,不利于模块构造与重用。
目前进行大型工程设计时,最常用的设计方法是HDL设计输入法,其中影响最为广泛的HDL语言是VHDL和Verilog HDL。他们的共同特点是利用由顶向下设计,利于模块的划分与复用,可移植性好,通用性好,设计不因芯片的工艺与结构不同而变化,更利于向ASIC的移植。
图2是所需要设计的四位同步计数器,图3是此电路设计的硬件描述语言。工程师通过硬件描述语言(图3所表示的Verilog代码),向EDA工具说明自己的电路构思(图2所表示的四位同步计数器),从而通过EDA工具,得到最终自己想要的电路。

这里写图片描述

2 四位同步计数器
 `timescale 1ns/100ps
 // 模块端口定义
 module Counter (
 //声明输入信号
   input        CLK,
   input        RST_N,
 //声明输出信号
   output [3:0] CNT
 );
 //声明内部信号
 reg [3:0] cnt;
 assign CNT = cnt;
 //功能定义
 always@(posedge CLK, negedge RST_N) begin
   if (!RST_N) 
 //若复位,输出为0
     cnt <= #5 4'h0;
   else
 //输出加1
     cnt <= #5 cnt + 1'b1;  
 end

 endmodule

图3 四位同步计数器Verilog代码

4.2功能仿真
功能仿真也称为前仿真,主旨在于验证电路的功能是否符合设计要求,其特点是不考虑电路门延迟与线延迟,主要是验证电路与理想情况是否一致。可综合FPGA代码是用RTL级代码语言描述的,其输入为RTL级代码与测试程序(Testbench)。图4为四位同步计数器Testbench的原理图, 图5为四位同步计数器Testbench代码,图6为用Modelsim得到的仿真波形。

这里写图片描述

图4 四位同步计数器Testbench

 `timescale 1ns/100ps  
 module Counter_tb;
 // 声明内部信号
 reg        clk;
 reg        rst_n;
 wire [3:0] cnt;
 // 声明时钟常熟
 parameter PERIOD = 20; 
 Counter counter (
   .CLK(clk),
   .RST_N(rst_n),
   .CNT(cnt)
 );
 // 提供激励信号
 initial begin
   #0 clk   = 1'b0;
      rst_n = 1'b0;
   #5 rst_n = 1'b1;
 end

 // 产生仿真所需时钟信号50MHz
 always #(PERIOD/2) clk = ~clk;

 endmodule

图5 四位同步计数器Testbench代码
这里写图片描述
图6 四位同步计数器仿真波形

4.3综合优化
综合优化(Synthesize)是指将HDL语言、原理图等设计输入翻译成由与、或、非门,RAM,触发器等基本逻辑单元组成的逻辑连接(网表),并根据目标与要求(约束条件)优化所生成的逻辑连接,输出edf和edn等标准格式的网表文件,供FPGA/CPLD厂家的布局布线器进行实现。
4.4综合后仿真
综合完成后需要检查综合结果是否与设计一致,做综合后仿真。在仿真时,把综合生成的标准延时文件反标志到综合仿真模型中去,可估计门延时带来的影响。综合后仿真虽然比功能仿真精确一些,但是只能估计门延时,不能估计线延时,仿真结果与布线后的实际情况还有一定的差距,并不十分准确。这种仿真的主要目的在于检查综合器的综合结果是否与设计输入一致。目前主流综合工具日益成熟,对于一般性的设计,如果设计者确信自己标注明确,没有综合歧义发生,则可省略该步骤。但是如果在布局布线后仿真时发现有电路结构与设计意图不符的现象,则常常需要回溯到综合后仿真以确认是否时由于综合歧义造成的问题。
图7 在QuartusII中对计数器进行综合
这里写图片描述

图8 在综合后RTL Viewer中的计数器
4.5实现与布局布线
综合结果的本质是一些由与、或、非门,触发器,RAM等基本逻辑单元组成的逻辑网表,它与芯片的实际的配置情况还有较大的差距。此时应该使用FPGA/CPLD厂商提供的软件工具,根据所选芯片的型号将综合输出的网表适配到具体FPGA/CPLD器件上,这个过程就叫做实现过程。因为只有器件的开发商最了解器件的内部结构,所以实现步骤必须选用器件开发商提供的工具。一般根据设计的主要矛盾,选择面积或者速度或者是两者平衡等优化目标,但是当两者冲突时,一般满足时序约束要求更重要一些,此时选择速度或时序优化目标更佳。
这里写图片描述
图9 计数器设计的资源占用情况
这里写图片描述
图10 计数器设计的资源占用率
4.6时序仿真
将布局布线的延时信息反标注到设计网表中,所进行的仿真就叫时序仿真或布局布线后仿真,也叫后仿真。该仿真的仿真延时文件包含的延时信息最全,不仅包含了门延时,还包含了实际布线延时,所以布局布线后仿真最准确,能够较好的反映芯片的实际工作情况。一般来说,布线后仿真步骤必须进行,通过布局布线后仿真能检查设计时序与FPGA实际运行情况是否一致,确保设计的可靠性和稳定性。
这里写图片描述
图11 计数器设计的时序报告
4.7调试加载配置
设计开发的最后步骤就是在线调试或者将生成的配置文件写入芯片中进行测试。示波器和逻辑分析仪是逻辑设计的主要调试工具。传统的逻辑功能板级验证手段是用逻辑分析仪分析信号,设计时要求FPGA和PCB设计人员保留一定数量FPGA管脚作为测试管脚,编写FPGA代码时将需要观测的信号作为模块的输出信号,在综合实现时在把这些输出信号锁定到测试管脚上,然后连接逻辑分析仪的探头到这些测试管脚,设定触发条件,进行观测。
任何仿真或验证步骤出现问题,就需要根据错误定位返回到相应的步骤更改或者重新设计逻辑设计的主要调试工具。传统的逻辑功能板级验证手段是用逻辑分析仪分析信号,设计时要求FPGA和PCB设计人员保留一定数量FPGA管脚作为测试管脚,编写FPGA代码时将需要观测的信号作为模块的输出信号,在综合实现时在把这些输出信号锁定到测试管脚上,然后连接逻辑分析仪的探头到这些测试管脚,设定触发条件,进行观测。
4.8FPGA设计与软件设计的区别
FPGA设计与传统软件编程最大的区别在于前者是在设计硬件,是在组合那些晶体管的连接来完成设计;后者如C语言,是在设计程序,是用已经组合好的晶体管,来指挥这些已经连接好的晶体管完成一定的动作。FPGA工程师在写代码时,都会清楚的了解,最终代码所综合出的是怎样的硬件逻辑,就如同名称那样,硬件描述语言是用来描述硬件行为与逻辑的。而软件工程师通过编写指令控制处理器顺序执行任务,主要关心逻辑和抽象,关心代码量大了之后复杂度可控,不需要针对特定资源设计。
图12所示范的,是一段经典的软件程序,其作用是用来累加n个整数。对于任何一个单口单入程序都能用顺序,分支和循环3种结构实现。

Func sum(int n)  
{  
    If (n<1) return -1;  
    If (n>1000) return -1;  
    i=0;    total=0;  
    for (;i<n;i++)  
    {  
      total+=i  
    }  
    return total;  
}  

图12 n个整数累加软件程序
在FPGA设计时所用的硬件描述语言,此处以Verilog为例,也有类似的语义特性。
4.8.1 Verilog 的顺序结构
Verilog作为硬件描述语言,其描述的主要模块之间都是并行执行的。这和软件编程基于冯诺依曼结构,编写指令对处理器做顺序操作有着本质的区别。因此,Verilog从代码本身并不具备强烈顺序性,即按照代码的先后顺序而执行。但这并不意味着Verilog不能用来描述顺序结构,为了描述顺序逻辑,FPGA设计师经常使用有限状态机(Finite State Machine)这一模型。
有限状态机,又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。图12是状态机跳转图,State表示状态,Transition表示进行状态跳转的条件。
这里写图片描述
图13 有限状态机跳转图
在用Verilog实现有限状态机时,一般采用三段式block来描述状态机的三个组成部分,状态存储器(state register)、下一状态逻辑(next state logic)、和输出逻辑(output logic)。

//状态存储器
always @(posedge clk or negedge rst_n) begin  
   if(~rst_n) curr_state <= START;
   else curr_state <= next_state;   
end  

//下一状态逻辑
always @(*) begin  
   case(curr_state)  
      START : if(Transition1) 
                next_state=STATE1;
              else
                next_state=START;
      STATE1 : if(Transition2) 
                next_state=STATE1;
               else if(Transition4)
                next_state=STATEN;
      ……
   endcase 
end 

//输出逻辑
always @(*) begin  
   case(curr_state)  
      START : out = 2b‘00;
      STATE1 : out = 2b‘01;
      ……
   endcase 
end 

图14 三段式Verilog有限状态机
4.8.2 Verilog 的条件分支结构
在Verilog中有以下两种可综合的条件结构,if语句与case语句。if语句只有两个分支可供选择,case语句是一种多分支选择语句。

if(select)  
    out <= in;  
else  
    out <= ~in;  

case(select)  
    2’b00 : out <= a; 
    2’b01 : out <= b;    
    2’b10 : out <= c;  
    2’b11 : out <= d;  
endcase  

图15 Verilog条件分支语句
Verilog的if语句与case语句,相对应与C语言中的if与switch case语句,从逻辑语义角度看是相同的。但有一点不同的是,Verilog 的case语句在第一个相匹配的case item被执行后就会终止后面case item语句的执行,不需要像C语言那样使用break语句,用来跳出switch语句。这是因为Verilog的case语句在最终将被综合成一个多路选择器,如图16所示。
这里写图片描述
图16 Full parallel case综合所得多路选择器
4.8.3Verilog 的循环结构
在Verilog中存在着4种类型的循环语句,用来控制执行语句的执行次数。
forever语句: 连续执行的语句。
repeat语句: 连续执行n次的语句。
while语句: 执行语句,直至某个条件不满足。
for 语句:三个部分,语义与C语言相同
for(表达式 1;表达式 2;表达式3)

while(表达式)
stament blocks

forever
stament blocks

repeat(表达式)
stament blocks
图16 图17 Verilog循环语句
Verilog的while与for循环语句,从语义上和C语言的for 与while语句相同。forever 相当于C语言中的while(true),repeat则表示连续循环n次。和C语言不同的是,如果想要使得Verilog代码可以被综合,即可以利用这段代码来生成所设计的硬件,循环次数表达式必须在程序编译过程中保持不变,即是一个常数,不可根据外部输入的变换而动态的更改循环次数。
5、国外证券期货领域的FPGA应用
国外主要的监管机构有:
SEC(美国证券与交易所委员会)
CTFC (美国商品期货交易委员会)
FIA(美国期货行业协会)
FIX国际协议联盟
IIROC (加拿大投资业监管组织)
ESMA(欧洲证券及市场管理局)
MiFID II 和(金融工具市场指令II)
FSA(英国金融服务管理局)
这些监管机构分别发布了行业监管要求,例如FIA–《交易公司风险控制建议》规定:
风险指标设置
价格波动范围
异常波动处置
乌龙指报单大小
重复指令执行阈值
报单速率
行情数值范围合理性检测
急停功能
做市商自我保护机制
IIROC –《交易监管合规条例》规定:

这里写图片描述

工欲善其事,必先利其器。面对市场司空见惯的高频交易,各大机构为了满足监管要求,不约而同地使用FPGA来实现风控,有效避免一般软件在风控领域(包含行情快速解析)的力不从心。首先,由于采用流水线逻辑体系结构,数据流的处理延时要低,在金融风险控制等应用中,这是关键优势;其次,FPGA的浮点运算等短板可以通过内嵌IP核解决,同样的性能消耗更少的功耗;第三,FPGA具有很好的通用性和广泛的连通性,能与低延时网卡等外部设备配合使用;最后一点就是它的灵活性,以周为单位的开发管理与以秒为单位的变更管理,适应业务变化的同时最大程度地保护了原有投资。
6、国内证券期货领域的FPGA应用
目前国内证券、期货相关机构、公司也在密切关注更快的行情解码技术,这些技术对于交易、风控也有帮助,直接关系到资管产品的合规性与盈利水平。
每个机构的每个资管产品一般都需要紧盯着日内的交易,按照国内监管机构的监管要求实施风控,例如:是否有错误或异常(比如波动率异常)、是否违反风控规定等(比如仓位超标,击穿风控线),面对行情极端变化、订单庞大的现实情况,目前许多机构开始放弃纯粹软件方案,考虑利用FPGA的运算快、延时低、功耗低、易变更等特点来实现风控。
南京艾科朗克(Accelecom)信息科技有限公司、杭州盛立金融软件开发(杭州)有限公司等提供的基于FPGA的行情、风控、交易方面的解决方案正在逐步为行业所接受。

7、课题研究的技术路线
今年初,上交所技术有限责任公司开设了《FAST行情硬解码》课题,希望通过课题研究能够深入、直观感性地理解、应用FPGA技术,充分发挥它的长处、回避它的弱点与风险,由于我公司在此方面人才储备不足,目前课题研究联合了南京艾科朗克信息科技有限公司,研究人员希望推出不同的解码工具并直接进行正确性、稳定性、延时等方面的比对。
在课题成果演示机房,我们与其他用户公平地、同步地获取上交所行情组播数据,但是做了如下四个方面的处理以提升行情解码速度:
FPGA卡内采用低延迟光网络技术。
FPGA卡内硬件化各层通讯协议栈;
FPGA卡内对FAST行情进行硬件解码;
FPGA卡内对多路FAST行情进行合并优选;
实现低延迟光网络,除了采用低延迟交换设备,对于终端设备也有高要求,在物理层上要提高光电转换信噪比,降低误码率;在其上层各传输协议要尽量做到硬件加速,如将MAC、IP、TCP/UDP协议栈整个实现到FPGA中。在此基础上才开始行情解析。
本解码系统输入行情数据,对获取的行情UDP报文经解析得到的FAST报文,通过数据存储备份模块保存和记录后将行情包发送给报文选择模块;对上述步骤发送的FAST报文,根据报文中的时间戳检验行情数据的先后顺序,对于具有相同时间戳的FAST报文,只对其中首个到达的进行提取,其余具有相同时间戳的行情FAST报文将被丢弃。
8、课题研究的主要步骤与预期目标
首先,研究人员将依据低延迟光网络、基于FPGA的高性能计算特性,制定需要使用、集成的第三方IP核,需要自主完成的逻辑设计以及FPGA卡与外部的数据、应用接口;此阶段预期正确解析出上交所FAST行情,并且无丢包、低延迟。此阶段的难点在于FPGA软硬件的交互,需要进过较长周期的开发及系统测试,测试组测试需严谨、周密。
其次,定义C/C++纯软件的解码方案以及对外输出的数据接口;此阶段预期正确解析出上交所行情,并且无丢包、尽可能稳定、平滑、低延迟。此阶段的难度不大,按照一般的软件工程循序渐进开发即可。
这里写图片描述

9、课题进展与未来展望
5月,本课题已经初具成果,开发出行情硬解码的原型产品。为进一步了解市场需求、夯实将来转化为产品的基础,同时对课题涉及的软硬件进行技术打磨和性能优化,课题组提请公司允许进行少量不同应用场景的用户测试。测试用户以证券公司总部、数据中心用户为主,营业部级的用户也可以参测,考虑到营业部大部无直连的FAST行情源,所以需要通过总部先行申请(临时)接入我公司高速地面行情网。作为比对工具的纯软件的行情解析软件也初具成果,用户测试期间可以与FPGA硬解码联合组成双活的异构行情解析产品,在FPGA卡本身出故障无法解析时用户仍然可以获得连续的行情,免去用户侧的应急切换操作。
6月,测试用户对课题成果进行了积极反馈,各测试单位基本认可课题成果。但是,考虑到收费与免费会影响用户对课题成果的真实判断,目前课题组拟报请公司同意试销售,设立不超过三个月的试用期,试用后继续使用的用户需要按年收费。如果通过试销售发现课题能取得一定的商业价值与社会意义,这就证明硬解码不仅是快速、稳定、可靠、的解决方案,更可能发展为稳定成熟、经济实用的产品。届时,我公司可能顺应市场需求研发基于FPGA技术的系列产品,利用其IO资源丰富,内部程序并行运行等特点,为证券行业提供行情快速解析、风险控制、期权波动率与希腊字母计算、ETF指数跟踪等方面的解决方案,降低行业风险、提高行业安全运营水平。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(转)基于FPGA技术的FAST行情解码研究 的相关文章

  • 小波分析 + 支持向量机(SVM)预测股票涨跌幅的实现

    刚刚开始进入量化投资领域 最近在做金融数据方面的预测 用到了数据挖掘的知识 花了大概半个月的时间搞懂研报的思想 学习研报中提到的数据处理和机器学习算法 并实现了这个量化投资的核心模型部分 虽然结果显示这个方法没有多好 但是在这期间 我遇到了
  • 华尔街留下的指标之王(附代码展示)

    一 写在前面的话 有人认为价格围绕价值上下波动 研究投资标的内在价值 于是就出现了基本面派 有人为价格反映了一切 所有的信息 包括基本面 都反映到了盘面价格中 于是就有了技术面派 从技术面派的角度讲 有人认为市场价格运动的方式是随机的 下一
  • Talib技术因子详解(一)

    talib安装方式 pip install Ta lib Tushare数据获取请参考 金融量化分析基础环境搭建 数据获取代码 import tushare as ts ts set token Tushare的token pro ts p
  • 常用技术指标之一文读懂KDJ指标

    什么是KDJ指标 KDJ中文名又叫随机指标 英文名叫Stochastic oscillator 由乔治 莱恩 George Lane 于20世纪50年代首创 最早用于期货市场 KDJ指标能比较迅速 直观地研判行情 主要用于分析中短期趋势 是
  • 一个成熟期货交易系统需要解决哪些问题?

    一个成熟期货交易系统需要解决哪些问题 交易系统绝对不仅仅是时机选择 资金管理 情绪控制这么简单 他是一个系统性的思维 交易系统是一组包含了入场信号 风险控制 资金管理 加减仓机制 可以没有 离场方式等等基本元素的的规则组合 成熟的交易系统是
  • Python 量化投资实战教程(4) —KDJ 策略

    量化投资系列文章 Backtrader 教程 Python 量化投资实战教程 1 Python 量化投资实战教程 2 MACD策略 26 9 Python 量化投资实战教程 3 A股回测MACD策略 Github仓库 https githu
  • Talib技术因子详解(八)

    talib安装方式 pip install Ta lib Tushare数据获取请参考 金融量化分析基础环境搭建 数据获取代码请参考 Talib技术因子详解 一 71 CDLDARKCLOUDCOVER名称 Dark Cloud Cover
  • Python股票历史数据预处理(二)

    Python股票历史数据预处理 二 从网上下载的股票历史数据往往不能直接使用 需要转换为自己所需要的格式 下面以Python代码编程为工具 将csv文件中存储的股票历史数据提取出来并处理 处理的数据结果为是30天涨跌幅子数据库 下载地址为
  • Python版的BS期权定价模型和希腊值分析

    我比较懒 主要是打理自己的github的更新 是关于量化投资 机器学习策略相关的项目 https github com Neural Finance 这次更新一个我在学习期权定价过程中 Black Scholes Model 和相关的希腊值
  • Python股票历史数据预处理(一)

    Python股票历史数据预处理 一 在进行量化投资交易编程时 我们需要股票历史数据作为分析依据 下面介绍如何通过Python获取股票历史数据并且将结果存为DataFrame格式 处理后的股票历史数据下载链接为 http download c
  • 利用强化学习进行股票操作实战(三)

    与上一篇文章相同之处 对于交易策略 与上一篇文章相同 当发出买入指令时 一次性全部买入 当发出卖出指令时 一次性全部卖出 还没有添加加减仓操作 模型仍然用的是DQN模型 新增内容 在之前的基础上加入了交易手续费 印花税等 在强化学习这个领域
  • Backtrader 基本使用教程 — 量化投资实战教程(1)

    都说Python可以用于量化投资 但是很多人都不知道该怎么做 甚至觉得是非常高深的知识 其实并非如此 任何人都可以在只有一点Python的基础上回测一个简单的策略 Backtrader是一个基于Python的自动化回溯测试框架 作者是德国人
  • Talib技术因子详解(四)

    talib安装方式 pip install Ta lib Tushare数据获取请参考 金融量化分析基础环境搭建 数据获取代码请参考 Talib技术因子详解 一 26 MACD 异同移动平均线 调用方式如下 macd macdsignal
  • MATLAB金融工具箱(一)--快速入门

    一 快速入门 1 什么是金融工具箱 MATLAB和金融工具箱为金融分析和金融工程提供了一个完整的计算环境 并且金融工具箱提供了一切可帮助你完成金融数据的数学和统计分析的功能 并能将结果用高质量图像显示出来 你可以快速地提出 可视化并且解答复
  • 【量化投资】离散傅里叶变换求数组周期

    好久没有更新量化分析相关的内容 本节将介绍如何通过傅里叶变换求解一组数据当中可能存在的周期性 后续将应用本节的结果实际在量化程序中进行应用 本文计算方法不一定正确 欢迎大家多多指正 并在评论区进行交流 1 离散傅里叶变换 离散傅里叶变换的公
  • 行业轮动策略(思想+源码)

    一 行业轮动策略简介 行业轮动是利用市场趋势获利的一种主动量化投资交易策略 其本质是利用不同投资品种强势时间的错位对行业品种进行切换以达到投资收益最大化的目的 通俗点讲就是根据不同行业的区间表现差异 性进行轮动配置 力求能够抓住区间内表现较
  • 利用强化学习进行股票操作实战(四)

    本次实战代码仍是在之前基础上进行了一些修改 之前只在一支股票上进行训练 这次我将模型放在多支股票上训练 并在多支股票上进行了测试 对于多支股票的训练策略 没有参考过别人的训练方案 做这个的比较少 我按自己的理解去训练 每一轮训练 都将每支股
  • 量化编程环境python库安装包

    必装工具包 1 ccxt conda没有 2 pandas 3 pathos 并发计算 conda没有 4 websocket 获取实时数据 conda没有 5 ntplib 用于时间校对 conda没有 6 cryptography 加密
  • MATLAB金融工具箱(二)--执行常见的金融任务

    二 执行常见的金融任务 1 简介 金融工具箱包含了可以执行许多常见的金融任务的函数 包括 l 处理和转换日期 2 4页 日历功能可以将日期在不同格式之间进行转换 包括Excel格式 并决定未来和过去的日期 分辨假期和工作日 计算日期之间的时
  • 商品期货策略-ATR通道突破策略

    实现平台 BigQuant 人工智能量化投资平台 可在文末前往原文一键克隆代码进行进一步研究 导语 商品期货交易上线啦 听闻这个消息的小编当然坐不住了 决定立刻商品期货走一波 本文选择实现的是经典的ATR通道突破策略 也被称为波动性突破策略

随机推荐

  • 单目标跟踪算法评价指标

    中心位置误差 center location error CLE 中心位置误差为预测的目标中心和真实的目标中心之间的欧氏距离 以像素为单位 xa ya 表示预测目标中心位置 xb yb 表示真实的目标中心位置 距离精度 diatance p
  • html 编辑框取消默认样式,html5中如何更改、去掉input type默认样式

    1 如何去掉input type date 默认样式 HTML代码 选择日期 选择时间 选择星期 选择月份 目前WebKit下有如下9个伪元素可以改变日期控件的UI webkit datetime edit 控制编辑区域的 webkit d
  • 微信小程序商城项目实战(第三篇:商品列表)

    实现商品列表 利用组件实现 Tabs 组件界面编写
  • JavaWeb会话技术

    1 Cookie对象 cookie是一种会话技术 它用于将会话过程中的数据保存到用户的浏览器中 从而使浏览器和服务器可以更好的地进行数据交互 创建Serlet 创建一个chapter05项目 创建一个自己喜欢的包 在该包中编写一个为Last
  • Linux——netstat

    netstat是一个功能很强大的网络信息统计工具 它可以打印本地网卡接口上的全部连接 路由表信息 网卡接口信息等 我们主要利用的是上述功能中的第一个 即显示TCP连接及其状态信息 毕竟 要获得路由表信息和网卡接口信息 我们可以使用输出内容更
  • Vue项目配置文件(.npmrc、.env、. cz-config.js、commitlint.config.js)

    一 npmrc npmrc 文件位于项目的根目录 即 node modules 和 package json 的兄弟 作为npm运行时的配置文件 registry为npm包注册源地址 legacy peer deps忽略相同modules的
  • django+vue项目搭建,前后端通信打通,

    文章目录 django 环境搭建 1 创建django骨架项目 2 创建应用 3 试着启动项目 验证环境OK 4 基础配置 admin py settings py 前端项目搭建 1 安装vue cli 2 创建前端项目 3 创建时候选什么
  • javascript 纯前端实现汉字转拼音 —— pinyin-pro 库

    一般实现汉字转拼音的功能都是请求服务端 api 实现 而对于一些比较简单的需求 我们可以通过一个 npm 工具包 pinyin pro 纯前端实现中文汉字转拼音的功能 特色功能 支持汉字 词语 句子多种格式输入获取 获取拼音 获取声母 获取
  • vue-quill-editor设置字体大小

    项目中需要用到富文本编辑器 用的Vue 所以选择了vue quill editor这个富文本编辑器 发现字体只有几种大小可以选择 满足不了产品的需求 研究了半天终于改好了 主要是需要更改配置文件 以及对应的CSS和js文件 editor v
  • Open judge程序设计A_分支结构

    include
  • 题目0081-新工号系统

    新工号系统 题目描述 3020年空间通信集团的员工突破20亿人 即将遇到现有工号不够的窘境 现在你负责调研新工号系统 继承历史传统 新的工号系统由小写英文字母a z和数字0 9两部分构成 新工号由一段英文字母开头 之后跟随一段数字 比如 a
  • 因果2-潜在结果框架

    因果2 潜在结果框架 摘要 从因果到统计 我们需要走多久 上一章我们从因果和统计学的关系出发 初步了解了一个经典因果框架 潜在结果框架 今天我们继续学习这个框架 图1是上周我们留下的 吃药治头疼 的数据表格 我们如何从该表格中求出平均处理效
  • 深入探索 Dubbo 的 AOT 技术及其技术演进历程

    引言 随着云原生和微服务架构的兴起 高性能和低延迟成为了开发者们的关注重点 在 Java 生态系统中 Spring 和 Dubbo 是两个备受青睐的框架 它们为开发者提供了强大的功能和灵活性 为了进一步提升性能 Dubbo 团队引入了 AO
  • 开发工具之 Snipaste(超级截图工具)

    snipaste工具是一款开源免费的超级截图工具 这里小编强烈推荐此工具的使用 前言 当你使用ALT TAB习惯性的来回切屏的时候 其实在这个过程中 仔细想想是不是比较累 这样子做久了很容易导致疲劳 所以小编强推贴图功能 好了废话不多说 直
  • 5 insanely great books about mathematics you should read.

    本文转载至 http wp kjro se 2013 12 27 5 insanely great books about mathematics you should read 翻译请参考 http blog jobbole com 55
  • Android Studio 无法打开虚拟机

    Emulator PANIC Cannot find AVD system path Please define ANDROID SDK ROOT 刚安装好Android Studio 却发现无法打开虚拟机 报错信息为 Emulator P
  • Kafka:主题创建、分区修改查看、生产者、消费者

    文章目录 Kafka后台操作 1 主题 2 分区 3 生产者 4 消费者组 Kafka后台操作 1 主题 1 创建主题 bin kafka topics sh create bootstrap server hadoop102 9092 r
  • JavaScript 取消默认事件、阻止事件冒泡的方法

    首先页面上创建一个a标签 a href 默认事件 a 然后给body加一个点击事件 document body nclick function alert body 当我点击这个a标签的时候会有两个我们不想发生的事情 1 浏览器地址尾部出现
  • FreeSurfer和FSL的安装和使用(脑部图像去除头骨+对图像和label同时进行仿射对齐)教程

    FreeSurfer当前只支持Linux系统和Mac OS 我所使用的系统是Ubuntu 16 0 4 FreeSurfer的安装耗时较小 但是在处理时耗时较长 可能需要数个小时 甚至一天 这个取决于机器性能 但是和GPU好像没太大关系 下
  • (转)基于FPGA技术的FAST行情解码研究

    http mp weixin qq com s BviH6gAqej6lHd9XxFKUfg 交易技术前沿 基于FPGA技术的FAST行情解码研究 钟浪辉 陈敏 陈坚 刘啸林 秦轶轩 李道双 2017 09 08 上交所技术服务 本文选自