当前位置: 首页 > news >正文

网站备案到期j江苏省建设工程招投标网站

网站备案到期,j江苏省建设工程招投标网站,深圳保障性住房和公租房区别,苏州建设银行网站首页本节目录 数据准备#xff08;数据源与数据库#xff09; CTA策略 数据源#xff1a; 在进行量化分析的时候#xff0c;最基础的工作是数据准备#xff0c;即收集数据、清理数据、建立数据库。下面先讨论收集数据的来源#xff0c;数据来源可分为两大类#xff1a;免…本节目录 数据准备数据源与数据库 CTA策略 数据源 在进行量化分析的时候最基础的工作是数据准备即收集数据、清理数据、建立数据库。下面先讨论收集数据的来源数据来源可分为两大类免费的数据源和商业数据库。 免费数据源包括新浪财经、Yahoo财经等。这些数据源提供的接口比较复杂不是很好用。好消息是Python中有对应的开源工具可以让数据获取变得简单。比如akShare 能够获取新浪财经的数据pandas-reader能够获取 Yahoo Finance 的数据。本章主要讨论akShare 和 pandas-reader 的用法。 商业数据库包括万得Wind)、同花顺iFind)、聚源等。商业数据库也分为两种一种是软件终端除了可以提供各种数据查询和可视化功能之外还提供了接口以便从终端上提取数据。比如万得终端。终端的好处是价格便宜简单易用。坏处是对提取的数据量有限制而且数据的定制化功能很差很多数据甚至都没有提供接口。另一种是落地数据库通常是SQL数据库所有数据直接落地可以用SQL语句进行提取。落地数据库的好处是数据丰富定制灵活没有数据量限制缺点是成本较高而且技术门槛也相对较高。大部分人使用的是第一种即终端提供的接口。本章就以Wind为例讨论第一种数据库的用法。 前几张也详细谈到过获取数据接口这里就不展开了接找几个有用的技巧 获取交易日历 import akshare as ak from datetime import datetime# Get the trade date history dataframe tool_trade_date_hist_sina_df ak.tool_trade_date_hist_sina()# Specify the start and end dates start_date 2022-01-01 end_date 2022-12-31 start_date datetime.strptime(start_date, %Y-%m-%d).date() end_date datetime.strptime(end_date, %Y-%m-%d).date()# Extract the dates within the specified range selected_dates tool_trade_date_hist_sina_df[(tool_trade_date_hist_sina_df[trade_date] start_date)\ (tool_trade_date_hist_sina_df[trade_date] end_date)]print(selected_dates) import akshare as ak from datetime import datetime macro_usa_gdp_monthly_df ak.macro_usa_gdp_monthly() start_date 2022-01-01 end_date 2022-12-31 start_date datetime.strptime(start_date, %Y-%m-%d).date() end_date datetime.strptime(end_date, %Y-%m-%d).date()# Extract the dates within the specified range selected_dates macro_usa_gdp_monthly_df[(macro_usa_gdp_monthly_df[日期] start_date)\ (macro_usa_gdp_monthly_df[日期] end_date)] print(selected_dates) 如果想要获取国外市场数据那么pandas-reader将是一个很好的免费数据接口。但pandas-reader也没有包含在Anaconda当中需要自行安装。可以使用pip命令进行安装命令如下 pip install pandas-datareader Pandas集成了很多免费的数据接口包括但不限于Yahoo Finance、Google Finance、quandl、美联储、世界银行等提供的数据。 pandas-reader的接口使用也很简单。先导入相关的函数命令如下 import pandas_datareader.data as web 但是好像接口被关闭获取不到数据。 获取美国宏观经济数据 import akshare as ak from datetime import datetime macro_usa_gdp_monthly_df ak.macro_usa_gdp_monthly() start_date 2022-01-01 end_date 2022-12-31 start_date datetime.strptime(start_date, %Y-%m-%d).date() end_date datetime.strptime(end_date, %Y-%m-%d).date()# Extract the dates within the specified range selected_dates macro_usa_gdp_monthly_df[(macro_usa_gdp_monthly_df[日期] start_date)\ (macro_usa_gdp_monthly_df[日期] end_date)] print(selected_dates) 万得接口 一个简单例子 万得Wind提供了一系列的接口其中也包含Python的接口。下面列举一段简单的示例代码用于提取股票000001.SZ一周的日线数据具体如下 由于没有账号不方便演示自行学习跳过。教你使用Python连接Wind金融数据接口 - 知乎 (zhihu.com) 基于Wind返回的data的数据结构特点在创建DataFrame的时候必须先将index与Fields 对应columns与日期对应之后再进行矩阵转置。 数据库 存储数据有很多种方式。有人比较喜欢以文件的形式存储比如csv文件或hdf5文件。但通常情况下我还是比较喜欢建立一个数据库以便于进行数据的管理和分享。而且数据库本身也能完成很多数据计算和分析工作。 现今的数据库主要分为两种一种是关系型数据库也就是使用SQL语句进行操作的数据库常见的有MySQL、PostgreSQL、SQL Sever等一种是非关系型NoSQL数据库比如MongoDB。这两种数据库各有其优势这里主要还是使用传统的SQL数据库。本书中以PostgreSQL为例。SQL基础知识的讲解不在范围之内大家可以自行查找相关的教程进行学习。这里假设读者已经具有SQL的相关基础。 Pandas利用SQLAlchemy包提供了简单的数据库接口。比如我们想把一个dataframe 存储到数据库里面 前提是已经安装了 pip install psycopg2 pip install sqlalchemy 可以使用如下代码  from sqlalchemy import create_engine enginecreate_engine (postgresql://postgreslocalhost:5432/postgres) df.to_sql(stock_all_info,engine, if_existsreplace, indexTrue) 其中engine存储了连接数据库的相关信息数据库地址、数据库名称、用户名和密码。 在df.to_sql中第一个参数表示表的名称。参数if_exists表示假如现在已经存在此表应进行什么操作append代表在当前表中添加新的列replace 表示替换当前表删除当前已有的表;fail 表示不进行任何操作默认值是fail参数index 表示是否将DataFrame的索引也存储到表中。 存储的时候数据库会自动识别每列的数据类型并对应到SQL数据库的类型。比如我们将前面获取到的数据存储到stock_all_info中。数据库中会生成一张表。 由于date在df里面是索引所以数据库也会自动地为这张表创建一个 date索引。 数据库的读取也非常容易可以使用如下代码实现 dfpd.read_sql(select * from stock_info,where windcode 000001.SZ,engine) 其中第一个参数是一个SQL查询语句接口将返回该查询语句对应的DataFrame。 下载所有股票历史数据并存储 做策略研究的朋友经常会有建立一个完整的股票数据库的需求。本节将展示一个小程序指导下载所有股票历史行情并存储到数据库中。 此处展示只获取5只股票市场上有5000多只股票获取不完要花很长时间另外获取时间我固定为20210101到现在的行情如果有需求的话自行修改代码中的start_date; 先回顾如何在数据库里面创建表(自行学习前面的数据库这里不再介绍) CREATE TABLE stocks (date DATE,stock_code VARCHAR(20),open DECIMAL(15,4),high DECIMAL(15,4),low DECIMAL(15,4),close DECIMAL(15,4),volume DECIMAL(30,8) ); 表里面具体的有日期股票代码四个价以及成交量。 实现代码具体如下 delete from stocks; 查看表里面内容 select * from stocks; 全部代码如下已经封装成类 import akshare as ak import datetime import mysql.connector import pymysql import pandas as pdclass StockDataUpdater:def __init__(self, host, user, password, port, db):self.host hostself.user userself.password passwordself.port portself.db db# -------------------------获取数据库中每只股票的历史数据---------------------------------------# 获取所有股票代码def all_stock_codes(self):all_stock_codes ak.stock_zh_a_spot_em()[[代码]].sort_values(by代码)all_stock_codes all_stock_codes.reset_index(dropTrue)return all_stock_codes# 判断股票所属市场def code_type(self, code):if code.find(60,0,3)0:gp_typeshelif code.find(688,0,4)0:gp_typeshelif code.find(900,0,4)0:gp_typeshelif code.find(00,0,3)0:gp_typeszelif code.find(300,0,4)0:gp_typeszelif code.find(200,0,4)0:gp_typeszelif code.find(8,0,1)0:gp_typebjcode gp_typecodereturn code# 获取股票指标数据def get_indicator(self, stock_ID):stock_individual_info ak.stock_individual_info_em(symbol stock_ID)# 获取索引index stock_individual_info.loc[stock_individual_info[item] 上市时间].index[0]# 使用索引定位value列的开始日期start_date str(stock_individual_info.loc[index, value])start_date start_date[:4] start_date[4:6] start_date[6:]start_date 20210104# 获取当前日期end_date datetime.datetime.now().strftime(%Y%m%d)end_date 20220104# 新浪拉取数据有些数据拉取不全stock_code self.code_type(stock_ID)try:data ak.stock_zh_a_daily(symbolstock_code, start_datestart_date, end_dateend_date, adjustqfq)df data[[date,open,high,low,close,volume]]df df.dropna()return dfexcept:return None# 连接数据库def insert_info(self, stock_indicator):conn pymysql.connect(host self.host # 连接名称默认127.0.0.1,user self.user # 用户名,password self.password # 密码,port self.port # 端口默认为3306,db self.db # 数据库名称,charset utf8 # 字符编码)cur conn.cursor() # 生成游标对象for index, row in stock_indicator.iterrows():sql INSERT INTO stocks(date,stock_code,open,high,low,close,volume) VALUES (%s, %s, %s, %s, %s, %s, %s)cur.execute(sql, (row[date], row[stock_code], row[open], row[high],row[low], row[close],row[volume]))conn.commit() # 提交事务cur.close() # 关闭游标conn.close() # 关闭连接# -------------------------更新数据库中每只股票的最新数据---------------------------------------# 获取数据库中每个股票的最新日期def get_latest_date(self, stock_code):conn pymysql.connect(host127.0.0.1, userroot, password152617, port3306, dbstock_info, charsetutf8)cur conn.cursor()sql fSELECT MAX(date) FROM stocks WHERE stock_code {stock_code}cur.execute(sql)latest_date cur.fetchone()[0]cur.close()conn.close()return latest_date# 拉取股票历史数据def update_historical_data(self):stocks_info self.all_stock_codes()for i in range(len(stocks_info)):if i3:stock_indicator self.get_indicator(stocks_info[代码][i])if stock_indicator is not None:stock_indicator stock_indicator.assign(stock_code stocks_info[代码][i])self.insert_info(stock_indicator)else:break# 更新股票最新行情数据def update_latest_data(self):stocks_info self.all_stock_codes()for i in range(len(stocks_info)):if i 5:stock_code stocks_info[代码][i]latest_date self.get_latest_date(stock_code)if latest_date is not None:latest_date latest_date.strftime(%Y%m%d)stock_indicator self.get_indicator(stock_code)if stock_indicator is not None:stock_indicator stock_indicator.assign(stock_codestock_code)if latest_date is not None:stock_indicator stock_indicator[stock_indicator[date] latest_date]if not stock_indicator.empty:self.insert_info(stock_indicator)else:breakhost 127.0.0.1 user root password 152617 port 3306 db stock_info updater StockDataUpdater(host, user, password, port, db)# 更新历史数据 updater.update_historical_data()# 更新最新数据 # updater.update_latest_data() 在这里我先将时间固定在20210104—20220104 运行结果为文件名为info.py 在获取历史行情时要去掉updater.update_latest_data() 然后更新股票时去掉updater.update_historical_data()同时要去掉end_date 重新运行 运行结果为 有一点不完善的是更新的数据并不是append在原来股票代码后面但这并不影响只要在数据库里面按照stock_code  sort一下即可。这里就不详细演示了。  上面的程序主要分为两步第一步获取所有A股的代码。第二步是针对每一个股票获取对应的指标这里是open、high、low、close)并存储于数据库中并进行实时更新。 下面这部分代码是获取全部股票行情数据存放到数据库中耗时很长谨慎运行 import akshare as ak import datetime import mysql.connector import pymysql import pandas as pdclass StockDataUpdater:def __init__(self, host, user, password, port, db):self.host hostself.user userself.password passwordself.port portself.db db# -------------------------获取数据库中每只股票的历史数据---------------------------------------# 获取所有股票代码def all_stock_codes(self):all_stock_codes ak.stock_zh_a_spot_em()[[代码]].sort_values(by代码)all_stock_codes all_stock_codes.reset_index(dropTrue)return all_stock_codes# 判断股票所属市场def code_type(self, code):if code.find(60,0,3)0:gp_typeshelif code.find(688,0,4)0:gp_typeshelif code.find(900,0,4)0:gp_typeshelif code.find(00,0,3)0:gp_typeszelif code.find(300,0,4)0:gp_typeszelif code.find(200,0,4)0:gp_typeszelif code.find(8,0,1)0:gp_typebjcode gp_typecodereturn code# 获取股票指标数据def get_indicator(self, stock_ID):stock_individual_info ak.stock_individual_info_em(symbol stock_ID)# 获取索引index stock_individual_info.loc[stock_individual_info[item] 上市时间].index[0]# 使用索引定位value列的开始日期start_date str(stock_individual_info.loc[index, value])start_date start_date[:4] start_date[4:6] start_date[6:]start_date 20210104# 获取当前日期end_date datetime.datetime.now().strftime(%Y%m%d)# end_date 20220104# 新浪拉取数据有些数据拉取不全stock_code self.code_type(stock_ID)try:data ak.stock_zh_a_daily(symbolstock_code, start_datestart_date, end_dateend_date, adjustqfq)df data[[date,open,high,low,close,volume]]df df.dropna()return dfexcept:return None# 连接数据库def insert_info(self, stock_indicator):conn pymysql.connect(host self.host # 连接名称默认127.0.0.1,user self.user # 用户名,password self.password # 密码,port self.port # 端口默认为3306,db self.db # 数据库名称,charset utf8 # 字符编码)cur conn.cursor() # 生成游标对象for index, row in stock_indicator.iterrows():sql INSERT INTO stocks(date,stock_code,open,high,low,close,volume) VALUES (%s, %s, %s, %s, %s, %s, %s)cur.execute(sql, (row[date], row[stock_code], row[open], row[high],row[low], row[close],row[volume]))conn.commit() # 提交事务cur.close() # 关闭游标conn.close() # 关闭连接# -------------------------更新数据库中每只股票的最新数据---------------------------------------# 获取数据库中每个股票的最新日期def get_latest_date(self, stock_code):conn pymysql.connect(host127.0.0.1, userroot, password152617, port3306, dbstock_info, charsetutf8)cur conn.cursor()sql fSELECT MAX(date) FROM stocks WHERE stock_code {stock_code}cur.execute(sql)latest_date cur.fetchone()[0]cur.close()conn.close()return latest_date# 拉取股票历史数据def update_historical_data(self):stocks_info self.all_stock_codes()for i in range(len(stocks_info)):if True:stock_indicator self.get_indicator(stocks_info[代码][i])if stock_indicator is not None:stock_indicator stock_indicator.assign(stock_code stocks_info[代码][i])self.insert_info(stock_indicator)else:break# 更新股票最新行情数据def update_latest_data(self):stocks_info self.all_stock_codes()for i in range(len(stocks_info)):if True:stock_code stocks_info[代码][i]latest_date self.get_latest_date(stock_code)if latest_date is not None:latest_date latest_date.strftime(%Y%m%d)stock_indicator self.get_indicator(stock_code)if stock_indicator is not None:stock_indicator stock_indicator.assign(stock_codestock_code)if latest_date is not None:stock_indicator stock_indicator[stock_indicator[date] latest_date]if not stock_indicator.empty:self.insert_info(stock_indicator)else:breakhost 127.0.0.1 user root password 152617 port 3306 db stock_info updater StockDataUpdater(host, user, password, port, db)# 更新历史数据 updater.update_historical_data()# 更新最新数据 # updater.update_latest_data() 获取好后数据库中存在所有行情大致为反正一直在更新数据数据量很大 部分数据有问题获取到300999金融鱼后面就暂停了原因未知暂时数据已经有159万条本来预计数据大概有500多万条。 CTA策略 数据准备好后下面进行策略介绍 CTA全称是Commodity Trading Advisor即商品交易顾问是由NFA美国全国期货协会认定的在CFTC商品期货交易委员会注册并接受监管的投资顾问。CTA 一般是指通过为客户提供期权、期货方面的交易建议或者直接通过受管理的期货账户参与实际交易来获得收益的机构或个人。 以上的定义只是原始的意思随着市场的发展市场对CTA策略的理解普遍发生了改变它已不再只是商品期货了。实际上目前国内的 CTA 策略大都是基于量价的趋势跟踪策略。无论是商品期货、金融期货还是股票、外汇只要是有历史公开量价的二级市场都可以成为CTA策略运作的市场。国内市场中期货是T0股票是T1且期货可以做多做空所以期货的研究空间要大很多。国内成熟的第三方自动化交易软件基本上都是从期货人手的。所以本部分就以期货作为研究对象介绍基本的CTA策略研究思路和方法。 趋势跟踪策略理论基础 但凡接触过投资的大概都听过趋势跟踪的概念。著名经济学家大卫李嘉图曾将趋势跟踪策略表述为截断亏损让利润奔跑。趋势跟踪策略通俗地讲就是涨了的股票会涨得更高跌了的股票会跌得更低。只要我们顺着大势做就能赚钱。 很多人将趋势跟踪奉为圭臬坚定不移。也有人将其当作金融巫术认为该策略不值一提。那么趋势跟踪是否真的有效很多信徒内心也不免打鼓。这种怀疑就像肉中刺平时隐隐作痛令人不得安稳。假若不幸连续亏损则是发炎肿胀让人难受得开始怀疑人生。 趋势跟踪不是魔法不可能让你天天赚钱甚至都不一定能年年赚钱。但既然该策略能广为流传那一定是有其道理的。 为了讲清道理各种机构的学者没少花时间和精力来研究该策略。 2012年Tobias J. Moskowitz 等人发表的文章《Time series momentum》使用了最基本的趋势跟踪策略——买人最近上涨的资产卖空最近下跌的资产。此策略自 1985年以来在几乎所有的股票指数期货、债券期货、商品期货以及远期货币上平均来看都是盈利的。 当然30 年的数据不算太长为了能有更强的说服力美国著名的对冲基金AQR发表了报告《A Century of Evidence on Trend-Following Investing》(《趋势投资策略一个世纪的证据》)报告中列举了100年的数据证明了趋势跟踪策略是有效的不仅长期来看取得了正收益而且与各传统大类资产相关性很低是一种非常好的分散风险的投资方法。 既然上文已从实证的角度说明了趋势跟踪策略的有效性那么此类策略的现实逻辑基础究竟是什么呢为了回答这个问题我们可以反过来思考趋势跟踪策略无效的理论基础是什么就是赫赫有名的弱有效市场假说。此假说指出证券的历史价格已反映了全部的市场信息。历史价格是公开的所有投资者都可以基于此做出理性的判断从而形成当前的有效价格。换句话说当前资产是被完美定价的。 此假说明显不符合事实投资界的非理性狂热和羊群效应是明显存在的。也正是这种非理性的部分常常使得证券价格偏离了实际价值也就是被错误定价。由于非理性的长期存在趋势跟踪策略也能长期有效。 著名的《黑天鹅》作者纳西姆·塔勒布其实也是类似策略的践行者。不过他实现的方式不一样他的交易策略是买入那些远离实际价格的期权平时亏小钱希望在大波动来临的时候一把挣足。实际情况就是他开办的公司在最初几年表现平平略有亏损结果在911事件的时候大发横财。这也符合了他的理念极端行情比我们想象的要多而且极端。正是这一认知误差使得市场长期低估了大趋势出现的可能性。这也是趋势跟踪策略长期有效的根本原因。 技术指标 国内的量化CTA大部分使用的都是技术指标构建策略。所谓技术指标就是价格、成交量、持仓量的数学组合。大体上技术指标可分为三种类型具体说明如下。(1趋势型 顾名思义趋势型指标可用于描述并捕捉趋势行情适合趋势跟踪策略比如MACD、SAR等。(2超买超卖型也可以称作反转型) 股市价格的涨跌中也会有反复和振荡比如KDJ、RSI等。超买超卖型与趋势型刚好相反此类指标可用于描述并捕捉趋势行情的终结即反转状态目标是为了识别震荡和短期的头部底部。 (3能量型 能量型的指标是指从成交量的角度考察价格变动的力量常用于辅助判断信号的强度。比如VOL、OBV等。 主力合约的换月问题 期货合约是会到期的。若要进行较长历史的回测使用的数据则是由多个合约拼接而换月时会产生假跳空的问题。由于不同合约经常会存在一个较大的价差因此表现在成的也就是所谓的主力连续合约。使用这种主力连续合约往往会存在一个问题就是连续合约上就会产生一个大的跳空这个跳空就是假跳空。这种假跳空最大的影响就是技术指标的计算会失真。比如实际行情明明没有突破但由于存在假跳空的问题从而出现了突破。举个例子比如某期货品种假设换月前两天的收盘价依次为1020、1000换月后的价格为1200、1220。那么由于跳空的问题就好像价格突然上涨了200一样从而就出现了假突破问题如果不进行复权处理那么很可能会产生多头信号然则这个信号其实是错误的。 在进行回测的时候我们需要处理假跳空的问题。为了避免假跳空问题带来的误差一般会采用如下三种方法。□使用期货的合成指数来进行回测。 □对跳空进行复权处理。 □不使用主力合约而是使用单独月份的合约来进行分析。 这三种方法的实现成本依次递增准确性也依次增强。在实际应用中需要针对自己的具体需求来选择。下面针对这三种方法做一个详细介绍。1使用合成指数进行回测 合成指数是指对某个品种各个月份的价格分配权重计算出一个综合性指数用于代表该品种的整体走势。计算指数的时候算法一般都会保证其连续性不会出现假跳空的问题。市面上很多第三方平台都会提供期货的合成指数。这样就可以直接使用指数进行回测回测结果也就不会受到假跳空问题的影响。但这种方法也存在缺点一是指数不是真实的价格数据多少会存在一些误差二是指数的计算公式往往不是透明的而且各个平台很可能又是不一样的。使用黑盒的指数总是感觉会有些不踏实这种方法比较适合进行初步的测试。初步回测通过之后就可以考虑使用更精确的方法来回测了。2对主力连续合约进行复权处理抹平跳空 复权算法共有好几种一般包含两个维度。首先复权可以分为加减复权和乘除复权其次可以分为前复权和后复权。这样两两组合其实就有四种算法了。 为了更清楚地解释复权的概念这里使用本节开始的例子来进行说明。假设有四天的数据换月前两天的收盘价依次为1020、1000换月后的价格为1200、1250这样在换月时候就会有200的假跳空价差了。 先解释加减复权和乘除复权。所谓加减复权是指对跳空产生的价差进行加减平移。比如说我们将换月后两天的数据也就是1200和1250都减去200得到1000和1050。处理后的数据序列就是1020、1000、1000、1050。加减复权的好处是直观易理解价格序列比较整洁不会出现小数点。缺点是收益率会出现偏差比如处理之前的1200到1250涨幅是1250-1200)/1200-0.042处理之后涨幅是1050-1000)/10000.05。为了保证收益率不出现偏差就需要使用乘除复权了。顾名思义乘除复权是指在价格的基础上乘上一个因子。比如这里换月前后1000跳空到1200相当于是白白乘了1.2倍。为了复权就需要将换月后的数据除以1.2。这样得到的数据序列就是1020和10001200/1.21000.1250/1.21041.66这样保证每天收益率不会因为复权而产生偏差缺点是复权之后的数据就没有那么整洁了出现了小数点。在各大股票软件中一般使用乘除复权。但其实这两种方法都有自己的用武之地。比如在高频策略的研究中由于价差变化非常小因此加减复权带来的收益率偏差也很小可以忽略不计这个时候就可以使用加减复权来保证数据的整洁性。3不使用主力连续合约使用单独的实际合约进行回测 这种方法的缺点是由于大部分指标都需要针对一段时间内的历史数据进行计算因此这段时间内是不会有交易信号的相当于损失了这段时间内的历史数据所以这种方法比较适合于小周期策略的回测比如15分钟策略因为小周期策略损失的数据会很少一般就是两三天影响并不大。 用Python实现复权 上一节节中介绍了处理合约换月的几种方法本节就来介绍如何编写程序完成复权操作。复权方法共有两种加减复权和乘除复权。下面将讲解这两种复权方法的实现。 加减复权 假设每次换月的时候换月前的收盘价和换月后的开盘价就是换月导致的伪跳空价差。这个假设并不完全准确但是这样假设比较简便容易处理。 这样我们就可以得到相应的算法了具体步骤如下。 1初始化复权因子为0。 2每次换月后将伪跳空累加到复权因子上算出所有的复权因子。 3统一将所有的价格都减去复权因子。 在 Pandas 里面我们可以很方便地用向量化还有对应的函数来实现这个功能甚至不需要编写循环语句就可以完成。以下是完成加减复权的函数具体代码如下 def adjust_price_sum(df):
http://www.yutouwan.com/news/266279/

相关文章:

  • 网站建设中 html5 模板下载市场推广
  • 安卓开发框架seo引擎优化是什么
  • 企业网站需要在电信做哪些备案flash网站规划
  • 网站建设交流论坛百度升级最新版本下载安装
  • 做网站好还是app好深圳网站建设哪家比较好
  • 网站制作专业网站建设的途径
  • 宁波网站搭建专门做设计的网站
  • 网站建设 题目优化网站哪家好
  • 网站建设中端口号的作用是什么意思合肥seo网站建设
  • 中国工程建设监理网站做网站的哪里好
  • 郑州网站制作案例百度多久收录一次网站
  • js获取网站html广东色绿色建筑信息平台
  • 台州企业做网站福田企业网站推广公司
  • 岳阳整站优化网吧设计装饰公司
  • 建立网站的英文短语网站开发英文合同
  • 广州网站程序开发艺术字体设计网
  • 新能源网站建设重庆工程造价信息2021
  • 农用地转建设用地结果查询网站wordpress多媒体导入
  • 嘉兴做网站建设的公司哪家好网站建站平台系统
  • 邢台建网站哪里有担路网口碑做网站好吗
  • 做it的在哪个网站找工作男女做羞羞完整版网站
  • 网站产品图怎么做的访问网站慢
  • 网站开发背景论文网站如何做触屏滑动
  • 好的平面网站模板知春路网站建设
  • 网站开发作为固定资产怎么摊销3 阐述网站建设的步骤过程 9分
  • 网站建设准备工作总结网店代运营服务
  • 松原建设小学网站WordPress黑镜主题下载
  • 网站正在建设中提示页面深圳网站建设需要多少费用
  • 河南省建设厅注册中心网站如何将自己 做的网站发布网上
  • 建设厅电工证查询网站四川网站建设套餐