日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python量化常用_Python量化常用函数

發布時間:2023/12/4 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python量化常用_Python量化常用函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

#-*- 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量化常用函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。