#-*- coding: utf-8 -*-#@Author: fangbei#@Date: 2017-08-26#@Original:

price_str= '30.14, 29.58, 26.36, 32.56, 32.82'price_str= price_str.replace(' ', '') #删除空格

price_array = price_str.split(',') #转成数组

date_array=[]

date_base= 20170118

'''# for 循环

for _ in range(0, len(price_array)):

date_array.append(str(date_base))

date_base += 1'''

推导式comprehensions(又称解析式),是Python的一种独有特性。推导式是可以从一个数据序列构建另一个新的数据序列的结构体。

列表推导式

date_array = [str(date_base + ind) for ind, _ inenumerate(price_array)]print(date_array)#['20170118', '20170119', '20170120', '20170121', '20170122']

zip函数

stock_tuple_list = [(date, price) for date, price inzip(date_array, price_array)]print(stock_tuple_list)#[('20170118', '30.14'), ('20170119', '29.58'), ('20170120', '26.36'), ('20170121', '32.56'), ('20170122', '32.82')]

字典推导式

stock_dict = {date: price for date, price inzip(date_array, price_array)}print(stock_dict)#{'20170118': '30.14', '20170119': '29.58', '20170120': '26.36', '20170121': '32.56', '20170122': '32.82'}

可命名元组 namedtuple

from collections importnamedtuple

stock_nametuple= namedtuple('stock', ('date', 'price'))

stock_nametuple_list= [stock_nametuple(date, price) for date, price inzip(date_array, price_array)]print(stock_nametuple_list)#[stock(date='20170118', price='30.14'), stock(date='20170119', price='29.58'), stock(date='20170120', price='26.36'), stock(date='20170121', price='32.56'), stock(date='20170122', price='32.82')]

有序字典 OrderedDict

from collections importOrderedDict

stock_dict= OrderedDict((date, price) for date, price inzip(date_array, price_array))print(stock_dict.keys())#odict_keys(['20170118', '20170119', '20170120', '20170121', '20170122'])

最小收盘价

print(min(zip(stock_dict.values(), stock_dict.keys())))#('26.36', '20170120')

lambad函数

func = lambda x:x+1

以上lambda等同于以下函数

deffunc(x):return(x+1)

找出收盘价中第二大的价格

find_second_max_lambda = lambda dict_array : sorted(zip(dict_array.values(), dict_array.keys()))[-2]print(find_second_max_lambda(stock_dict))#('32.56', '20170121')

高阶函数

将相邻的收盘价格组成tuple后装入list

price_float_array = [float(price_str) for price_str instock_dict.values()]

pp_array= [(price1, price2) for price1, price2 in zip(price_float_array[:-1], price_float_array[1:])]print(pp_array)#[(30.14, 29.58), (29.58, 26.36), (26.36, 32.56), (32.56, 32.82)]

from functools importreduce#外层使用map函数针对pp_array()的每一个元素执行操作,内层使用reduce()函数即两个相邻的价格, 求出涨跌幅度,返回外层结果list

change_array = list(map(lambda pp:reduce(lambda a,b: round((b-a) / a, 3),pp), pp_array))#print(type(change_array))

change_array.insert(0,0)print(change_array)#[0, -0.019, -0.109, 0.235, 0.008]

#将涨跌幅数据加入OrderedDict,配合使用namedtuple重新构建数据结构stock_dict

stock_nametuple = namedtuple('stock', ('date', 'price', 'change'))

stock_dict=OrderedDict((date, stock_nametuple(date, price, change))for date, price, change inzip(date_array, price_array, change_array))print(stock_dict)#OrderedDict([('20170118', stock(date='20170118', price='30.14', change=0)), ('20170119', stock(date='20170119', price='29.58', change=-0.019)), ('20170120', stock(date='20170120', price='26.36', change=-0.109)), ('20170121', stock(date='20170121', price='32.56', change=0.235)), ('20170122', stock(date='20170122', price='32.82', change=0.008))])#用filter()进行筛选,选出上涨的交易日

up_days = list(filter(lambda day: day.change >0, stock_dict.values()))print(up_days)#[stock(date='20170121', price='32.56', change=0.235), stock(date='20170122', price='32.82', change=0.008)]

#定义函数计算涨跌日或涨跌值

def filter_stock(stock_array_dict, want_up=True, want_calc_sum=False):if notisinstance(stock_array_dict, OrderedDict):raise TypeError('stock_array_dict must be OrderedDict')

filter_func= (lambda day: day.change > 0) if want_up else (lambda day: day.change <0)

want_days=filter(filter_func, stock_array_dict.values())if notwant_calc_sum:returnwant_days

change_sum= 0.0

for day inwant_days:

change_sum+=day.changereturn change_sum

偏函数 partial

from functools importpartial

filter_stock_up_days= partial(filter_stock, want_up=True, want_calc_sum=False)#print(type(filter_stock_up_days))

filter_stock_down_days = partial(filter_stock, want_up=False, want_calc_sum=False)

filter_stock_up_sums= partial(filter_stock, want_up=True, want_calc_sum=True)

filter_stock_down_sums= partial(filter_stock, want_up=False, want_calc_sum=True)print('所有上涨的交易日:{}'.format(list(filter_stock_up_days(stock_dict))))print('所有下跌的交易日:{}'.format(list(filter_stock_down_days(stock_dict))))print('所有上涨交易日的涨幅和:{}'.format(filter_stock_up_sums(stock_dict)))print('所有下跌交易日的跌幅和:{}'.format(filter_stock_down_sums(stock_dict)))#所有上涨的交易日:[stock(date='20170121', price='32.56', change=0.235), stock(date='20170122', price='32.82', change=0.008)]#所有下跌的交易日:[stock(date='20170119', price='29.58', change=-0.019), stock(date='20170120', price='26.36', change=-0.109)]#所有上涨交易日的涨幅和:0.243#所有下跌交易日的跌幅和:-0.128

python量化常用_Python量化常用函数相关推荐

  1. python与炒股_Python量化炒股入门与实战技巧

    章Python量化炒股快速入门 1.1初识量化炒股 1.1.1什么是量化炒股 1.1.2量化炒股的特点 1.1.3量化炒股的优势 1.1.4量化炒股的不足 1.2量化炒股的内容 1.2.1量化选股 1 ...

  2. python脚本名_python获取类名函数名、脚本路径

    1).python获取当前运行的类名函数名import inspect def get_current_function_name(): return inspect.stack()[1][3] cl ...

  3. python map用法_Python中 map()函数的用法详解

    python map()函数问题 使用map()函数生成一个值D但是检测D的长度时,只能测一次,一次之后D似不知道你的dataSet 是什么数据,是否是从数据库取出来的结果游标, 如果是的 那么dat ...

  4. python自动化库_Python自动化测试常用库整理

    基本库: sys 程序和Python解析器的交互 os 启动新进程:操作文件和目录 re 正则表达式,字符串匹配 string 基本字符串操作 inspect 提供自省和反射功能 importlib ...

  5. python 量化交易_Python量化交易,tushare与talib学习示例演示,双均线(DMA)买卖策略...

    本篇文章为tushare与talib的学习示例,通过双均线策略演示如何使用talib与tushare.下面我们对代码进行详细解析. 引入3个包,分别是talib,tushare和pandas impo ...

  6. python花式编码_Python编码常用套路

    1. 循环遍历 if __name__ == '__main__':while True: 2. 录入数据 str1=raw_input()#通过split()将数据分割,并用map(int,list ...

  7. python keys模块_python自动化常用模块

    python自动化常用函数 导入time模块 import time 导入ActionChains模块(鼠标) from selenium.webdriver.common.action_chains ...

  8. 上海 python量化 培训_Python量化投资实战班.上海站

    原标题:Python量化投资实战班.上海站 上海 7月27-28日 随着国内量化投资的发展,第三方量化平台费用高,策略保密性差,开发环境局限等弊端不断涌现.VNPY作为一个开源的量化交易系统项目,具备 ...

  9. python方法测试_python 测试常用小方法

    python 测试常用的小方法 def xia_to_tuo(src: str, firstUpper: bool = False): """ 将下划线分隔的名字,转换为 ...

最新文章

  1. oracle导入到mysql命令_oracle数据库导入导出命令
  2. Reverse Linked List(leetcode206)
  3. sqlServer事务
  4. PHP中的call_user_func_array
  5. bizmsg是什么文件可以删除吗_电脑C盘满了怎么清理?哪些文件可以删除?
  6. Sitemesh3的使用及配置
  7. python使方法执行10次_Python提升程序性能的七个手段
  8. 文件夹查找文件(一个文件夹文件查找函数 Delphi)
  9. mysql计划任务书_求做一个基于java的mysql课程设计任务书 要求如下
  10. 华为telnet的两种连接方式
  11. cookie控制窗口打开打开
  12. Reverse Linked List 反转链表
  13. 《开源公开课分享》:Java开源框架案例分享
  14. 使用vue模拟通讯录列表,对中文名拼音首字母提取并排序
  15. 全志平台速鼎模块的BT调试记录
  16. python 智能语音_python实现人工智能语音助手
  17. java关于时间的换算
  18. html5 css 渐变背景,css渐变,css渐变色背景
  19. 单不单身一样可以过情人节
  20. Redis管道Pipelining原理详解

热门文章

  1. Debugging into .NET Core源代码的两种方式
  2. 【MATLAB统计分析与应用100例】案例014:matlab读取Excel数据,调用stepwise函数作交互式逐步回归分析
  3. 【EPS精品教程】基于DOM和DSM创建垂直模型、加载垂直模型
  4. 城市遥感动态监测管理系统
  5. Android之解决NestedScrollView嵌套ViewPager导致出现左右页面滑动冲突
  6. Android之安卓8.0版本以上手机开启热点提示Caller already has an active LocalOnlyHotspot request
  7. Android之Unexpected error while executing: am start -n “***.Activity“-a android.intent.action.MAIN
  8. C和指针之用拉托斯特尼筛方法(Eratosthenes)查找区间质素个数
  9. solidity编写eth智能合约之contract 创建合约(二)
  10. MATLAB软件禁用利好,Matlab被禁用?一款国产软件站了出来说:我就是中国的Matlab...