基于基本数据的交易算法
Fundamental data based trading algorithms
Q1:
是否有可能 创建一个 script/algorithm 纯粹放置 BUY 或 SELL 所选货币对的订单,取决于是否如利率公告高于(或低于)预测数字?
我知道在买卖金融工具之前必须考虑许多其他技术和基本因素,但纯粹作为实验,我想确定这种方法是否可行。
如果能实现,
Q2:
利率公告如何直接嵌入到脚本中,这样一旦图形已下达BUYorSELL订单是否立即执行?
注意:这将仅用于模拟交易账户。
之前根据基本数据价格反应执行头寸的替代尝试:
- 设置自动 BUY and SELL 订单,就在利率公告之前, 并允许一个方向的价格大幅上涨或下跌以自动开仓(这样做的缺点是开仓通常为时已晚)。
A1: IF ...
对,就是:
这个想法是可行的,但是一些外部因素使其对您的代码可以控制范围之外的因素非常敏感。
网络传输延迟 不是您最大的敌人。这些占一些 0.1 - 200 ms
,具体取决于您尝试从哪个位置(通过哪个连接/服务)获取一些远程/远距离信息并在本地处理它们。对于并置托管,这将是该间隔的较短端,对于 COTS 办公设备,这将是较长的一端。
Application-based 事务处理延迟 是下一个更危险的延迟。每个 XTO
交易都不会在 zero-time 中发生。通常会定期记录/监控相应的延迟(延迟),以便为相应的市场准入代理/经纪人办公室提供 in-vivo 延迟范围。
数字各不相同,
在Black-Swan事件时期[=79]期间,它们的over-relaxation
也有几个数量级的变化=] 或在高事务负载期间 / XTO
-traffic-storms。
虚假传播爆炸
是你最糟糕的,
虽然仍然隐藏
许多观点,
敌人.
在Fundamental News公告上,正如您上面所报告的,您感觉到了时间,但隐患不是线性时间滴答声,而是点差的爆炸,即PriceDOMAIN区域,no-one可以在其中进行交易( 一个 XTO
) 被填补,或者一个任何人都必须承担的暴露的交易者保证金攻击,如果在这段时间内有股票面临市场风险。
翻译成简单的英语 - no-one 主要是能够点击一个按钮 "in-time" 在 美国 NFP 和类似地震新闻公告.
A2: HOW ...
算法将与新闻提供者通信
嵌入不是正确的表达方式,您的 algo-trading 将不得不成为 distributed-processing 系统的一部分,这将共同构成 trading-infrastructure.
市场数据馈送 -- 为您的本地处理提供quote-stream更新
市场准入 -- 您放置/取消您的XTO
指令的地方
News Feed -- 您从哪里获取 macro-econ 新闻
用于采购动态消息数据的技术手段通常基于/取决于机构的商业产品/API 规范。虽然作为常见的外汇交易平台之一,MetaTrader 终端 确实提供了由经纪人提供的新闻服务,但人们迟早会意识到等待经纪人 re-publish 新闻是一把 dual-edged 剑,因为如果您的经纪商/他们的风险管理控制交易 "against" 一个人的头寸,他们有延迟公告的不公平优势,没有任何相关风险,这不平衡到同样公平,decision-making 交易者的头寸,他们的股票面临市场风险。接下来,一旦传送到 MetaTrader 终端 的本地主机领域,您的算法工具就没有 News-reading API/interface 来完全通过算法处理这些事件,因此在任何一种情况下您都将保持依赖在外部 news-stream 处理器上,与您的代码通信,在 MetaTrader 终端 的情况下,MQL4
-代码以 distributed-system 方式。
话虽如此,您的 algo-trading 策略可以与 News Feed 合作并根据内容执行决策,自动发布(通常比获取/评估/(延迟)/re-processed / re-publish 通过其他三级处理器编辑)。
其中的关键是可行的 XTO
& failure-remedies 策略,以逃避 time-trap 和爆炸的 spread-trap。
The Market does not wait a single [ms] see the FIX-Protocol API
details on how many millions of EUR
denominated value has been removed from L2-DoM
just some 47 ms
right before a nominal time of a News announcement: so this is a look into a microscope, how such gigantic holes appear in the PriceDOMAIN map ( painted by a Bid-pencil, whereas the Ask-side edge of the gap is not so easily visible, unless an extraordinary case happens as illustrated above )
14:29:59,953 <121402 MarketDataIncrementalRefresh (8=FIX.4.29=31135=X34=12140249=***52=20131206-13:29:51.55156=*****************62=20131206-12:37:09.000268=4279=0269=0278=264655=EUR/USD270=1.3654115=EUR271=2000000346=1279=2269=0278=265055=EUR/USD15=EUR279=0269=1278=265555=EUR/USD270=1.365615=EUR271=2000000346=1279=2269=1278=267755=EUR/USD15=EUR10=217)
|-------------------------------------------------(
8=FIX.4.2 ________FIX.8.BeginString .aMessageHeaderBEGIN________________________________________<<HEADER>>
9=311 FIX.9.BodyLength .aMessageBodyLENGTH
35=X FIX.35.MsgType .aTypeOfMESSAGE
34=121402 FIX.34.MsgSeqNum .aMessageSeqNUMBER 121402
49=*** FIX.49.SenderCompID .aSenderHostID
52=20131206-13:29:51.551 FIX.52.SendingTime .aSenderTimeSTAMP 20131206-13:29:51.551
56=************* FIX.56.TargetCompID .aTargetHOST
________________________________________________________________________________________________<<HEADER>>
262=20131206-12:37:09.000 FIX.262.MDReqID .aMarketDataRqstUUID 20131206-12:37:09.000 asString .aMarketDataRqstUUID
-----------------------------------------------------------------[*]----------------------------------------------
268=4 FIX.268.NoMDEntries .aMarketDataEntriesNUMBER 4
-----------------------------------------------------------------[1]----------------------------------------------
279=0 FIX.279.MDUpdateAction .aMarketDataUpdateACTION 0 { 0: New, 1: Change, 2: Delete }
269=0 FIX.269.MDEntryType .aMarketDataEntryTYPE 0 { 0: Bid, 1: Offer, 2: Trade, 3: IndexVALUE, 4: aPriceOPEN, 5: aPriceCLOSE, 6: aPriceOfSETTLEMENT, 7: aTradingSessionPriceHIGH, 8: aTradingSessionPriceLOW, 9: aTradingSessionPriceVWAP }
278=2646 FIX.278.MDEntryID .aMarketDataEntryUUID 2646
55=EUR/USD FIX.55.Symbol .aSYMBOL EUR/USD
270=1.36541 FIX.270.MDEntryPx .aMarketDataEntryPRICE 1.36541
15=EUR FIX.15.Currency .anExplicitlyStatedCURRENCY EUR
271=2000000 FIX.271.MDEntrySize .aMarketDataEntrySIZE 2.000.000 UoM/pieces
346=1 FIX.346.NumberOfOrders .aMarketDataEntryNumberOfORDERs 1
-----------------------------------------------------------------[2]----------------------------------------------
279=2 FIX.279.MDUpdateAction .aMarketDataUpdateACTION 2 {} 2: Delete
269=0 FIX.269 . 0 {} 0: Bid
278=2650 FIX.278 . 2650
55=EUR/USD FIX.55 . EUR/USD
15=EUR FIX.15 . EUR
-----------------------------------------------------------------[3]----------------------------------------------
279=0 FIX.279 . 0 {} 0: New
269=1 FIX.269 . 1 {} 1: Ask/Offer
278=2655 FIX.278 . 2655
55=EUR/USD FIX.55 . EUR/USD
270=1.3656 FIX.270 . 1.36560
15=EUR FIX.15 . EUR
271=2000000 FIX.271 . 2.000.000 UoM/pieces
346=1 FIX.346 . 1
-----------------------------------------------------------------[4]----------------------------------------------
279=2 FIX.279 . 2 {} 2: Delete
269=1 FIX.269 . 1 {} 1: Ask/Offer
278=2677 FIX.278 . 2677
55=EUR/USD FIX.55 . EUR/USD
15=EUR FIX.15 . EUR
10=217 ________FIX.10.CheckSum______________________________________<<TRAILER>> aTripleBYTE, asChar, ALGO ref. below
)
This illustrative sample was still quite exceptional for having just 4
items that have changed the EUR/USD
pre-NFP
announcement battle-field. Having done some quantitative empirical observations on "density of changes", enclosed you have a collection of LDF()
data about how many FIX
-messages contain between 10..380
aMarketDataUpdateACTION
units:
max. value in FIX.268 ...== FIX.268.NoMDEntries .aMarketDataEntriesNUMBER
|
1: 38774 x, i.e. ~< 10 .. 19 > FIX.268.NoMDEntries per one FIX-Message delivered
2: 64764 x, i.e. ~< 20 .. 29 >
3: 27805 x, i.e. ~< 30 .. 39 >
4: 41307 x, i.e. ~< 40 .. 49 >
5: 17182 x, i.e. ~< 50 .. 59 >
6: 13640 x, i.e. ~< 60 .. 69 >
7: 5914 x, i.e. ~< 70 .. 79 >
8: 6544 x, i.e. ~< 80 .. 89 >
9: 3205 x, i.e. ~< 90 .. 99 >
10: 3150 x, i.e. ~< 100 .. 109 >
11: 1767 x, i.e. ~< 110 .. 119 >
12: 1432 x, i.e. ~< 120 .. 129 >
13: 1120 x, i.e. ~< 130 .. 139 >
14: 794 x, i.e. ~< 140 .. 149 >
15: 792 x, i.e. ~< 150 .. 159 >
16: 748 x, i.e. ~< 160 .. 169 >
17: 636 x, i.e. ~< 170 .. 179 >
18: 589 x, i.e. ~< 180 .. 189 >
19: 545 x, i.e. ~< 190 .. 199 >
20: 503 x, i.e. ~< 200 .. 209 >
21: 453 x, i.e. ~< 210 .. 219 >
22: 422 x, i.e. ~< 220 .. 229 >
23: 400 x, i.e. ~< 230 .. 239 >
24: 354 x, i.e. ~< 240 .. 249 >
25: 231 x, i.e. ~< 250 .. 259 >
26: 489 x, i.e. ~< 260 .. 269 >
27: 168 x, i.e. ~< 270 .. 279 >
28: 144 x i.e. ~< 280 .. 289 >
29: 48 x, i.e. ~< 290 .. 299 >
30: 42 x, i.e. ~< 300 .. 309 >
31: 16 x, i.e. ~< 310 .. 319 >
32: 6 x, i.e. ~< 320 .. 329 >
33: 8 x, i.e. ~< 330 .. 339 >
34: 5 x, i.e. ~< 340 .. 349 >
35: 2 x, i.e. ~< 350 .. 359 >
36: 4 x, i.e. ~< 360 .. 369 >
37: 1 x i.e. ~< 370 .. 379 >
祝你好运,瞄准目标
在此
最终惊心动魄的狩猎!
Q1:
是否有可能 创建一个 script/algorithm 纯粹放置 BUY 或 SELL 所选货币对的订单,取决于是否如利率公告高于(或低于)预测数字?
我知道在买卖金融工具之前必须考虑许多其他技术和基本因素,但纯粹作为实验,我想确定这种方法是否可行。
如果能实现,Q2:
利率公告如何直接嵌入到脚本中,这样一旦图形已下达BUYorSELL订单是否立即执行?
注意:这将仅用于模拟交易账户。
之前根据基本数据价格反应执行头寸的替代尝试:
- 设置自动 BUY and SELL 订单,就在利率公告之前, 并允许一个方向的价格大幅上涨或下跌以自动开仓(这样做的缺点是开仓通常为时已晚)。
A1: IF ...
对,就是:
这个想法是可行的,但是一些外部因素使其对您的代码可以控制范围之外的因素非常敏感。
网络传输延迟 不是您最大的敌人。这些占一些 0.1 - 200 ms
,具体取决于您尝试从哪个位置(通过哪个连接/服务)获取一些远程/远距离信息并在本地处理它们。对于并置托管,这将是该间隔的较短端,对于 COTS 办公设备,这将是较长的一端。
Application-based 事务处理延迟 是下一个更危险的延迟。每个 XTO
交易都不会在 zero-time 中发生。通常会定期记录/监控相应的延迟(延迟),以便为相应的市场准入代理/经纪人办公室提供 in-vivo 延迟范围。
在Black-Swan事件时期[=79]期间,它们的over-relaxation
也有几个数量级的变化=] 或在高事务负载期间 / XTO
-traffic-storms。
虚假传播爆炸
是你最糟糕的,
虽然仍然隐藏
许多观点,
敌人.
XTO
) 被填补,或者一个任何人都必须承担的暴露的交易者保证金攻击,如果在这段时间内有股票面临市场风险。
翻译成简单的英语 - no-one 主要是能够点击一个按钮 "in-time" 在 美国 NFP 和类似地震新闻公告.
A2: HOW ...
算法将与新闻提供者通信
嵌入不是正确的表达方式,您的 algo-trading 将不得不成为 distributed-processing 系统的一部分,这将共同构成 trading-infrastructure.
市场数据馈送 -- 为您的本地处理提供quote-stream更新
市场准入 -- 您放置/取消您的XTO
指令的地方
News Feed -- 您从哪里获取 macro-econ 新闻
用于采购动态消息数据的技术手段通常基于/取决于机构的商业产品/API 规范。虽然作为常见的外汇交易平台之一,MetaTrader 终端 确实提供了由经纪人提供的新闻服务,但人们迟早会意识到等待经纪人 re-publish 新闻是一把 dual-edged 剑,因为如果您的经纪商/他们的风险管理控制交易 "against" 一个人的头寸,他们有延迟公告的不公平优势,没有任何相关风险,这不平衡到同样公平,decision-making 交易者的头寸,他们的股票面临市场风险。接下来,一旦传送到 MetaTrader 终端 的本地主机领域,您的算法工具就没有 News-reading API/interface 来完全通过算法处理这些事件,因此在任何一种情况下您都将保持依赖在外部 news-stream 处理器上,与您的代码通信,在 MetaTrader 终端 的情况下,MQL4
-代码以 distributed-system 方式。
话虽如此,您的 algo-trading 策略可以与 News Feed 合作并根据内容执行决策,自动发布(通常比获取/评估/(延迟)/re-processed / re-publish 通过其他三级处理器编辑)。
其中的关键是可行的 XTO
& failure-remedies 策略,以逃避 time-trap 和爆炸的 spread-trap。
The Market does not wait a single [ms] see the
FIX-Protocol API
details on how many millions ofEUR
denominated value has been removed fromL2-DoM
just some47 ms
right before a nominal time of a News announcement: so this is a look into a microscope, how such gigantic holes appear in the PriceDOMAIN map ( painted by a Bid-pencil, whereas the Ask-side edge of the gap is not so easily visible, unless an extraordinary case happens as illustrated above )
14:29:59,953 <121402 MarketDataIncrementalRefresh (8=FIX.4.29=31135=X34=12140249=***52=20131206-13:29:51.55156=*****************62=20131206-12:37:09.000268=4279=0269=0278=264655=EUR/USD270=1.3654115=EUR271=2000000346=1279=2269=0278=265055=EUR/USD15=EUR279=0269=1278=265555=EUR/USD270=1.365615=EUR271=2000000346=1279=2269=1278=267755=EUR/USD15=EUR10=217)
|-------------------------------------------------(
8=FIX.4.2 ________FIX.8.BeginString .aMessageHeaderBEGIN________________________________________<<HEADER>>
9=311 FIX.9.BodyLength .aMessageBodyLENGTH
35=X FIX.35.MsgType .aTypeOfMESSAGE
34=121402 FIX.34.MsgSeqNum .aMessageSeqNUMBER 121402
49=*** FIX.49.SenderCompID .aSenderHostID
52=20131206-13:29:51.551 FIX.52.SendingTime .aSenderTimeSTAMP 20131206-13:29:51.551
56=************* FIX.56.TargetCompID .aTargetHOST
________________________________________________________________________________________________<<HEADER>>
262=20131206-12:37:09.000 FIX.262.MDReqID .aMarketDataRqstUUID 20131206-12:37:09.000 asString .aMarketDataRqstUUID
-----------------------------------------------------------------[*]----------------------------------------------
268=4 FIX.268.NoMDEntries .aMarketDataEntriesNUMBER 4
-----------------------------------------------------------------[1]----------------------------------------------
279=0 FIX.279.MDUpdateAction .aMarketDataUpdateACTION 0 { 0: New, 1: Change, 2: Delete }
269=0 FIX.269.MDEntryType .aMarketDataEntryTYPE 0 { 0: Bid, 1: Offer, 2: Trade, 3: IndexVALUE, 4: aPriceOPEN, 5: aPriceCLOSE, 6: aPriceOfSETTLEMENT, 7: aTradingSessionPriceHIGH, 8: aTradingSessionPriceLOW, 9: aTradingSessionPriceVWAP }
278=2646 FIX.278.MDEntryID .aMarketDataEntryUUID 2646
55=EUR/USD FIX.55.Symbol .aSYMBOL EUR/USD
270=1.36541 FIX.270.MDEntryPx .aMarketDataEntryPRICE 1.36541
15=EUR FIX.15.Currency .anExplicitlyStatedCURRENCY EUR
271=2000000 FIX.271.MDEntrySize .aMarketDataEntrySIZE 2.000.000 UoM/pieces
346=1 FIX.346.NumberOfOrders .aMarketDataEntryNumberOfORDERs 1
-----------------------------------------------------------------[2]----------------------------------------------
279=2 FIX.279.MDUpdateAction .aMarketDataUpdateACTION 2 {} 2: Delete
269=0 FIX.269 . 0 {} 0: Bid
278=2650 FIX.278 . 2650
55=EUR/USD FIX.55 . EUR/USD
15=EUR FIX.15 . EUR
-----------------------------------------------------------------[3]----------------------------------------------
279=0 FIX.279 . 0 {} 0: New
269=1 FIX.269 . 1 {} 1: Ask/Offer
278=2655 FIX.278 . 2655
55=EUR/USD FIX.55 . EUR/USD
270=1.3656 FIX.270 . 1.36560
15=EUR FIX.15 . EUR
271=2000000 FIX.271 . 2.000.000 UoM/pieces
346=1 FIX.346 . 1
-----------------------------------------------------------------[4]----------------------------------------------
279=2 FIX.279 . 2 {} 2: Delete
269=1 FIX.269 . 1 {} 1: Ask/Offer
278=2677 FIX.278 . 2677
55=EUR/USD FIX.55 . EUR/USD
15=EUR FIX.15 . EUR
10=217 ________FIX.10.CheckSum______________________________________<<TRAILER>> aTripleBYTE, asChar, ALGO ref. below
)
This illustrative sample was still quite exceptional for having just
4
items that have changed theEUR/USD
pre-NFP
announcement battle-field. Having done some quantitative empirical observations on "density of changes", enclosed you have a collection ofLDF()
data about how manyFIX
-messages contain between10..380
aMarketDataUpdateACTION
units:
max. value in FIX.268 ...== FIX.268.NoMDEntries .aMarketDataEntriesNUMBER
|
1: 38774 x, i.e. ~< 10 .. 19 > FIX.268.NoMDEntries per one FIX-Message delivered
2: 64764 x, i.e. ~< 20 .. 29 >
3: 27805 x, i.e. ~< 30 .. 39 >
4: 41307 x, i.e. ~< 40 .. 49 >
5: 17182 x, i.e. ~< 50 .. 59 >
6: 13640 x, i.e. ~< 60 .. 69 >
7: 5914 x, i.e. ~< 70 .. 79 >
8: 6544 x, i.e. ~< 80 .. 89 >
9: 3205 x, i.e. ~< 90 .. 99 >
10: 3150 x, i.e. ~< 100 .. 109 >
11: 1767 x, i.e. ~< 110 .. 119 >
12: 1432 x, i.e. ~< 120 .. 129 >
13: 1120 x, i.e. ~< 130 .. 139 >
14: 794 x, i.e. ~< 140 .. 149 >
15: 792 x, i.e. ~< 150 .. 159 >
16: 748 x, i.e. ~< 160 .. 169 >
17: 636 x, i.e. ~< 170 .. 179 >
18: 589 x, i.e. ~< 180 .. 189 >
19: 545 x, i.e. ~< 190 .. 199 >
20: 503 x, i.e. ~< 200 .. 209 >
21: 453 x, i.e. ~< 210 .. 219 >
22: 422 x, i.e. ~< 220 .. 229 >
23: 400 x, i.e. ~< 230 .. 239 >
24: 354 x, i.e. ~< 240 .. 249 >
25: 231 x, i.e. ~< 250 .. 259 >
26: 489 x, i.e. ~< 260 .. 269 >
27: 168 x, i.e. ~< 270 .. 279 >
28: 144 x i.e. ~< 280 .. 289 >
29: 48 x, i.e. ~< 290 .. 299 >
30: 42 x, i.e. ~< 300 .. 309 >
31: 16 x, i.e. ~< 310 .. 319 >
32: 6 x, i.e. ~< 320 .. 329 >
33: 8 x, i.e. ~< 330 .. 339 >
34: 5 x, i.e. ~< 340 .. 349 >
35: 2 x, i.e. ~< 350 .. 359 >
36: 4 x, i.e. ~< 360 .. 369 >
37: 1 x i.e. ~< 370 .. 379 >
祝你好运,瞄准目标
在此
最终惊心动魄的狩猎!