虎妞新欢:最可爱的外国胖宝宝浴照(组图) 利用google docs spreadsheet制作股票实时行情(图)
Apr 24


        forcode:很多人可能都没有尝试过google docs spreadsheet 强大的函数功能,尤其是google finance函数太强大了!你不仅可以在google docs spreadsheet 中查看股票、外汇、黄金等实时行情,还可以根据你的金融知识自定义各种公式来计算各种指标帮助你进行投资决策。比如,你可以把黄金、外汇、股票的价格、成交量、相对于基期的波动幅度等呈现在一个页面,并且可以按照你喜欢的风格来修饰这个表格,更重要的是,你还可以将这个表格发布成一个页面,与朋友分享,太棒了。

        当我们需要以历史上某一个特殊日期(比如2007年10月16日上证指数最高点)作为基期计算目前股票价格相对于基期的指数时,就需要一个函数来获得该值,但是,google docs spreadsheet 本身并没有函数可以在“一个单元格”中获取任何一支股票在历史上任何一天的收盘价。

        GoogleFinance()函数用来获取股票历史行情的表达式:
        =GoogleFinance(”symbol”, “attribute”, “start_date”, “num_days|end_date”, “interval”)
        获得的是一个2×2(或N×2)的表格,如下图所示:

       

        经过forcode半个小时的钻研,终于编写出在google docs spreadsheet中获取历史上任何一支股票任何一天股票收盘价的函数表达式了,如下所示:
        =value(mid(concatenate(GoogleFinance(B2,”price”,$M$1,$M$1)),29,8)) 
        其中$M$1是日期所在的单元格,B2是股票代码所在的单元格,该函数仅对沪市和深市有效,其他股市可能需要修改29为其他数字。

        下面forcode一步一步来解释是如何构造这个函数表达式的。

        首先,通过这个表达式:
        =GoogleFinance(B2,”price”,$M$1,$M$1)
        可以获得B2单元格中股票代码所对应股票在$M$1单元格中的日期的价格,但是googlefinance()函数获得的结果是一个2×2的表格,而不是一个单元格,如下图所示:
       

        GoogleFinance()函数的表达式是这样的:
   =GoogleFinance(”symbol”; “attribute”)
        其中symbol是股票代码,也可以指向一个含有股票代码的单元格,例如A2;attribute是股票参数,默认的是price,即股票价格。常用参数如下:

  • price: market price of the stock - delayed by up to 20 minutes.
  • priceopen: the opening price of the stock for the current day.
  • high: the highest price the stock traded for the current day.
  • low: the lowest price the stock traded for the current day.
  • volume: number of shares traded of this stock for the current day.
  • marketcap: the market cap of the stock.
  • tradetime: the last time the stock traded.
  • datadelay: the delay in the data presented for this stock using the googleFinance() function.
  • volumeavg: the average volume for this stock.
  • pe: the Price-to-Earnings ratio for this stock.
  • eps: the earnings-per-share for this stock.
  • high52: the 52-week high for this stock.
  • low52: the 52-week low for this stock.
  • change: the change in the price of this stock since yesterday’s market close.
  • beta: the beta value of this stock.
  • changepct: the percentage change in the price of this stock since yesterday’s close.
  • closeyest: yesterday’s closing price of this stock.
  • shares: the number of shares outstanding of this stock.
  • currency: the currency in which this stock is traded.

        更多GoogleFinance()函数的资料请参考google docs的帮助文档中的相关内容

        为了提取我们所需要的历史上任何一天某股票的收盘价,我们需要先使用concatenate()函数将这2×2的四个单元格的内容合并到一个单元格。

        concatenate()函数的表达式如下:
        CONCATENATE(text_1, text_2, …, text_30)   
        concatenate()函数的作用是:Combines several text strings into one string. Text_1, text_2, … text_30 are text passages that are to be combined into one string.

        通过这个表达式:
        =concatenate(GoogleFinance(B2,”price”,$M$1,$M$1))
        可以看到合并之后的字符串的样子:
        DateClose10/16/2007 15:00:0019358.441
        美国股市的股票合并之后的字符串略有不同,因为收盘时间不一样,如下图所示:
       

        然后,我们需要从这一长串字符串中截取我们需要的股票价格,即“DateClose10/16/2007 15:00:0019358.441”中的19358.441,我们可以使用mid()函数,这个函数其实也是openoffice中的函数。

        mid函数的表达式为:MID(text, start, number)   
        mid函数的作用是:Returns a text segment of a character string. The parameters specify the starting position and the number of characters. Text is the text containing the characters to extract. Start is the position of the first character in the text to extract. Number is the number of characters in the part of the text.

        通过这个表达式:
        =mid(concatenate(GoogleFinance(B2,”price”,$M$1,$M$1)),29,8)
        可以截取我们所需要的股票价格,但此时获得的仍然是字符串格式的股票价格,我们还需要使用value()函数将它转化为数字格式,表达式如下:
        =value(mid(concatenate(GoogleFinance(B2,”price”,$M$1,$M$1)),29,8))

        经过这样的转换,就可以获得任何一支股票历史上任何一天的收盘价,但是某些股票的收盘价小数点后的位数过多,可以稍微修改一下格式为小数点后2位的形式、右对齐就完美了!

        forcode在琢磨这个表达式的过程中,受到了国外网站上“Tracking your stock portfolio using Google Docs”这篇文章的启发,才知道google docs的spreadsheet支持函数表达式嵌套,才会去尝试各种表达式组合,在此表示感谢。但是这篇文章中提到的方法:
        First in cell M2 we enter
        =concatenate(GoogleFinance(B2,"price",C2))
        and then in the cell where the historical price is needed we enter
        =value(mid(M2,3+find(":",M2,1+find(":",M2)),99))

        经forcode测试没有成功,而且,这个方法有一个很大的缺点:它由两个表达式组成,需要用另外一个表格来计算中间结果,不是直接用一个公式得到任何一支股票在历史上某一天价格,可移植性大大减弱。

你可能对这些文章感兴趣:

Related posts:

  1. Marc Faber:专家与预测 Forecasts & Experts forcode:很少转载纯英文的帖子,不过Marc Faber的这篇有关专家与预测的帖子很不错,历史上很多所谓的专家预测被证明是错误的。但是,听专家怎么说依然是有价值的,因为专家在他的领域里掌握了丰富的知识,专家可以为你提供事实。专家在自己擅长领域里的预测则可以听听,但仅限于他所擅长的狭窄领域。其实前段时间看了几年前媒体对丁磊的访谈,丁磊在访谈中说他认为手机拍照没前途,但最近几年手机拍照性能的发展改变了他的想法,但他依然认为手机玩游戏没前途,事实再次证明他的判断是错误的。 As my readers can imagine, I am extremely...
  2. 形神兼备的名人肖像素描(组图) 程鸿老师2011年作品:《名人素描集》。神形兼备,惟妙惟肖,下笔干净利落。(程鸿,男,号大弘,1962年生,山西太原人。1983年毕业于太原理工大学美术学院;1991年就读于北京画院研修生班;为中国国家画院龙瑞工作室山水课题研究班成员,平时以画国画为主)                  ...
  3. 内蒙古11月份罕见连阴雨 多地降水量创历史新高  近日,内蒙古中西部地区出现连续降水天气,多地11月总降水量纷纷突破了历史极值。持续的降水没有给当地交通造成较大影响,相反雨水对滋润土壤、补充地下水、水库蓄水比较有利。   受冷空气和西南暖湿气流共同影响,11月2日至7日,内蒙古中西部地区出现持续降水天气,各地普降小到中雨,局地中到大雨。截至7日8时,包头市降水量在0.6至64.4毫米之间,最大降水量出现在土右旗萨拉齐镇,为64.4毫米,突破了11月上旬最大降水量32.9毫米的历史极值。   3日,首府呼和浩特市市区、土左旗、和林县的单日降水量创下近四十年11月单日降水量新高,并且土左旗、托县、武川县过程降水量创11月上旬降水历史最大值,同时,土左旗以49.4毫米、托县33.8毫米降水量,突破了月降水历史极值。    8日呼伦贝尔市鄂温克旗出现雾凇天气(潘丽华摄)   2日到4日,乌兰察布市卓资县出现中到大雨天气,局地降水量达到50毫米,突破历史同期极值。   气象历史资料显示,内蒙古中西部11月出现连阴雨的天气比较少见,40年来仅出现过两次,此次降雨量级之大实属历史罕见。    8日呼伦贝尔市鄂温克旗出现雾凇天气(潘丽华摄)...
  4. 在珠峰上,长眠着许多勇士的遗体(组图) 身体的瞬间霜冻,在越靠近顶端时越容易发生。 死亡往往发生在攀登者的一个“小憩”当中。他们睡着了,然后再也醒不来了。 在珠峰上掩埋一具尸体是几乎不可能的事情,只能任其风化分解成骷髅。 攀登者撞见那些在濒死边缘的另外一些攀登者,只能袖手旁观而不能出手相救。在这种地方,只能自救。你别无选择。 攀登珠峰大概要花费三万到六万美金,甚至花掉你的生命。 这是一个地标性质的尸体了,被命名为"Green Boots." 在珠峰上,大概有两百个这样的地标。 这些悬吊着的棺材往往是攀登者遇到的最大的阻碍。有的时候出现一个小失误,就会让攀登者吊在那里活活冻死。...

以上关联文章由 Yet Another Related Posts Plugin 提供支持。

















written by forcode

2 Pings to “在GDocs表格中计算任意股票历史上任意天的收盘价”

  1. 利用google docs spreadsheet制作股票实时行情(图) | 奇想录 Says:

    [...]         另外,google docs spreadsheet本身不支持只用一个单元格和一个表达式来获取任何一支股票历史上任何一天的收盘价,我弄了一个表达式来实现这一点:         =value(mid(concatenate(GoogleFinance(B2,”price”,$M$1,$M$1)),29,8))         参考forcode昨天(090417)写的帖子:        在GDocs表格中计算任意股票历史上任意天的收盘价        http://qixianglu.cn/20090424080344.html [...]

  2. forcode自定义的股票指标:“相对大盘” | 奇想录 Says:

    [...] 另外,可以参考:        在GDocs表格中计算任意股票历史上任意天的收盘价        利用google docs [...]


Leave a Reply

  • 统计和数据

  • 职场市场

  • 无觅相关文章插件,快速提升流量

    sitemap Stats