精华内容
下载资源
问答
  • python用于测试的failIf,failUnless

    千次阅读 2015-07-27 09:23:51
    #!/usr/bin/python #-*- coding:utf-8 -*- import unittest class ArithTestSuper(unittest.TestCase): def setUp(self): print "seting up arithtest cases" def tearDown(self): print
    #!/usr/bin/python
    #-*- coding:utf-8 -*-
    
    import unittest
    
    class ArithTestSuper(unittest.TestCase):
        def setUp(self):
            print "seting up arithtest cases"
        def tearDown(self):
            print "cleaning up arithtest cases"
            
    class ArithTest(ArithTestSuper):
        def runTest(self):
            ''' test addtion and succeed '''
            print "running arithtest"
            self.failUnless(1+1==2,"fails")
            self.failIf(1+1!=2,"fails againg")
            self.failUnlessEqual(1+1,2,"more troble")


    后面的断言语句,可以这样理解,如果fail后面的语句为真,则发生错误


    例如 failIf          ,如果( IF 条件)为真,则fail ,同理,如果  (    unless 条件 ) 为真,则fail   ,unless的意思是:如果 不,这里等价于not,即(not 条件)如果条件为假,则fail,



    展开全文
  • 1.3 用于金融的Python 1.2节介绍了科技在金融中发挥作用的一些领域: 金融行业中的科技成本; 作为新业务和创新业务引擎的科技; 作为金融行业进入门槛的科技; 不断提升的速度、频率和数据量; 实时分析的...

    1.3 用于金融的Python

    1.2节介绍了科技在金融中发挥作用的一些领域:

    • 金融行业中的科技成本;
    • 作为新业务和创新业务引擎的科技;
    • 作为金融行业进入门槛的科技;
    • 不断提升的速度、频率和数据量;
    • 实时分析的兴起。本节,我们分析Python如何帮助你应对这些方面的多种挑战。不过首先让我从更为基础的方面——语言和语法介绍用于金融的Python。

    1.3.1 金融和Python语法

    在金融环境中迈出使用Python第一步的大部分人都可能要攻克某个算法问题。这和想要解出微分方程、求取积分或者可视化某些数据的科学工作者类似。一般来说,在这一阶段,对正规开发过程、测试、文档或者部署没有太多的要求。然而,这一阶段似乎是人们特别容易爱上Python的时候,主要原因是Python的语法总体上和用于描述科学问题或者金融算法的数学语法相当接近。

    我们可以通过一个简单的金融算法——通过蒙特卡洛模拟方法估计欧式看涨期权的价值来说明这一现象。我们将考虑Black-Scholes-Merton(BSM)模型,在这种模型中期权的潜在风险遵循几何布朗运动。

    假定我们使用以下数值化参数进行估值:

    • 初始股票指数水平S0=100;
    • 欧式看涨期权的行权价格K=105;
    • 到期时间T=1年;
    • 固定无风险短期利率r=5%;
    • 固定波动率σ=20%。

    在BSM模型中,到期指数水平是一个随机变量,由公式1-1给出,其中z是一个标准正态分布随机变量。

    公式1-1 Black-Scholes-Merton(1973)到期指数水平

     

    下面是蒙特卡洛估值过程的算法描述。

    (1)从标准正态分布中取得I个(伪)随机数z(i),i∈{1,2,…,I}。

    (2)为给定的z(i)和公式1-1计算所有到期指数水平ST(i)。

    (3)计算到期时期权的所有内在价值hT(i)=max(ST(i)−K,0)。

    (4)通过公式1-2中给出的蒙特卡罗估算函数估计期权现值。

    公式1-2 欧式期权的蒙特卡洛估算函数

     

    现在,我们需要将这个问题和算法翻译为Python代码。下面的代码将实现一些必要的步骤。

    
     
    In [6]: import math import numpy as np ❶ In [7]: S0 = 100. ❷ K = 105. ❷ T = 1.0 ❷ r = 0.05 ❷ sigma = 0.2 ❷ In [8]: I = 100000 ❷ In [9]: np.random.seed(1000) ❸ In [10]: z = np.random.standard_normal(I) ❹ In [11]: ST = S0 * np.exp((r - sigma ** 2 / 2) * T + sigma * math.sqrt(T) * z) ❺ In [12]: hT = np.maximum(ST - K, 0) ❻ In [13]: C0 = math.exp(-r * T) * np.mean(hT) ❼ In [14]: print('Value of the European call option: {:5.3f}.'.format(C0)) ❽ Value of the European call option: 8.019.

    ❶ NumPy在这里作为主程序包使用。

    ❷ 定义模型并模拟参数值。

    ❸ 随机数生成器种子值固定。

    ❹ 提取标准正态分布随机数。

    ❺ 模拟期末价值。

    ❻ 计算期权到期收益。

    ❼ 计算蒙特卡洛估算函数。

    ❽ 打印输出估算结果。

    以下3个方面值得注意。

    语法

    Python语法与数学语法相当接近,例如参数赋值的方面。

    翻译

    每条数学或者算法语句一般都可以翻译为单行Python代码。

    向量化

    NumPy的强项之一是紧凑的向量化语法,例如,允许在单一代码行中进行10万次计算。

    这段代码可以用于IPython或Jupyter Notebook等交互式环境。但是,需要频繁重用的代码一般组织为所谓的模块(或者脚本),也就是带有.py后缀的Python(文本)文件。本例的模块如例1-1所示,可以将其保存为名为bsm_msc_euro.py的文件。

    例1-1 欧式看涨期权的蒙特卡洛估值

    
     
    # # Monte Carlo valuation of European call option # in Black-Scholes-Merton model # bsm_mcs_euro.py # # Python for Finance, 2nd ed. # (c) Dr. Yves J. Hilpisch # import math import numpy as np # Parameter Values S0 = 100. # initial index level K = 105. # strike price T = 1.0 # time-to-maturity r = 0.05 # riskless short rate sigma = 0.2 # volatility I = 100000 # number of simulations # Valuation Algorithm z = np.random.standard_normal(I) # pseudo-random numbers # index values at maturity ST = S0 * np.exp((r - 0.5 * sigma ** 2) * T + sigma * math.sqrt(T) * z) hT = np.maximum(ST - K, 0) # payoff at maturity C0 = math.exp(-r * T) * np.mean(hT) # Monte Carlo estimator # Result Output print('Value of the European call option %5.3f.' % C0)

    这一小节中的简单算法示例说明,Python的基本语法很适合为经典的科学语言二重奏——英语和数学来提供补充。在科学语言组合中添加Python能使其更加全面。我们现在拥有:

    • 用于写作和谈论科学、金融等问题的英语;
    • 用于简洁、精确地描述抽象特征、算法、复数等并为其建模的数学;
    • 从技术上建立抽象特征、算法、复数等的模型并加以实现的Python。

     

    数学和Python语法 

    几乎没有任何编程语言像Python这样接近数学语法。因此,数值算法很容易从数学表示翻译为Python实现。通过Python,我们可以在这些领域中高效地进行原型化、开发和代码维护。

    在某些领域中,使用伪代码是常见的做法,这引入了第 4 个语言家族成员。举个例子,伪代码的任务是以更技术性的方式表示金融算法,不但与数学表示接近,而且还接近于技术实现。除了算法本身,伪代码还考虑了计算机的工作原理。

    采用这种方法一般是因为,使用大部分编程语言时,技术实现和正式的数学表现形式的距离相当“遥远”。大部分编程语言都必须包含许多只在技术上需要的元素,但在数学和代码中很难看到等价的元素。

    时下,Python常常以伪代码的方式被使用,因为它的语法和数学很类似,而且技术“开销”可以控制到最低。这一点是通过该语言所体现的一些高层概念实现的,这些概念不仅有其优势,也带来了风险和其他代价。不过可以肯定,我们可在需求出现的时候使用Python,从一开始就遵循其他语言可能需要的严格实现和编码方法。从这个意义上说,Python可以在两个世界:高层次的抽象和严格的实现中提供最佳的平衡。

    1.3.2 Python的效率和生产率

    从较高的层次看,使用Python的好处可以从以下3个维度衡量。

    效率

    Python如何更快地获得结果、节约成本、节约时间?

    生产率

    Python如何在相同的资源(人员、资产等)下完成更多的工作?

    质量

    Python能够让我们做哪些替代技术所不能做到的事情?

    对这些特性的讨论当然不可能很全面。然而,可以将某些特性作为出发点。

    1.在更短的时间里得到成果

    Python效率较为明显的领域之一是交互式的数据分析。这些领域从IPython、Jupyter Notebook等有力工具和pandas之类的程序中库获益良多。

    假设你是一位正在撰写硕士论文的金融专业学生,对标普 500 指数感兴趣,想要分析 1 年的历史指数水平,以了解指数在这段时间内的波动性,你希望找到证据证明这种变动性与某些典型的模型假设相反,它是随时间变动而非固定。而且,应该对结果进行可视化,你要进行的主要的工作如下:

    • 从网络上下载指数水平数据;
    • 计算年化对数收益率的滚动标准差(波动率);
    • 绘制指数水平数据和波动性结果图表。

    这些任务很复杂,在不久之前还被认为是专业金融分析师才能完成的。而在今天,即使是金融专业的学生也可以轻松地对付这类问题。我们来看看具体的做法——此时还不用操心语法的细节(后续的章节将对所有细节进行解释):

    
     
    In [16]: import numpy as np ❶ import pandas as pd ❶ from pylab import plt, mpl ❷ In [17]: plt.style.use('seaborn') ❷ mpl.rcParams['font.family'] = 'serif' ❷ %matplotlib inline In [18]: data = pd.read_csv('../../source/tr_eikon_eod_data.csv', index_col=0, parse_dates=True) ❸ data = pd.DataFrame(data['.SPX']) ❹ data.dropna(inplace=True) ❹ data.info() ❺ <class 'pandas.core.frame.DataFrame'> DatetimeIndex: 2138 entries, 2010-01-04 to 2018-06-29 Data columns (total 1 columns): .SPX 2138 non-null float64 dtypes: float64(1) memory usage: 33.4 KB In [19]: data['rets'] = np.log(data / data.shift(1)) ❻ data['vola'] = data['rets'].rolling(252).std() * np.sqrt(252) ❼ In [20]: data[['.SPX', 'vola']].plot(subplots=True, figsize= (10, 6)); ❽

    ❶ 导入NumPy和pandas。

    ❷ 导入matplotlib并配置Jupyter绘图样式和方法。

    ❸ pd.read_csv()可以读取远程或者本地存储的逗号分隔值(CSV)形式数据集。

    ❹ 选取一个数据子集,删除NaN(非数值)值。

    ❺ 显示关于数据集的一些元信息。

    ❻ 以向量化的方式(在Python级别上“无循环”)计算对数收益率。

    ❼ 得出滚动年化波动率。

    ❽ 最后绘制两个时间序列。

    图1-1展示了这一简短交互会话所得到的图形化结果。用几行代码就足以完成金融分析中的典型复杂任务:数据收集、复杂和重复的数学计算以及结果的可视化,令人觉得不可思议。从这个例子中可以看到,pandas使整个时间系列的处理变得就像浮点数上的数学运算那样容易。

     

    图1-1 标普500收盘价和年化波动率

    将这个例子转换到专业的金融环境中,可以看出金融分析师在应用提供高层次抽象的合适Python工具和库的时候,能够将焦点放在自身的领域上,而不用关心复杂的技术细节。分析师可以快速反应,几乎实时地提供宝贵的调见,确保自己比竞争对手先行一步。这种效率的提高很容易转换为可度量的财务效果。

    2.确保高性能

    一般来说,Python的语法相当简洁,编码效率相对高是为人们所接受的说法。但是,由于Python本质上是解释型语言,因此存在一种偏见,认为Python对于金融学中的计算密集任务来说速度过于缓慢。确实,在某些特定的实现方法下,Python可能确实很慢,但是,它并不一定都那么缓慢——它可以在几乎所有应用领域中表现出高性能。理论上,人们至少可以找到3种提高性能的策略。

    惯例和范型

    一般来说,Python可以用许多不同的方式得出相同的结果,但是这些方式的性能特性有相当大的区别;只要选择合适的方式(如特定的实现方法、明智地使用数据结构、通过向量化避免循环或者使用pandas等特定库),就可以显著地改善效果。

    编译

    现在,有许多高性能库可以提供重要函数的编译版本,或者将Python代码静态或者动态地(在运行时或者调用时)编译为机器代码,这种代码的速度比纯Python代码要快好几个数量级。比较流行的高性能库有Cython和Numba等。

    并行化

    许多计算任务(特别是金融学中的计算任务)可以从并行执行中得到很大好处;这对Python来说不足为奇,可以轻松地实现。

     

    使用Python实现高性能计算

    Python本身不是一种高性能计算技术。但是,Python已经发展成为一种访问当前高性能技术的理想平台。在这个意义上,Python已经成为高性能计算的“黏合剂”语言。

    本节坚持使用简洁实用的例子介绍上述3种策略(后续的章节将详细介绍这些策略)。金融分析中相当常见的任务之一是在大量数字上计算复杂的数学表达式。在这方面,Python本身就提供了所有必需的功能:

    
     
    In [21]: import math loops = 2500000 a = range(1, loops) def f(x): return 3 * math.log(x) + math.cos(x) ** 2 %timeit r = [f(x) for x in a] 1.59 s ± 41.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

    Python解释程序在本例中需要1.6s的时间来完成250万次函数f的计算。使用NumPy可以完成相同的任务,它提供了优化(也就是预先编译)的函数来处理这种基于数组的运算:

    
     
    In [22]: import numpy as np a = np.arange(1, loops) %timeit r = 3 * np.log(a) + np.cos(a) ** 2 87.9 ms ± 1.73 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

    NumPy可以将执行时间大幅缩减到约88ms。甚至有一个库是专门用于此类任务的,这个库叫作numexpr,得名于“数值表达式”(Numerical Expressions)。它可以编译表达式来改善NumPy通用功能的性能。例如,在执行期间避免ndarray对象在内存中复制:

    
     
    In [23]: import numexpr as ne ne.set_num_threads(1) f = '3 * log(a) + cos(a) ** 2' %timeit r = ne.evaluate(f) 50.6 ms ± 4.2 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

    使用这种更特殊的方法可以进一步将执行时间降低至约50ms。而且,numexpr还内建了并行执行单独运算的功能。这使我们能够使用一个CPU的多个线程:

    
     
    In [24]: ne.set_num_threads(4) %timeit r = ne.evaluate(f) 22.8 ms ± 1.76 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

    本例利用了4个线程,执行时间进一步下降到23ms,总体的性能提升了90倍。特别要注意的是,这类改善不需要修改基本问题/算法,也不用了解任何有关编译和并行化问题的知识,即使是非专业人士也可以从较高的层次上去利用这种功能。当然,前提是你必须知道存在这些功能。

    这个例子说明,Python提供了一些选项可以更好地利用现有资源,也就是提高生产率。利用并行化方法,可以在同样的时间里完成3倍于串行化方法的计算,这只需要告诉Python使用多个CPU线程(而非仅使用一个线程)即可。

    1.3.3 从原型化到生产

    从执行速度的角度看,交互式分析的效率和性能当然是Python值得考虑的两个好处。在金融学中使用Python的另一个好处初看似乎比较不起眼,但是细看之下就会发现它本身是一个重要的战略因素。这就是以端到端(从原型化到生产)的方式使用Python的可能性。

    当今全球金融机构的金融开发过程往往是一个分离的两步式过程。一方面,量化分析师(quants,也称宽客)负责模型开发和技术原型化。他们喜欢使用MatLab和R等工具和环境实现快速、交互式的应用程序开发。在开发的这一阶段,性能、稳定性、异常管理、数据访问分离和分析等问题都不重要。人们的主要目标是概念或者原型的验证,原型用于展现某种算法或者整个应用程序必需的主要功能。

    一旦原型完成,IT部门中的开发人员接管工作,他们负责将现有原型代码翻译为可靠、易于维护和高性能的生产代码。这一阶段中,通常在用于满足生产性能的C++或者Java语言中有一个范型转换的过程。而且,正规的开发过程还要用它专业工具、版本控制等技术。

    这种两步式方法会产生一些意外的结果。

    效率低下

    原型代码不能重用;算法必须实现两次;多余的工作消耗时间和资源;转译时产生的风险。

    多种技能集

    不同部门展现不同的技能集合,使用不同的语言实现“相同的工作”。

    遗留代码

    代码必须以不同的语言存在和维护,并使用不同的实现风格(例如,从架构的观点上看)。

    另一方面,使用Python可以实现合理化的端到端过程——从最初的交互式原型化步骤到高可靠性、易于维护的生产代码。不同部门之间的沟通变得更加简单,工作人员的培训也更为合理,只有一种主要语言覆盖金融应用构建的所有领域,还避免了在开发过程不同步骤中使用不同技术造成的低效和冗余性。总而言之,Python可以为金融应用开发和算法实现提供一致性的技术框架。

    1.4 数据驱动和人工智能优先的金融学

    在2018年8月更新第2版的这一节时,2014年本书第1版中有关科技与金融学之间关系的言论似乎仍然适用且重要。但是,本节将讲述金融业的两个重要趋势,它们将从根本上重塑这个行业。这两个趋势主要是在过去的几年内形成的。

    1.4.1 数据驱动金融学

    最重要的一些金融理论(如MPT和CAPM)可以追溯到上世纪50年代和60年代。然而,它们仍然是经济、财务、金融工程和商业管理领域教育的基石。这可能令人惊讶,因为大部分此类理论的实证支持相当贫乏,而证据往往完全与理论相反。另一方面,它们的流行性也是可以理解的,因为它们接近于人们对金融市场表现的期望,而且,它们是建立在一些吸引人(通常过于简单)的假设之上的简洁数学理论。

    科学方法(如物理学)始于数据(如来自试验或者观察的数据),然后得出假设和理论,并用数据加以测试。如果测试结果是肯定的,那可以对这些假设和理论进行提炼,并以合适的方法记录下来,例如以研究型论文的方式发表。如果测试结果是否定的,假设和理论将被抛弃,并开始寻找复合数据的新理论。由于物理定律在一段时间里是稳定的,所以一旦发现并对齐进行了完备的测试,那么在最佳状况下,通常可以认为是永远成立的。

    (计量)金融学的历史大部分与科学方法相悖。在许多情况下,理论和模型是在简化的数学假设下“从头”开发的,目标是发现金融学核心问题的简练回答。金融学的流行假设是,金融工具的回报呈标准正态分布,各种利率之间呈线性关系。由于这些现象在金融市场上很难看到,这些简单理论的实证往往很缺乏,也就不值得惊讶了。许多金融理论和模型都是首先提出公式、证明并发表,然后才进行实证测试的。在某种程度上,这当然是因为上世纪50年代或者70年代甚至更晚的时候,还不存在合适形式的金融数据,而今天就连攻读金融学士学位的学生都能得到这些数据。

    20世纪90年代初期到中期,金融机构所能得到的此类数据急剧增加。今天,甚至进行金融研究或者参与算法交易的个人都可以得到大量的历史数据,也可以通过流服务得到实时数据。这使我们可以专注于科学方法,科学方法通常从数据开始,然后得出思路、假设、模型和策略。

    用一个简单的例子就可以说明,如今在本地机器上利用Python和Eikon Data APIs订阅大规模专业数据有多么简单。下面的例子是读取的苹果公司股票常规交易日中一个小时的分笔交易数据。读取的报价数据(包括交易量信息)大约有15000条。由于股票代码为AAPL,所以路透金融工具代码(RIC)为AAPL.0:

    
     
    In [26]: import eikon as ek ❶ In [27]: data = ek.get_timeseries('AAPL.O', fields='*', start_date='2018-10-18 16:00:00', end_date='2018-10-18 17:00:00', interval='tick') ❷ In [28]: data.info() ❷ <class 'pandas.core.frame.DataFrame'> DatetimeIndex: 35350 entries, 2018-10-18 16:00:00.002000 to 2018-10-18 16:59:59.888000 Data columns (total 2 columns): VALUE 35285 non-null float64 VOLUME 35350 non-null float64 dtypes: float64(2) memory usage: 828.5 KB In [29]: data.tail() ❸ Out[29]: AAPL.O VALUE VOLUME Date 2018-10-18 16:59:59.433 217.13 10.0 2018-10-18 16:59:59.433 217.13 12.0 2018-10-18 16:59:59.439 217.13 231.0 2018-10-18 16:59:59.754 217.14 100.0 2018-10-18 16:59:59.888 217.13 100.0

    ❶ Eikon Data API需要订阅和API连接才能使用。

    ❷ 读取苹果公司(AAPL.0)股票分笔数据。

    ❸ 显示最后5行数据。

    Eikon Data API不仅提供了对结构化金融数据(如历史报价数据)的访问,还可以访问新闻等非结构化数据。下面的例子读取一小部分新闻的元数据,并以全文本方式显示其中一篇文章开头的内容。

    
     
    In [30]: news = ek.get_news_headlines('R:AAPL.O Language:LEN', date_from='2018-05-01', date_to='2018-06-29', count=7) ❶ In [31]: news ❶ Out[31]: versionCreated \ 2018-06-28 23:00:00.000 2018-06-28 23:00:00.000 2018-06-28 21:23:26.526 2018-06-28 21:23:26.526 2018-06-28 19:48:32.627 2018-06-28 19:48:32.627 2018-06-28 17:33:10.306 2018-06-28 17:33:10.306 2018-06-28 17:33:07.033 2018-06-28 17:33:07.033 2018-06-28 17:31:44.960 2018-06-28 17:31:44.960 2018-06-28 17:00:00.000 2018-06-28 17:00:00.000 text \ 2018-06-28 23:00:00.000 RPT-FOCUS-AI ambulances and robot doctors: Chi... 2018-06-28 21:23:26.526 Why Investors Should Love Apple's (AAPL) TV En... 2018-06-28 19:48:32.627 Reuters Insider - Trump: We're reclaiming our ... 2018-06-28 17:33:10.306 Apple v. Samsung ends not with a whimper but a... 2018-06-28 17:33:07.033 Apple's trade-war discount extended for anothe... 2018-06-28 17:31:44.960 Other Products: Apple's fast-growing island of... 2018-06-28 17:00:00.000 Pokemon Go creator plans to sell the tech behi... storyId \ 2018-06-28 23:00:00.000 urn:newsml:reuters.com:20180628:nL4N1TU4F8:6 2018-06-28 21:23:26.526 urn:newsml:reuters.com:20180628:nNRA6e2vft:1 2018-06-28 19:48:32.627 urn:newsml:reuters.com:20180628:nRTV1vNw1p:1 2018-06-28 17:33:10.306 urn:newsml:reuters.com:20180628:nNRA6e1oza:1 2018-06-28 17:33:07.033 urn:newsml:reuters.com:20180628:nNRA6e1pmv:1 2018-06-28 17:31:44.960 urn:newsml:reuters.com:20180628:nNRA6e1m3n:1 2018-06-28 17:00:00.000 urn:newsml:reuters.com:20180628:nL1N1TU0PC:3 sourceCode 2018-06-28 23:00:00.000 NS:RTRS 2018-06-28 21:23:26.526 NS:ZACKSC 2018-06-28 19:48:32.627 NS:CNBC 2018-06-28 17:33:10.306 NS:WALLST 2018-06-28 17:33:07.033 NS:WALLST 2018-06-28 17:31:44.960 NS:WALLST 2018-06-28 17:00:00.000 NS:RTRS In [32]: story_html = ek.get_news_story(news.iloc[1, 2]) ❷ In [33]: from bs4 import BeautifulSoup ❸ In [34]: story = BeautifulSoup(story_html, 'html5lib').get_text() ❹ In [35]: print(story[83:958]) ❺ Jun 28, 2018 For years, investors and Apple AAPL have been beholden to the iPhone, which is hardly a negative since its flagship product is largely responsible for turning Apple into one of the world's biggest companies. But Apple has slowly pushed into new growth areas, with streaming television its newest frontier. So let's take a look at what Apple has planned as it readies itself to compete against the likes of Netflix NFLX and Amazon AMZN in the battle for the new age of entertainment.Apple's second-quarter revenues jumped by 16% to reach $61.14 billion, with iPhone revenues up 14%. However, iPhone unit sales climbed only 3% and iPhone revenues accounted for over 62% of total Q2 sales. Apple knows this is not a sustainable business model, because rare is the consumer product that can remain in vogue for decades. This is why Apple has made a big push into news,

    ❶ 读取一小部分新闻的元数据。

    ❷ 读取一篇文章的全部文本,形式为HTML文档。

    ❸ 导入BeautifulSoup HTML解析库并进行后续操作。

    ❹ …以纯文本方式(str对象)提取内容。

    ❺ 打印新闻的开头。

    尽管这两个例子很浅显,但它们说明,通过Python包装器库和数据订阅服务,可以以标准化、高效的方式得到结构化和非结构化的金融历史数据。在许多情况下,个人甚至可以使用FXCM集团、LLC等交易平台(在第14章和第16章中会讲到)来免费获得类似的数据集。一旦在Python级别上得到数据(独立于原始来源),就可以利用Python数据分析生态系统的全部功能了。

     

    数据驱动金融学

    近年来,数据成了金融业的推动力。即使最大、最成功的对冲基金也自称是“数据驱动”的,而非“金融驱动”的。越来越多的服务产品向大小机构及个人提供海量数据。Python通常被选为与这些API交互、处理和分析数据的编程语言。

    1.4.2 人工智能优先金融学

    由于通过编程API能够取得大量金融数据,所以在金融问题(如算法交易)上应用人工智能(AI)方法、特别是机器与深度学习(ML,DL)就变得非常容易,也更有成果了。

    Python可以称得上AI界的“宠儿”。它往往被AI研究人员和从业者选为编程语言。从这个意义上说,金融领域从不同领域的发展中得益,这些领域有时甚至与金融没有太大的联系。举个例子,深度学习所用的TensorFlow开源程序库是Google公司开发和维护的,用于其母公司Alphabet自动驾驶汽车的制造和销售上。

    TensorFlow当然和股票自动算法交易一点关联都没有,但却可以用于预测金融市场的变动。第15章提供了许多这方面的例子。最广泛使用的Python ML程序库是scikit-learn。下面的代码以高度简化的方式说明:ML 分类算法如何用来预测期货价格变动方向,并以这些预测为基础制定一个算法交易策略。所有细节将在第15章中解释,因此这个例子相当简洁。首先,导入数据,准备期货数据(定向滞后对数收益率数据)。

    
     
    In [36]: import numpy as np import pandas as pd In [37]: data = pd.read_csv('../../source/tr_eikon_eod_data.csv', index_col=0, parse_dates=True) data = pd.DataFrame(data['AAPL.O']) ❶ data['Returns'] = np.log(data / data.shift()) ❷ data.dropna(inplace=True) In [38]: lags = 6 In [39]: cols = [] for lag in range(1, lags + 1): col = 'lag_{}'.format(lag) data[col] = np.sign(data['Returns'].shift(lag)) ❸ cols.append(col) data.dropna(inplace=True)

    ❶ 选择苹果公司(AAPL.0)历史日终数据。

    ❷ 计算整个历史数据内的对数收益率。

    ❸ 生成带有定向滞后对数收益率数据(+1或者−1)的DateFrame列。

    接下来,为支持向量机(SVM)算法、模型拟合和预测步骤实例化一个模型对象。图1-2说明,根据预测买进和卖出苹果公司股票的基于预测交易策略的表现胜过被动的基准股票投资方法。

     

    图1-2 基于ML的算法交易策略与被动基准投资的对比(苹果公司股票)

    
     
    In [40]: from sklearn.svm import SVC In [41]: model = SVC(gamma='auto') ❶ In [42]: model.fit(data[cols], np.sign(data['Returns'])) ❷ Out[42]: SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf', max_iter=-1, probability=False, random_state=None, shrinking=True, tol=0.001, verbose=False) In [43]: data['Prediction'] = model.predict(data[cols]) ❸ In [44]: data['Strategy'] = data['Prediction'] * data['Returns'] ❹ In [45]: data[['Returns', 'Strategy']].cumsum().apply(np.exp).plot( figsize=(10, 6)); ❺

    ❶ 实例化模型对象。

    ❷ 根据期货和标签数据(全部是定向的)拟合模型。

    ❸ 使用拟合模型创建预测(样本内),这同时是交易策略的头寸(买入或者卖出)。

    ❹ 根据预测值和基准对数收益率计算交易策略的对数收益率。

    ❺ 绘制基于ML交易策略表现与被动基准投资表现的对比曲线。

    这里采用的简化方法没有考虑交易成本,也没有将数据集分为训练和测试子集。但是,这个例子说明,至少从技术意义上,将ML算法应用到金融数据有多么简单。在实践中,需要考虑一些重要的因素(参见Lopez de Prado(2018))。

     

    人工智能优先金融学

    AI将像对待其他领域一样,重塑金融行业。通过编程API功能可以取得大量金融数据,这成为了该领域的引擎。第13章中介绍AI、ML和DL基本方法,并在第15章和第16章中将其应用到算法交易中。不过,全面介绍人工智能优先金融学需要一本专门的图书。

    作为数据驱动金融学的自然延伸,不管从研究还是从业者的角度,金融学中的人工智能当然也是一个令人痴迷和兴奋的领域。本书在不同背景下使用了多种AI、ML和DL方法,但总体的焦点与本书的副标题相符,仍是数据驱动金融学所需的Python基本技术与方法。不过,这些技术与方法对人工智能优先金融学同样重要。

    1.5 结语

    Python作为一种语言,但更多的是作为生态系统,是金融业理想的技术框架。它的特性中有许多好处,比如简洁的语法、高效的开发方法和原型化及生产的易用性等。利用Python大量的可用库和工具,我们似乎能够应付当今金融业中分析、数据量和频率、依从性及监管所引发的大部分问题。即使在较大型的金融机构中,它也具备提供单一、强大、一致性的框架,简化端到端开发和生产工作的潜力。

    此外,Python已经成为人工智能、特别是机器与深度学习工作者选择的编程语言。因此,Python对于数据驱动金融学和人工智能优先金融学来说也是合适的语言,这两种当今的趋势将从根本上重塑金融学和金融行业。

    本文摘自《Python金融大数据分析 第2版》

     

    • 金融科技算法交易量化金融教程书籍
    • 详细讲解使用Python分析处理金融大数据的专业图书
    • 将人工智能应用于金融开发的实战指南,金融应用开发领域从业人员的常备读物

    《Python金融大数据分析 第2版》分为5部分,共21章。第1部分介绍了Python在金融学中的应用,其内容涵盖了Python用于金融行业的原因、Python的基础架构和工具,以及Python在计量金融学中的一些具体入门实例;第2部分介绍了Python的基础知识以及Python中非常有名的库NumPy和pandas工具集,还介绍了面向对象编程;第3部分介绍金融数据科学的相关基本技术和方法,包括数据可视化、输入/输出操作和数学中与金融相关的知识等;第4部分介绍Python在算法交易上的应用,重点介绍常见算法,包括机器学习、深度神经网络等人工智能相关算法;第5部分讲解基于蒙特卡洛模拟开发期权及衍生品定价的应用,其内容涵盖了估值框架的介绍、金融模型的模拟、衍生品的估值、投资组合的估值等知识。

    展开全文
  • python用于工业自动化的测试

    千次阅读 2015-04-13 23:09:39
    测试需求上来看,满足即时修改的优势。
    从测试需求上来看,满足即时修改的优势。
    
    展开全文
  • Python自动化是做什么的软件测试里面有Python自动化测试这个课程吗?在人工智能+大数据的飞速发展的大环境下,Python开发语言日渐火爆,Python自动化测试也将逐渐取代传统的软件测试,它属于后起之秀,吸取了功能、...

    Python自动化是做什么的

    软件测试里面有Python自动化测试这个课程吗?

    在人工智能+大数据的飞速发展的大环境下,Python开发语言日渐火爆,Python自动化测试也将逐渐取代传统的软件测试,它属于后起之秀,吸取了功能、性能、接口、自动化等专项测试领域的优点;以后将在多个领域渐渐成为国内大部分质量控制、质量管理

    20200513205355.png

    PYTHON怎样编写自动化

    python 有一个很优秀的自动化框架叫做selenium 但是在写程序之前,需要明确所操作的步骤是否是可重复性 然后定制流程计划 然后通过代码实现 python自动是一个十分强大的功能 如果想要了解更详细的内容可以搜索python selenium 获得更多更详细的内容

    Python用于工业控制自动化测试怎么样

    同在软件测试岗位。由于同样初学python,所以没有太多的实践经验。 使用python的单元测试框架,可以建立测试类,构造测试集。 测试类中包含了common的测试方法定义,包括测试开始前建立测试环境的setUp方法和测试完成后清理还原环境的tearDown方

    新人学PYTHONCSS布局HTML小编今天和大家分享意见 C++ 自动化 工控

    各位前辈你们好。 目前我已经毕业. 学PYTHON的话, 纯粹出于个人兴趣, 想最重要的是经常用,python的话,用2.7版就可以了,python3和以前很不一样。python刚开始不需要用IDE,eclipse没什么必要。用自带的IDLE就可以了。 遇到项目尽量用python来解决试试看,就会有提高了。 基本上不会很难入门。

    python 适合做什么开发

    python适合开发什么请给出详细一点的 最好指出在这个领域成熟的项目比如主要可以做小程序,爬虫程序,用于系统编程等等还是很广泛的。 Python 的应用领域分为下面几类。下文将介绍一些Python 具体能帮我们做的事情。但我们不会对各个工具进行深入探讨,如果你对这些话题感兴趣,请从老男孩python培训网站或其他一些资

    python可以实现桌面应用的自动化操作吗

    可以,通过代码运行; 比如我下面这段给出的example,可以完成你的需CSS布局HTML小编今天和大家分享。

    新人学PYTHON编程CSS布局HTML小编今天和大家分享意见 C++ 自动化

    各位前辈你们好. 目前我已经毕业. 学PYTHON的话, 纯粹出于个人兴趣, 想Python是一个不错的编程入门语言,一般快的话可以在2到3天内学会基本内容,开始进行简单的程序设计,同时对于最初使用python其实不用eclipse的,都是纯文本的,写字本就可以编写代码,这样你也不会因为eclipse的使用分散学习Python的注意了。

    如何用python做自动化测试

    编写Python版本的minicom,这个是自动化测试日志记录的需要 用于控制串口输出的字符颜色,高亮显示出错信息,方便开发者在线调试问题

    控制程控电源、程控开关,这些可以自动化测试的硬件基础

    怎么用python写自动化脚本

    #。/usr/bin/envpythonimportsysstr=Truewhile(str):dig=int(input())ifdig>100:print'pleaseinputmunbetween0~100'elifdig>=90:print'A'elifdig>=80:print'B'elifdig>=70:print'C'elifdig>=60:prin

    怎么用python做自动化测试

    用python做自动化测试,主要是接口测试和UI自动化测试。 自动化测试还要学习的有很多,selinum、webdriver、monkey、APP测试等等这些都要学习的,建议你去鲁德,课程多样化,学习比较扎实。

    展开全文
  • 用于测试android手机的python脚本是怎么写出来的,需要准备哪些知识?能推荐下相关书籍和资料吗?谢谢了,好人一生平安#
  • python教程全解 需要的环境 浏览器(Firefox/Chrome/IE..) Python Selenium Selenium IDE(如果用Firefox) FireBug、FirePath(如果用Firefox) chromedriver、IEDriverServer、phantomjs.exe ...
  • Python: 测试

    千次阅读 2019-07-31 00:13:54
    Python提供了unittest模块中的工具来测试代码。 1. 测试函数: 单元测试测试用例: unittest模块提供了代码测试工具。 单元测试用于核实函数的某个方面没有问题;测试用例是一组单元测试,这些单元测试一起...
  • 非常简单实用的一条命令 python -m SimpleHTTPServer 80 &>/dev/null &
  • python测试框架简明

    万次阅读 2020-10-04 18:37:32
    安装了多个版本的python,使用哪个是根据环境变量PATH决定的 python -V # 查看版本 which python # 查看python的安装路径 多版本python安装管理可以参考5-6PPT中Pyenv python:是C语言编写的python语法解析器,...
  • SciPy入门指南 这个教程是为了帮助初学者掌握scipy并且肯能快地实际使用。 什么是scipy、numpy、matplotlib?它们是用来干什么的?如何使用scipy工作学习使用scipy...Python是一种通用语言。它被解释运行,是动态
  • OpenCV—python 边缘检测(Canny)

    万次阅读 多人点赞 2018-10-04 10:11:56
    一、OpenCV-Python 中 Canny() 参数 &quot;&quot;&quot; cv2.Canny(image, # 输入原图(必须为单通道图) ... threshold2, # 较大的阈值2用于检测图像中明显的边缘 [, edges[, apertureSize[, #...
  • python单元测试知识总结

    千次阅读 2018-12-11 14:09:04
    由于任务需求,需要搭建python的单元测试框架,并编写测试用例。但之前几乎没有接触过,所了解的也就只有自带的unittest框架了。 经过一段时间的研究,发现python测试生态挺优秀的,个人记性也不好,因此记录下来...
  • python opencv 检测特定颜色

    万次阅读 2016-08-28 16:54:01
    15-python opencv 检测特定颜色 15-python opencv 检测特定颜色 概述 实现过程 定义视频对象 设置HSV中蓝色、天蓝色范围 获取视频帧并转成HSV格式 获取mask 图像按位操作 源代码 运行结果 参考 概述...
  • python测试函数

    千次阅读 2017-08-23 22:51:00
    测试函数是用于自动化测试,使用python模块中的unittest中的工具来测试 附上书中摘抄来的代码:#coding=utf-8 import unittest from name_function import get_formatted_name class NamesTestCase(unittest....
  • python LLT测试简介

    千次阅读 2018-07-06 09:35:48
    一.LLT是啥? LLT(low level test)通常由开发人员自测,它包括单元测试(Unit Test)、集成测试(Integration Test)、模块... LLT需要构造单元测试用例,使用打桩的方式,模拟函数不同的输入,用于验证是否能达...
  • 部署Python3用于集群资源脚本调用

    千次阅读 2018-11-24 20:49:41
    备注:在你使用的集群上都要做部署我这里默认big...CentOS7 默认已经安装了Python2.7.5 [root@bigdata241~]# python --version Python 2.7.5 [root@bigdata241 ~]# which python /usr/bin/python [root@bigd...
  • python检测代理ip是否有效

    千次阅读 2020-04-22 14:53:44
    python检测代理ip是否有效 测试环境 python3.6 、window10系统 测试方法 第一种 使用requests模块。 使用requests.get() 发请求,根据其返回的网页内容进行判断,代理ip是否有效。 import requests proxies =...
  • 本文实例讲述了python飞机大战pygame碰撞检测实现方法。分享给大家供大家参考,具体如下:目标了解碰撞检测方法碰撞实现01. 了解碰撞检测方法pygame 提供了 两个非常方便 的方法可以实现碰撞检测:pygame.sprite....
  • 搭建minecraft服务器,用于python学习

    千次阅读 2019-06-01 21:24:56
    搭建minecraft服务器,用于python学习 参考链接: https://www.instructables.com/id/Python-coding-for-Minecraft/ https://blog.csdn.net/paulzhang/article/details/82916902 ...
  • Python性能测试方法

    千次阅读 2017-11-23 11:40:43
    本文主要讨论如何在项目中测试Python瓶颈函数,对于模块化程度比较好的项目运用如下方法测试会得到比较好的效果. 测试的方法大致如下:利用profile对每个 python 模块进行测试(具体显示可以采用文本报表或者...
  • Python

    千次阅读 2017-12-31 16:03:31
    Python
  • Python测试中的用途

    千次阅读 2017-11-29 21:16:50
    Python是一种动态的脚本语言,学习成本大大低于Java等编程语言,因此对于我们测试人员来说,如果需要掌握一门语言,当然 Python是最好的选择;   Python丰富的第三方库,几乎想要的功能,都能找到对应
  • 可以用来检测是否有挖矿程序在运行的一个子条件 1 # coding:utf-8 2 __author__ = 'chenhuachao' 3 import wmi 4 import time 5 import platform 6 7 def get_network_flow(os): 8 '''监控window...
  • Python 类型系统的特点是拥有强大、灵活的类型操作. 维基百科上对此作出的阐述. 而存在一个不争而有趣的事实是, Python 是比Java更加强类型的. Java 对于原生类型和对象区分了类型系统,它让null存在于一个灰色...
  • 如果你热爱漏洞研究、逆向工程或者渗透测试,我强烈推荐你使用 Python 作为编程语言。它包含大量实用的库和工具,本文会列举其中部分精华。网络Scapy, Scapy3k: 发送,嗅探,分析和伪造网络数据包。可用作交互式...
  • Python生成测试数据

    千次阅读 2015-05-25 17:41:18
    有时我们需要大量的数据,一般编个程序生成一堆随机...# 生成数据库文件,用于测试SQL数据库 # id,firstName(14),lastName(14),birthday,sex import random,datetime import time dataCount = 10*1000*1
  • Python安全测试工具合集

    千次阅读 2015-08-28 15:12:22
    Python安全测试工具合集 转自:http://netsecurity.51cto.com/art/201311/417021.htm ----------------------------------------------------------------------------------------------------------------------...
  • 用 Opencv 和 Python 模糊检测

    万次阅读 2018-06-04 22:51:01
    用 Opencv 和 Python 模糊检测Jemma,一只超级甜美,极其活泼可爱的家养米格鲁猎犬,可能是家里有史以来照片最多的狗狗了。从我在她八周大的时候遇到她开始,三年以来,我已经累积了6000 多张她的照片。过度了吧?...
  • Python基础语法(Python自动化测试入门1)

    千次阅读 多人点赞 2020-10-26 17:53:29
    最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。 从本节开始,我们将正式开始学习 Python 这门高级编程语言。 提示:以下是本篇文章正文内容,...
  • python 检测内存溢出

    千次阅读 2014-09-12 08:13:17
    收集了些可以用于检测 python程序的内存溢出检测模块:

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 351,788
精华内容 140,715
关键字:

python用于测试

python 订阅