黑客入门_黑客随机散步假说

来源:技术个人工作总结 时间:2019-02-10 04:00:15 阅读:

【www.bbjkw.net--技术个人工作总结】

黑客随机散步假说

  黑客会使伟大的交易者。在元数据层面上,黑客和交易者也做同样的事情:他们发现并利用系统的弱点。不同之处在于,黑客黑客攻击电脑,网络甚至是各种各样好坏的原因,而交易者则打破了金融市场的利润。一直让我着迷的一种类型的漏洞是随机数字生成器。你会看到,随机数生成器每天都用来加密数据和通信,但是如果随机数发生器有缺陷,那么它们停止加密安全黑客可以利用这些漏洞来解密加密的数据和通信。因此,随机数生成器需要通过鲁棒的随机性统计测试集,例如用于随机性的NIST密码测试套件,以确定它们是否足以用于加密用途。在这篇文章中,我们将对NIST测试套件进行各种金融市场回报,看看我们是否应该在理论上能够破解市场。

  文章大纲

  本文分为三个部分。第一部分将介绍随机散步假设的背景信息,并将随机性的统计定义与算法定义进行比较。第二部分将概述我的NIST测试套件的Python实现,包括每个测试的简要说明和源代码。第三部分和最后一节将对一些金融市场进行这些测试,并得出结论:市场是否是随机的,如果是随机的,则对这种随机性的性质进行评论。根据您对主题和时间限制的熟悉程度,您可能希望跳过一些部分。下面包含的所有代码都可以在我的存储库r4nd0m,GitHub上找到。

  另一方面,我很高兴地报告说,这个Python实现通过了NIST C文档中指定的所有单元测试,并且作为奖励,包括了大量的评论。鉴于这一事实,我希望该代码对实际的安全研究人员以及定量分析师和交易者都是有用的。也就是说,我的Python实现带有与NIST相同的免责声明,因此请花点时间查看README文件。

  背景信息

  本节介绍随机散步假说,它对定量金融的重要性。它还讨论了随机性的两个定义,即统计学和算法。

  随机游走假说

  现实世界中的许多系统表现出随机性的特征,包括例如埃博拉病毒,宇宙辐射的行为,悬浮在液体中的粒子的运动,运动在轮盘赌桌上的流行病的传播,金融市场根据随机散步假说...但在我们进入随机散步假说的细节之前,让我们来讨论一下Burton G. Malkiel教授的着名测试。以下摘录取自维基百科页面的随机散步假说。它非常简洁地描述了Malkiel教授的测试以及他从这个测试中得出的结论。

  “Burton G. Malkiel普林斯顿大学的经济学教授和“随机走向华尔街”的作家进行了一次考试,他的学生被给予一个最初价值五十美元的假设股票。每天的收盘价由硬币兑换决定。如果结果是头,价格会上涨一个半点,但如果结果是尾部,则会下跌半点。因此,每次价格有五十五个机会高于或低于前一天。从测试中确定周期或趋势。马尔基尔接着将图表和图表的结果以图表形式表示为一名指挥家,一名“试图通过”历史往往重演自己“这一假设去寻找过去模式来预测未来运动的人。指示员告诉Malkiel他们需要马上买入股票。由于硬币翻转是随机的,虚构的股票没有总体趋势。Malkiel认为这表明市场和股票可能随着翻转硬币而变化。“ - 维基百科

  实际上,这类似于“财务图灵测试”,其中熟悉市场的人们将被要求查看下面的时间序列,并确定哪些是实际的市场回报数据,哪一个被模拟使用一些随机过程。有一个去与以下三个图像。任一图像可能是真正的市场回报系列,或者只是来自经校准的赫斯顿随机波动率模型的输出。祝你好运猜猜!

  这很难,不是吗?这一观察结果导致早期定量研究人员调查股市回报率是否随机演变。市场回报随机演化的理论称为随机游走假说。这个理论可追溯到18世纪初,当时Jules Regnault和Louis Bachelier在股票期权回报中观察到随机性的特征。该理论后来被Maurice Kendall正式化,并于1965年被Eugene Fama在其随机走向股票市场的开创性论文中普及。

  尽管这些测试具有娱乐价值,但实际上并不能证明市场是随机的。他们所做的一切证明,对于人眼市场的回报,没有任何额外的信息,与随机过程是无法区分的。本结论本身并不提供关于市场随机特征的任何有用信息。此外,随机散步假说本身也有一些缺点:

  它将所有市场整合成一个均匀的桶,并不区分它们。

  它不能解释许多持续殴打市场的人的实证例子。

  它是基于随机性的统计定义而不是算法定义的意思,

  它不区分局部和全局随机性。

  它不涉及随机性的相对性的想法。

  本文的其余部分将解释随机性的算法定义的元素,即局部与全局随机性以及随机性的相对性,可以解释随机散步假设的意义与经验观察到的长期投资者市场表现之间的异常。它还将使用NIST的随机统计测试套件来比较不同的市场。

  无论我们喜欢还是讨厌,无论是对还是不对,我们都不能否认,行业量化分析师普遍采用随机散步假说,导致了量化金融领域的重大进步,特别是衍生证券和结构性产品估值。

  算法与随机的统计定义

  输出不可预测的任何函数被称为随机的(随机的)。类似地,其输出可预测的任何函数被认为是确定性的(非随机的)。使事情复杂化,许多确定性功能似乎是随机的。例如,我们在编程时使用的大多数随机数生成器实际上是确定性函数,其输出似乎是随机的。大多数随机数生成器不是真正的随机数,这就是为什么它们被标记为伪或准随机数发生器。

  为了测试随机散步假设的有效性,我们需要确定市场产生的输出(我们的函数)是随机的还是确定性的。在理论上,这个问题有一个算法和统计方法,但实际上只有统计方法才有用(因为很好的理由)。

  算法方法

  计算能力理论,也称为递归理论或后期阿兰图灵之后的图灵可计算性,是理论计算机科学的一个分支,处理可计算和不可计算功能的概念。在算术方面可以推算出可计算的函数,因为只要存在可以复制该函数的算法,函数是可计算的。换句话说,有一种算法,当给定函数的任何有效输入将始终返回正确的相应输出。

  如果随机性是不可预测性的属性,这意味着功能的输出永远不能被准确预测。逻辑上,这意味着所有随机过程都是不可计算的函数,因为没有可以存在准确复制该函数的算法。着名的Church-Turing论文指出,当且仅当它可以由图灵机计算(其他方法也存在)时,函数是可计算的。

  图灵机是通过根据规则表在无限磁带上操纵符号字母表来工作的假想设备。图灵机能够模拟任何算法,因此当给予无限的时间时,理论上能够计算任何和所有可计算的函数。

  所以呢?那么,由于可计算性和随机性之间的联系,为了证明或反驳随机游走假说,所有人都需要做的是使用图灵机确定是否存在复制市场(我们的功能)的算法。换句话说,存在一种算法,当给定任何有效的输入时,它将始终返回正确的相应输出...唉,这个世界上没有什么是简单的,因为这种验证(或反驳)随机游走假说的方法会持续到在停机问题。

  停电问题主要涉及确定程序是否停止,或者是否将继续无限期地运行。这个问题已被证明是无法解决的,这意味着无法预先知道程序是否停止。因此,使用图灵机尝试找到复制股票市场的算法的挑战是如果市场实际上是随机的,则不存在复制算法。

  这意味着图灵机器将需要在停止之前尝试所有可能的算法,这将永远是永远的。因此,就所有意图和目的而言,不可能证明市场是真正随机的。

  尽管如此,这些观察结果引起了一个非常有趣的领域,称为算法信息理论。算法信息理论关注于可计算性理论与信息理论之间的关系。算法信息理论定义了不同类型的随机性,最流行的定义是Martin-Löf随机性,它断言为了使序列真正随机,

  是不可压缩的。压缩涉及到使用较少信息的信息的一些无损表示。例如,无限长的二进制字符串01010101 ...可以更精确地表达为01,无限重复,而无限长的二进制字符串0110000101110110101 ...没有明显的模式,因此不能压缩到任何小于完全相同的二进制字符串,0110000101110110101 ....这相当于说如果字符串的Kolmogorov复杂度大于或等于字符串的长度,则该序列在算法上是随机的。

  通过随机性统计检验。对于随机性进行了许多统计测试,处理测试序列分布与假设为随机的任何序列的预期分布之间的差异。这将在下面的统计方法部分中更详细地讨论。

  不可能赚钱。这是一个有趣的概念,它简单地认为如果一个martㄧcan can can on on on on。。。。。。。。。。。。。。。。一个鞅是一个公平的游戏,过去事件的知识从来没有帮助预测未来的奖金的平均值的典范。人们可能会认为,金融市场的动量和均值回归异常的存在必然导致随机游走假说的出现。这些异常的问题是它们不是持久的,并且倾向于分解或表现出周期性的行为。因此,如果有的话,它们反驳了当地的随机散步假说(这在下面介绍)。

  随机性的统计学和算法定义的另一个有趣的区别是局部与全局随机性。如果一个序列长期出现是随机的,那么它被认为是全局随机的,尽管事实上序列的有限块可能看起来是非随机的。

  例如,序列01010100011010101110000000001 ...似乎是随机的,但是如果将序列分解成四个块[0001101010111] [000000000] [1 ...],则第一和第三块不显示为随机的。因此,该序列被认为表现出全局随机性,但仅表示部分局部随机性。

  将这种区分与随机散步假设相关联,我们应该能够区分局部和全局随机散步假说。全球随机游走假说将表明,从长远来看,市场似乎是随机的,而局部随机游走假说则表明,在一些最短时间内,市场似乎是随机的。这个世界观,至少在我看来,与价值,动量和平均回归因素等异常的经验观察一致,特别是当我们承认这些因素倾向于表现出周期性行为时。换句话说,与前面所示的序列一样,市场呈现出全局随机性,但是在有限的时间段内,局部随机性被破坏。

  市场呈现全球随机性,但局部随机性往往会在一定时间内崩溃;这些故障表现为异常,例如价值,动量和回归因素。

  不幸的是,我在任何地方都没有看到这个区别,我自己就个人对经验观察市场的看法和随机散步假说可以协调一致。随机性的算法定义的另一个区别是随机性与信息相关。

  在没有信息的情况下,许多系统可能会随机出现,尽管它们是确定性的。在统计学中,这被称为混杂变量。一个很好的例子是一个随机数发生器,只有在不存在用于产生该随机序列的种子的情况下才会出现随机数。另一个更有趣的例子是,市场回报可能看起来是随机的,但是在存在盈利报告和其他基本指标的情况下,明显的随机性可能会分解成非随机。

  在信息市场不存在或存在的情况下,市场可能出现的次数越来越少,即全球和本地市场随机性与市场现有信息的质量和数量相关。

  这两个理论是不可能证明的,但他们是我个人对市场的信念(除了我认为它们不是随机的,而是像许多其他复杂的自适应系统一样出现)。本文的其余部分将理论计算机科学,信息理论和经济背后的世界留下,并重点关注实际可以实现的内容,即将随机性统计测试应用于市场,以便识别潜在的交易机会/有吸引力的市场。

  统计方法

  当序列不显示任何可观察到的模式时,序列被称为统计学随机的。这不意味着真正的随机性,即不可预测性,因为大多数伪随机数发生器的输出是完全可预测的(当给定种子时)被认为是统计学随机的。一般来说,如果能够通过一系列用于随机性的测试,例如NIST套件,则序列标记为统计学随机的。大多数这些测试涉及测试由据称随机系统产生的输出的分布是否足够接近来自真正随机序列的分布。大多数这些测试是专门设计用于测试均匀随机性的,因此它们几乎总是应用于二进制序列(位串)。

  NIST Python实现

  本节提供了有关随机性的NIST测试套件的Python实现的实现级细节。所有的代码都可以在我的GitHub仓库r4nd0m中找到。在开发过程中,很多帮助来自NIST的NIST测试套件的C实现以及Ilja Gerhardt在Python 2.66中早期实现的NIST测试套件。不幸的是,由于Python 2.66和Python 3.4之间的所有变化,Ilja的代码都运行起来,这是我决定重新实现的另一个原因。

  项目结构

  整个项目分为六个阶段,一个把所有东西都拉到一起的主要脚本。每个类都包含独立代码,用于执行将NIST套件实际应用于历史市场回报所需的一个或多个功能。该项目的课程包括:

  r4nd0m- 这是用来把所有东西放在一起的主要脚本。

  RandomnessTester- 这个类包含所有的NIST测试。每个测试都是以静态方式实现的,因此可以将其从类中复制出来,并在其他地方使用。但是请注意,某些测试取决于Python中的scipy.special,scipy.fftpack,scipy.stats,numpy,os和copy包。还要注意,二进制矩阵秩变换测试取决于BinaryMatrix类。

  BinaryMatrix - 这个类封装了NIST文档中规定的算法来计算二进制矩阵的等级。这与用于计算矩阵秩的SVD方法不同,这就是为什么scipy.linalg包不能被使用的原因。这个类可能更多的是pythonic(欢迎拉请求)。

  BinaryFrame- 这个类,顾名思义,只是将大熊猫DataFrame转换为具有相同列名称的二进制字符串的字典。这个字典和十进制到二进制转换方法都封装在这个类中。RandomnessTester只需要一个BinaryFrame对象,并将所有NIST测试应用到字典中包含的每个二进制字符串。

  QuandlInterface和Argument- 这两个类共同工作,允许您与Quandl.com API进行接口,并下载并加入数据集列表。有趣的数据集列表可以在项目的MetaData文件夹中找到,您的个人身份验证令牌可以存储在计算机上的.private.csv本地文件中。您可以在在线的GitHub存储库的README.MD文件中找到更多信息。

  颜色 - 这个类只是使控件中的东西看起来很酷。

  二进制编码方法

  离散化包括将连续变量转换为离散变量。最流行的离散化方法是binning。分级涉及将连续变量的输出分类为互相排列的“仓”,每个“仓”表示随机变量可能落在的可能间隔。

  由于我们不知道市场回报的范围(我们的连续变量),我们只需将它们分为正回报和负回报,分别表示为1和0位。为了避免偏见,我们添加一个特殊情况,返回等于正好为0.0%,这些返回值表示为0和1,即01位字符串:

  b一世=f(r一世)=⎧⎩⎨1,0,01,如果[R一世>0.0如果[R一世<0.0如果[r一世=0.0b一世=f([r一世)={1,如果[r一世>0.00,如果[R一世<0.001,如果[R一世=0.0

  其中b一世b一世表示索引i处的位串中的位一世和r一世[R一世表示在时间i离散化的安全性产生的返回一世。如果安全性随着时间的推移而增加,则所得到的位串中的零和数的数目应该是均匀分布的。这将在下一节中更详细地讨论。

  实现和测试了两个额外的转换方法,这些方法分别将基点和浮点返回转换为二进制。这些问题是它们引入偏差,导致甚至强大的加密随机数生成器在套件中无法进行大量测试。

  测试01 - 频率(MONOBIT)

  该测试在给定的二进制序列中查看0比特到1比特的比例。假设序列是均匀分布的,这个比例应该接近1,这意味着1比特的数量大约等于0比特的数目。在这种情况下,由于0位表示下降日,1位表示上升日,因此该测试检查市场上下跌和上涨日均是否均匀分布,即同等可能。

  单一测试的失败可能表明了简单买入和持有策略的相对盈利能力,因为如果市场更有可能上涨而不是下跌,那么购买和持有市场可能是一个有利可图的交易策略。然而,这假设,以百分比表示的最高日的平均规模大于或等于下降百分比的平均规模。

  下面的Gist包含一个独立的Python方法,它实现了随机性的单调测试。已经对e的二进制扩展进行了1,000,000位的测试Ë,ππ,2-√2,和3-√3。

  有关此测试的更多信息,包括有关如何计算的精彩数学描述,工作示例和最小输入大小的建议,请参见以下参考文献:

  [1] Rukhin,Andrew,et al。用于加密应用程序的随机和伪随机数生成器的统计测试套件。Booz-Allen和Hamilton Inc Mclean Va,2001。

  [2]钟,凯莱,法里德爱沙尼亚。基本概率论:随机过程和数学金融的介绍。Springer科学与商业媒体,2012。

  [3]吉姆·皮特曼,概率。纽约:Springer-Verlag,1993(特别是第93-108页)。

  测试02 - 块频率测试

  该测试是Monobit测试的一般化,它在N中看到0比特到1比特的比例ñ大小M的块中号从给定的二进制序列中提取。假设均匀的随机性,0位和1位的数量应该是大约M2中号2每个块,即每个块平均填充多达1位和0位。在我们的上下文中,这个测试考察了在有限的“窗口”或时间段内上下天发生的概率。

  下面的Gist包含一个独立的Python方法,它实现了随机性的块频率测试。已经对e的二进制扩展进行了1,000,000位的测试Ë,ππ,2-√2,和3-√3。

  有关此测试的更多信息,包括有关如何计算的精彩数学描述,工作示例和最小输入大小的建议,请参见以下参考文献:

  [1] Rukhin,Andrew,et al。用于加密应用程序的随机和伪随机数生成器的统计测试套件。Booz-Allen和Hamilton Inc Mclean Va,2001。

  [2]麦克拉伦,尼克“模拟中的加密伪随机数”。快速软件加密。柏林柏林海德堡,1994年。

  [3] Knuth,Donald E.“Seminumerical Algorithms,The art of computer programming,Vol。2”(1981年)。

  [4] Abramowitz,Milton和Irene A. Stegun。数学函数手册:具有公式,图形和数学表格。第55号Courier Corporation,1964年。

本文来源:https://www.bbjkw.net/fanwen253878/

推荐访问:随机游走假说 随机漫步假说 消费的随机游走假说 黑客技术 黑客教程 黑客联盟 黑客吧 黑客工具 黑客图片 黑客软件 黑客基地 黑客小说 黑客帝国 中国黑客 黑客军团 黑客论坛 黑客网站 黑客入门 黑客电影
扩展阅读文章
热门阅读文章