在过去的几周里,我遇到了很多关于高频交易的文章.他们都谈论计算机和软件对此有多重要,但由于它们都是从财务角度编写的,因此没有关于软件功能的详细信息?
任何人都可以从程序员的角度解释什么是高频交易?为什么计算机/软件在这个领域如此重要?
我知道在Java虚拟机(JVM)中,可能需要进行预热,因为Java使用延迟加载过程加载类,因此您需要确保在启动主事务之前初始化对象.我是一名C++开发人员,不必处理类似的要求.
但是,我无法理解的部分如下:
考虑一个例子,期望通过套接字接收消息的应用程序,并且事务可以是新订单,修改订单和取消订单或确认的交易.
请注意,该应用程序是关于高频交易(HFT),因此性能非常重要.
我正在使用Kraken API,我无法找到对响应中的信息的良好解释.
实际上,对于给定的一对,我有以下信息:
altname = alternate pair name
aclass_base = asset class of base component
base = asset id of base component
aclass_quote = asset class of quote component
quote = asset id of quote component
lot = volume lot size
pair_decimals = scaling decimal places for pair
lot_decimals = scaling decimal places for volume
lot_multiplier = amount to multiply lot volume by to get currency volume
leverage_buy = array of leverage amounts available when buying
leverage_sell = array of …
Run Code Online (Sandbox Code Playgroud) 我被告知,对于需要低延迟的高频交易(HFT)系统,TCP通过UDP使用.我被告知使用TCP可以进行点对点连接,而不能使用UDP,但是根据我的理解,您可以将UDP数据包发送到特定的IP /端口.
本文中使用了几个参数来说明为什么UDP> TCP用于游戏,但我可以看到与HFT的相关性.
为什么TCP是一个更好的协议用于HFT?
(管理员:我之前的这个问题的帖子被默默删除,没有任何解释.如果我违反了使用条款,请提醒我这一点,而不是默默地删除问题)
我正试图让zipline与非美国的日内数据一起使用,我已将其加载到pandas DataFrame中:
BARC HSBA LLOY STAN
Date
2014-07-01 08:30:00 321.250 894.55 112.105 1777.25
2014-07-01 08:32:00 321.150 894.70 112.095 1777.00
2014-07-01 08:34:00 321.075 894.80 112.140 1776.50
2014-07-01 08:36:00 321.725 894.80 112.255 1777.00
2014-07-01 08:38:00 321.675 894.70 112.290 1777.00
Run Code Online (Sandbox Code Playgroud)
我在这里遵循移动平均线教程,用我自己的符号代码替换"AAPL",用"1m"数据代替"1d"代替历史调用.
然后,我用做最后一次通知algo_obj.run(DataFrameSource(mydf))
,其中mydf
高于数据帧.
然而,与TradingEnvironment相关的各种问题都出现了.根据源代码:
# This module maintains a global variable, environment, which is
# subsequently referenced directly by zipline financial
# components. To set the environment, you can set the property on
# the module …
Run Code Online (Sandbox Code Playgroud) 我认为对于那些熟悉hft的人来说,这是一个更理论性的问题.我收到FAST的订单并处理它们.我每秒收到大约2-3千个订单.问题是我是否应该尝试同步或异步处理它们.
每次收到下一个订单时,我都需要做以下事情:
要做同步,我有大约200-300μs(能够每秒处理3000个订单).我认为这应该足够了.
只是计划异步任务我花了大约30μs
利弊:
同步:
异步:
同步示例:我们收到更新的MSFT订单,然后更新INTC订单并在不同的线程中处理它们.在这两种情况下,我们都会触发NASDAQ指数重新计算.因此纳斯达克指数的计算应该是同步的.然而,这个特殊问题可以解决以避免同步......这只是可能同步的一个例子.
所以问题是我应该处理同步或异步的订单更新.到目前为止,我处理它们异步,我有每个仪器的专用线程.因为我可以处理针对不同仪器更新的异步两个(MSFT和INTC),但是应该同步处理一个仪器(MSFT)的两个更新.
QuickFixJ 出现问题。问题是我无法正确发送登录消息。此外,我很难理解如何设置消息流。我并不是要执行交易,只是检索市场数据。
错误:
20140123-22:55:56: No responder, not sending message:
Run Code Online (Sandbox Code Playgroud)
这是我的所有详细信息:
传入:猫传入/*
8=FIXT.1.19=11035=A34=149=REDACTED-MD52=20140123-22:55:56.37256=NDXMD98=0108=30141=Y553=REDACTED100554=REDACTED1137=910=231?220140123-22:55:56.470
Run Code Online (Sandbox Code Playgroud)
传出:
20140123-22:55:50: Session FIXT.1.1:REDACTED-MD->NDXMD schedule is weekly, SUN 00:00:00-UTC - FRI 00:00:00-UTC
20140123-22:55:50: Created session: FIXT.1.1:REDACTED-MD->NDXMD
20140123-22:55:53: Initiated logon request
20140123-22:55:56: No responder, not sending message: 8=FIXT.1.19=11035=A34=149=REDACTED-MD52=20140123-22:55:56.37256=NDXMD98=0108=30141=Y553=REDACTED100554=REDACTED1137=910=231
8=FIXT.1.19=8135=A34=149=REDACTED-MD52=20140123-22:55:52.64356=NDXMD98=0108=30141=Y1137=910=114
8=FIXT.1.19=8335=549=NDXMD56=REDACTED-MD52=20140123-22:55:53.75134=158=Missing field. Type 55310=054
8=FIXT.1.19=11035=A34=149=REDACTED-MD52=20140123-22:55:56.37256=NDXMD98=0108=30141=Y553=REDACTED100554=REDACTED1137=910=231
Run Code Online (Sandbox Code Playgroud)
我的标准输出是:J
an 23, 2014 10:55:37 PM REDACTED.REDACTEDMain main
INFO: REDACTED startup
Jan 23, 2014 10:55:49 PM quickfix.SessionSchedule <init>
INFO: [FIXT.1.1:REDACTEDB-MD->NDXMD] weekly, SUN 00:00:00-UTC - FRI 00:00:00-UTC
Successfully called onCreate for sessionId : FIXT.1.1:REDACTEDB-MD->NDXMD
Jan 23, …
Run Code Online (Sandbox Code Playgroud)
我很高兴了解Hadoop及其周围的各种项目,目前有两种不同的策略,我正在考虑建立一个系统来存储大量市场价格数据,我刚刚开始使用Hadoop/HDSF和HBase但希望有人可以帮助我种植一个系统种子,以后我不必使用这些技术.下面是我的系统和要求的概述,包括一些查询和数据使用用例,最后是我目前对我所阅读的小文档中最佳方法的思考.这是一个开放式的问题,我很乐意接受任何有见识的答案并接受最好的答案,随时评论下面的任何或所有要点. - 邓肯克雷布斯
系统要求 - 能够利用数据存储进行系统的历史回溯测试,历史数据图表和未来的数据挖掘.一旦存储,数据将始终是只读的,需要快速数据访问,但在返回测试时不是必须的.
静态模式 - 非常简单,我想从feed中捕获3种类型的消息:
数据插入用例 - 来自实时市场数据流或通过代理API查找
数据查询用例 - 下面演示了我如何逻辑查询我的数据.
Get me all Quotes,Trades,Timestamps for GOOG on 9/22/2014
Get me all Trades for GOOG,FB BEFORE 9/1/2014 AND AFTER 5/1/2014
Get me the number of trades for these 50 symbols for each day over the last 90 days.
圣杯 - MapReduce可以用于下面这些用例吗?
通过分布式代理从原始市场数据生成元数据.例如,编写一个作业,计算所有股票和数据库中存储的所有股票的1分钟间隔的平均交易量.创建作业以为每个库存/会话设置一个代理,我告诉它应该为哪个库存和会话计算该值.(这是MapReduce可以做的吗???)
在代理的类路径中,我可以添加自己的util代码,以便上面的用例可以将其值发布到中央仓库或Messaging服务器中吗?我可以将代理部署为OSGI捆绑包吗?
为每天早上在上市前交易前执行的不同类型的指标和分数创建不同类型的代理?
高频交易
如果有人可以在高频交易系统中使用Hadoop分享一些经验,我也很感兴趣.刚开始使用这项技术我最初的感觉是Hadoop可以很好地存储和处理大量的历史滴答数据,如果有人使用它进行实时交易,我会有兴趣了解更多! - 邓肯克雷布斯
我有“在线”系列整数,所以每隔几毫秒我就有一个新数字。频率未指定 - 有时我有很多数字,有时我没有数字。
实际上,这些数字就是所谓的股票“真实价格”。我在我的交易应用程序中使用它。
现在我只使用最后一个数字作为“真实价格”,所以我根本不跟踪系列。但是这种方法存在一些问题。我们来看看这个系列:
问题是,在很短的时间内,我的“真实价格”从 100 变为 101 并返回太多次。真实价格的每一次变化都意味着很多工作(重新计算、下订单等),所以我不需要像那样改变真实价格。此更改 (100-101-100-101) 是由于“测量问题”造成的,我需要对其进行过滤。我无法修复“测量”,所以我必须在这里修复它。
其中一种方法是使用“3LastAverage”算法:
我正在尝试研究高频交易系统.什么是HFT用来连接交换机的机制和什么是程序(它是必须通过代理还是直接访问,如果它直接访问我需要的那种连接信息)
提前感谢您的回答.