我需要一个好的欧元兑美元的历史文件 - 页 4

 

schnappi,自然,识别(并最终补救)坏刻度和数据漏洞的方法本身就是一个不断发展的过程。我一开始采用的是外部定义过滤器的标准方法(如果价格delta>X,那么我们就有一个不好的tick,等等),这样做的问题是你强迫数据集符合你对价格数据应该是什么样子的看法和期望,而这可能是也可能不是金融工具价格演变动态的内在统计特征的代表。

最终,我的方法迭代到我只要求数据与金融工具本身的内在特征(本讨论中的货币对,但它适用于所有领域)自我一致。这意味着在实践中,我采取了一系列 "已知的良好市场数据",并有力地描述其属性:时间差距,价格差距,等等。这就产生了货币对的自然/特征价格演变概况 (这将是特定的经纪人,因为每个经纪人都有自己微妙的 "泵和脉冲 "算法,以保持价格反馈的 "活力")。

有了这些特征数据,我就会让脚本在较早的、更有问题的时间段内进行迭代,评估每个条形图是否与货币对的固有性质在统计上一致。例如,我们观察到美元兑日元在连续的M1蜡烛之间出现的价格差距一般为<3点。也就是说,N+1蜡烛的收盘价通常与N蜡烛的开盘价相差3到3个点。

这是一个很容易产生统计数据的指标,只要分析你的数据的close(i+1)-open(i),并产生一个直方图:(注意我特别/有意排除了来自蜡烛对的价格差距,这些蜡烛对本身在这个阶段有一个时间差距的特征)。


现在,如果你评估前一年的历史数据,比如说2003年,你的脚本观察到连续的蜡烛之间的价格差距(没有时间差距),远远超出了统计学上的一致范围(在这个例子中,我们说检测到50个点的差距),那么你的脚本就有理由认为在那个时间点评估的价格数据是可疑的。

你如何处理可疑的蜡烛(补救阶段)是一个完全不同的问题,但这里有一个例子。


在补救数据的过程中,有一些危险和陷阱需要避免,如果你不注意如何定义你的不良蜡烛的驱逐名单以及它们的替代物,你可能会不自觉地造成更多的伤害(我认为简单地从hst记录中删除蜡烛也是一种替代政策,在这种情况下,用一个人为的时间间隔替代不良的价格间隔)。

 
菲利普,这是一些有趣的东西,但对我来说似乎风险太大,太耗时了。我更喜欢使用我可以信任的来源,而不是试图'修复'我不能信任的来源......

关于那些'可疑的'蜡烛。许多经纪商由于各种原因有奇怪的价格峰值。在你上面的例子中,你怎么知道这是一个明显的 "坏刻度 "数据?像这样的峰值确实会发生...
 
gordon wrote>>
菲利普,那是一些有趣的东西,但对我来说似乎风险太大,也太耗时了。我更喜欢使用我可以信任的来源,而不是试图'修复'我不能信任的来源......

关于那些'可疑的'蜡烛。许多经纪商由于各种原因有奇怪的价格峰值。在你上面的例子中,你怎么知道这是一个明显的 "坏刻度 "数据?像这样的峰值确实会发生...


关于:你怎么知道这是一个明显的 "坏刻度 "数据......在这种情况下,这个经纪人对3年多的数据进行了详细分析,显示这样的峰值从未发生过,甚至没有一次,在超过100万烛光的数据中。 奥卡姆剃刀......什么更有可能发生在1999年8月2日04:29:市场向上飙升60点,蜡烛在蜡烛的高点收盘,然后在下一根蜡烛的开盘价上,市场回落了50点,随后的市场活动没有比飙升前的蜡烛更多的波动? 或者说,这个特殊的蜡烛包含了一个虚假的坏刻度,可以合法地(有信心地)消除?

你会注意到我上面的第一张图,在3年多的数据中,这个货币对的收盘缺口超过4点的频率是零。 在这种情况下,我觉得可以把50点的离群值称为明显的离群值,并把它从我的历史交易记录副本中驱逐出去。

关于:可信任的来源与固定......因为在使用MT4平台时,你不能信任任何 历史记录的要价,在我看来,拥有可信任与不可信任的历史数据的概念确实是一个个人的安慰。 当然这取决于你的具体交易策略,在我看来,历史记录的具体细节与我的EA无关。 如果一个交易策略要求历史记录的精确性和准确性,以使其有利可图,那么它很可能在任何货币对的空头头寸中都无法获利,因为所有的卖价都是在回测中通过假设固定点差(这在历史上并不准确,也不能代表实际的市场情况)捏造出来的。

因此,如果你打算制作一个足够强大的EA,以处理回测中的卖价被捏造的现实,那么你可能已经创建了一个EA,能够处理历史记录中虚假/错误的价格数据。 我可能错了,这不是第一次了,但我对历史数据的处理方法是使用它,目的是使我的EA对它不了解。

 
1005phillip:


关于:你怎么知道这是一个明显的 "坏刻度 "数据......在这种情况下,这个经纪人对3年多的数据进行了详细的分析,显示这样的峰值从未发生过,甚至没有一次,在超过100万根蜡烛的数据中。 奥卡姆剃刀......什么更有可能发生在1999年8月2日04:29:市场向上飙升60点,蜡烛在蜡烛的高点收盘,然后在下一根蜡烛的开盘价上,市场回落了50点,随后的市场活动没有比飙升前的蜡烛更多的波动? 或者这个特定的蜡烛包含一个虚假的坏刻度,可以合法地(有信心地)消除?

好吧,但这是一个极端的情况。如果是~30个点,而你在所有这些年的数据中只有3个这样的案例呢。那你怎么知道呢?我的观点是,会有一些情况是不明显的,你必须猜测。


关于:可信任的来源与固定......因为在使用MT4平台时,你不能信任任何 历史记录的要价,所以在我看来,拥有可信任与不可信任的历史数据这一概念确实是一种个人安慰(...)

但这不是重点。我说的是值得信赖的来源,你可以按原样使用,不需要经历这些麻烦。在MT4测试器中缺乏问价(固定点差)与此无关,因为它同时影响到不良来源、良好来源和固定来源...。这是一个完全独立的问题。

 

菲利普:在我看来,这才是正确的做法。我认为,通过分析价格跳跃和随后的波动性,可以很安全地识别出坏行情。如果市场在下一个M1柱子上显示了一个峰值,但没有异常波动,那么这就是一个坏行情的可能性非常大。你上面展示的截图就是这样一个例子。

你已经遇到了一个更重要的 问题:定义坏行情是一回事,纠正它们是另一回事。在我看来,有两种方法可以做到这一点。

第一种:识别坏的窍门,通过猜测来修正它们。如果是开盘时突然跳空+50点,那么就把它调回比如说+3点,以此类推。
这将是一个更精确的方法,但实施起来更困难。

 

戈登,我通过依靠统计数据本身来执行历史记录的自洽性来避免猜测。我想我记得你在另一篇文章中提到过你是一个基本统计学驱动的交易员,所以当我说前提是最小化可疑数据集和已知良好数据集(你会标记为 "可信赖来源")之间的Kullback-Leibler分歧时,你会明白我在说什么。

只有在外汇的情况下,我们才会使用广义正态分布而不是正态高斯分布,因为金融市场的峰度通常大于零。我怀疑我是否对你说了什么新的东西,但我只是扩大了我的方法的前提,以确定和驱逐有信心的可疑数据(统计学的那种,而不是大男子主义的那种;),所以你知道我的选择标准不是像设置高/低带通滤波器和强行通过数据那样简单(而且有缺陷)。

当然,在把金融工具的定价数据作为随机过程来处理时,会对其在 "可信来源 "时间段内的静止性做出假设。但只要我愿意要求我的EA代码将其活动限制在未来时间序列中的同等静止性时期,那么自洽性就是该方法所固有的。由于 "可信来源 "数据的长度是有限的,它为我们可以期望在我们的特征中捕获的过去的环稳态过程在未来的时间序列中得到体现的时间范围设定了一个上限。

但是,这里有一个更高层次的观点需要加强,我想我们都能同意,那就是无论数据的 "历史准确性 "或数据所代表的时间长度如何,使用历史数据和回测来 "优化 "交易策略的价值完全取决于坐在键盘后面的人,他们知道需要通过回测来回答的问题。数量不等于质量,无论是历史数据的长度还是通过迭代回测进行优化所花费的时间,都不能回答需要回答的问题,如果这个问题一开始就没有很好的定义。你花了多长时间才意识到 "什么参数能给我带来最大的利润或最小的跌幅?"并不是试图通过回测来回答的问题 :)

Schnappi,这取决于你的目标是什么,就你要实现的目标而言。你想要一个更能反映历史上准确定价细微差别的数据集,还是对你的交易触发器和资金管理所测试的时间序列数量感兴趣?没有错误的答案,当然每个人对待市场交易的方式不同。就我个人而言,我不使用历史数据进行线性时间序列测试,我知道我不是唯一这样做的人,但我自由地承认大多数人不这样做。我使用历史数据来提取货币对特征的原始统计性质(Lévy-Itō分解),然后通过Monte Carlo例程来创建统计上等效但不完全相同的历史数据的时间序列。然后我用这些编造的hst时间序列进行回测。(这不是浅显的阅读材料,但我包括了链接,也许你还没有意识到,你想读一读)

就像天气预报一样,你不是通过专注于了解今天和昨天的天气情况来预测明天的天气,而是创建模型,捕捉天气指标(温度、湿度、压力等)演变的固有统计数据,然后你故意改变初始条件,让蒙特卡洛时间向前运行,你这样做几千次,然后平均结果(在精神上,实际细节自然更复杂),这为明天的预测奠定了基础"最低气温在30度左右,最高气温在60度以上"。

如果你正在接近从旧的历史数据中过滤掉不好的指标的想法,因为你只是想回测10年的数据而不是3年的数据,那么我只想提醒你,你可能会陷入 "数量将推动质量 "的谬论,许多回测者在他们职业生涯的某个阶段都会陷入这种谬论。我曾经在那里,也在那里停留过一段时间。我相信只要我有更长的历史数据来优化回测,我的失败代码就会/可以成为赢家。也许这对某些人来说是真的,拥有更长的回测数据对他们的远期测试利润确实有帮助,但对我来说,这只是傻瓜的黄金(和大量浪费的时间)。

如果你想要更长的历史记录,因为你正在使用自相关函数和类似的功能,那么你可能会创建自己的虚拟/合成定价数据系列来磨练你的锁存器和相位锁,因为这样你就可以通过你首先制造时间序列的方式直接控制锁存协议的稳健性。

我并不声称自己有正确的答案,只是说如果我们一开始就没有正确的问题,那么我们就不能指望答案对我们的总体目标(估计是利润)有任何作用。

 
是的,我知道这些术语,但主要是在理论层面。我的背景实际上是硬件工程,而我现在与统计算法打交道才一年多一点。我目前的项目 是和几个数学家一起完成的,所以大部分的理论工作是由他们完成的。我相信他们会更好地与你讨论这些话题的:)。不过,令人着迷的东西。我确实记得几个月前出现过编造的历史这个话题,但我们一直没有讨论这个问题。仍然在测试 "真实 "的历史...(来自一个 "值得信赖的 "来源)。
 
菲利普。首先,非常感谢你的这些见解。
你说你提取市场的统计特征,然后创建综合市场数据,并在这些数据上运行蒙特卡洛模拟。这非常有趣,但不幸的是,这超出了我的技能。我已经开始阅读你发布的两个链接,但我必须说,我无法理解它们。我确实有大学背景,但不是数学或类似的专业。我的方法更多一些,让我们称之为 "实践"--至少从一个全权交易员的角度来看。真的很悲哀。你们可能不提供实习机会,对吗?

我知道这个你所谓的 "数量将推动质量的谬误"--因为我也已经失去了很多时间停留在这一点上。虽然我不会说我已经浪费了这些时间,但这是另一个问题。不,我进入这个讨论的原因是,此刻我正在加强我的开发过程本身。我将获得更多的数据来增加我的范围。我们也在研究用MT自动进行回测 的方案,等等。
 

Schnappi 我现在才看到你的帖子,我可以理解你的心情,也同意一开始这一切看起来相当复杂(可以肯定的是它并不简单),但永远不要让自己觉得这不是你在不久的将来某一天不能以自己的方式掌握的东西。 你不需要一个大学学位来理解和使用这些东西,你只需要有时间/奉献精神和个人动力来坚持,你将不可避免地掌握这些主题。

了解现有专业投资金融行业的一些术语和主题是有帮助的,这将在一定程度上缩短学习曲线,我希望我的帖子在这方面对你有帮助。 如果不是因为在我之前的人提供了他们的肩膀让我站在上面,我就不会有现在的成就。

我们这些 "土生土长 "的量化交易员都有很多共同点,我们的背景极其多样化,没有多少人接受过金融或编程方面的高等教育,但我们的目标是用坚韧和雄心来弥补在正规教育方面的不足。 这对托马斯-爱迪生很有效......从道德/道义的角度看,这不是最好的例子,但他的10000个灯泡原型的例子是故事的寓意。

你会认识到,也许你已经认识到,你个人的进步速度是迭代性的。 你学习了更多的编码技术,你的代码变得更加复杂,你学习了更多关于过去有效和无效的交易策略,你更多地磨练自己的策略,你学习了风险管理与风险测量,你开始以你甚至没有意识到的方式处理你的毁灭的风险。

我的方法看起来很复杂,但并不意味着这种复杂是必要的......更简单和更不复杂的方法可能在各方面都更胜一筹......我只是还没有聪明到能想出办法。 有很多愚蠢的复杂方法来制造灯泡,而更复杂的方法并不能保证有更好的灯泡。

因此,不要被你可能对你的方法的复杂性/简单性与我的方法的缺乏之间的任何看法所吓倒......你很可能是在正确的轨道上,而我则是在左边的领域。

 

1005phillip: 2010.03.17 18:38

这个(附件中的mq4脚本)是我用来完成工作的,它并不漂亮(代码),可以做一些清理工作,并改变重复的if的开关,等等。

注意:W1蜡烛的开盘时间自动对准交易周的第一天(周一),MN蜡烛的开盘时间自动对准新月份的第一个开市日。
这个脚本被破坏了。交易周的第一天是周日(22点)而不是周一。而且它不能处理周五或周一的假期。简单的修复。
      time0=Time[i];
//    if((TimeDayOfWeek(time0)==1 && TimeDayOfWeek(Time[i+1])==5) || i==0)
      if (TimeDayOfWeek(time0) < TimeDayOfWeek(Time[i+1])         || i==0)