三十分鐘輕鬆自製即時股票串流報價

我經常在網上的討論區看見一些股民查詢那裡有免費即時股票串流報價, 有一些答覆更建議可以不斷 Refresh 瀏覽器。據我了解, 很多小投資者真的不斷用滑鼠 Refresh 瀏覽器以達到即時報價的效果。這樣不單縮短電腦、顯示器及滑鼠壽命, 最重要是傷神及嚴重損害眼睛, 從而傷害健康。

其實, 製作即時股票串流報價是十分容易及簡單的, 不費分毫, 不需要任何軟件, 只要使用視窗(Windows)內的記事本 (Note Pad) 或其他免費的文字編寫器 Text Editor 編寫一些十分簡單的 JavaScript 便可以了, 在三十分鐘內輕鬆的完成。

自己製作即時股票串流報價還有一個最大好處, 就是可以按喜好隨意設計及編排畫面, 最重要的是可以按需要隨意加入一些功能, 例如: 到價提示、同時監察多個所需股票, 等等…..。

一些買賣活躍的股民會使用證券行或銀行的即時股票串流報價服務,  一般的平均月費大約為港幣三百多塊。對於經濟比較富裕的股民, 這當然不是問題。但是, 大部份的股票散户都是一些小投資者, 投資金額不多, 而且買賣次數不多, 使用這些即時股票串流報價並不划算, 以下是一簡單例子。

假設某證券行的即時股票串流報價月費是港幣350.00, 一年的費用便是港幣4,200.00。如果你的投資金額是港幣50,000.00, 那麼, 股票串流報價費用便佔了投資金額的9%了; 假設那年是賺錢, 單是股票串流報價費用便佔去了利率的9%, 如果連同手續費, 你每年的投資回報必須要超過12%, 否則實際上是虧本。

我今天就簡略的介紹製作的過程。

第一步: 準備執行串流報價程式平台

製作完成後的串流報價程式需要一個平台來執行的, 一般有兩個方法, 都是十分簡單及容易:

  • 在自己的電腦中執行
  • 在網頁寄存戶口 (Web Hosting Account) 執行

現在就續一介紹這兩個方法。

i) 在自己的電腦中執行串流報價程式

要在自己的電腦中執行串流報價程式, 便需要將電腦變成一個簡單的網存伺服器 (Web Server)。不用擔心, 不會影響電腦任何功能, 也不會妨礙電腦工作。

要將電腦變成一個簡單的伺服器, 只要安裝網存伺服器程式。安裝十分簡單, 一般只需二分鐘。互聯網上有很多免費的網存伺服器程式, 最容易安裝及使用的應該是 XAMPP。

以下網站有安裝 XAMPP 的詳細視像教材 (Video Tutorials):

如何在電腦設立網存伺服器視像教材

只要參考前三個視像教材便可以了:

Install XAMPP Server on Local Computer (在電腦安裝 XAMPP 程式)

Check Status of XAMPP Server (檢查 XAMPP 伺服器的狀態)

Web Document Root of XAMPP Server (存放文件的根目錄)

ii) 在網頁寄存戶口執行串流報價程式

如果你害怕安裝程式, 又或者不想在電腦安裝額外程式, 這方法是最簡單的。只需將串流報價程式上載到網頁寄存戶口, 便可以立即使得了。

這方法還有一個好處, 就是可以在任何地方的上網電腦使用, 及可以在智能手機上使用。

網頁寄存十分便宜, 很多信譽良好的網頁寄存公司, 年費都是在港幣一百元以下。

第二步: 編寫串流報價程式

串流報價程式其實十分簡單, 只要使用記事本 (Note Pad) 編寫一些十分簡短及簡單的 JavaScript 便可以了。今天只討論程式的結構, 日後有機會才詳細的討論如何編寫程式。

串流報價程式如何工作及結構:

i) 命令程式每x秒瀏覽某股票即時報價網站。

ii) 接著程式將整個網頁內容找回來, 然後篩選所需要的數據。

iii)最後程式只更新串流報價畫面上變動的數據欄, 無需 Refresh 整個畫面。 所以使用者只看到串流報價畫面上一些變動數據的跳動轉變。

下圗解釋整個串流報價程式的工作程序:

stream-stock-quote-program-01

以下視頻簡單介紹完成後的即時股票串流報價程式:

其實程式的結構十分簡單, 而且十分簡短, 日後有機會才詳細討論程式的內容。

28 Responses to 三十分鐘輕鬆自製即時股票串流報價

  1. stanley says:

    你好

    請問怎樣編寫程式??
    我已照著做了XAMPP 了

    懇請賜教

    Stanley

    • Alex says:

      Hi Stanley,

      最近忙於幾個教育動畫的工作, 遲了回覆。其實程式十分簡單, 稍後有時間和大家分享。

  2. Truman says:

    你好Alax,我看到你的文章介紹自製即時股票串流報價,我在自製過程中出現困難,請問你是如何把網頁數據攝取的?是攝取PHP還是HTML Source然後進行篩選?還是使用jQuery的 get() Method?謝謝

    • Alex says:

      Hi Truman,

      我是用 getJSON() method 的, 即是用 AJAX HTTP GET request 抽取 JSON data, 如下:

      // webExtract.php 就是用來從網站抽取數據
      // $stockNumber 是輸入的股票號碼
      $.getJSON(‘webExtract.php’, { id: ‘< ?php echo $stockNumber; ?>‘ }, function(data) {
      ……………………………………
      ……. 處理從網站抽取回來的數據 ………..
      ……………………………………
      }

      // 網頁每幾秒自動更新數據欄, 無需 Refresh 整個畫面。

      其實以上已經是整個串流報價程式的全部概念。

  3. Truman says:

    還有你是用哪method 把數據 加到頁面中?
    我試過用.prepend不過之前的數據沒有被覆蓋, 而是在舊數據之後加了新數據

    • Alex says:

      Hi Truman,

      請參考對上的回覆。

      從網站抽取回來的一串數據經處理後便可隨意顯示在網頁當中。

  4. Truman says:

    Hi Alax,
    感謝你的回覆, 小弟只在Yahoo同Sina找到json數據表, 不過Y記數據延遲15分鐘, 所以用了Sina的
    無論如何, 我試過用getJSON method, 不過無法攝取伺服器以外的檔案(即是absolute url都不行),
    附上一段code


    ......
    function getData() {
    var url = "http://finance.sina.com.hk/cgi-bin/api/stock.cgi?action=stock";
    var symbol = $("#symbol").val();

    $.getJSON(url, 's=' + symbol)
    ......

    會是伺服器不支援getJSON嗎?還是一些原因?

    • Alex says:

      Hi Truman,

      我的方法比你的簡單和直接很多。 我只是將即時報價的網頁抓回來, 將所需要的資料轉成 JSON 形式的數據而已。

  5. Truman says:

    上面code打錯, 更正:


    ......
    function getData() {
    var url = "http://finance.sina.com.hk/cgi-bin/api/stock.cgi";
    var symbol = $("#symbol").val();

    $.getJSON(url, '?action=stock?s=' + symbol)
    ......

    • Alex says:

      Hi Truman,

      已於上貼子回覆。

      如果你在 Yahoo 同 Sina 找到 json 數據表, 理論上應該更方便快捷完成。

      請問 Sina 同 Sina json 數據表的 URLs 是什麼?

  6. Truman says:

    http://finance.sina.com.hk/cgi-bin/api/stock.cgi?action=stock&s=%5Bsymbol%5D
    [symbol] 打任何股票代號也可以
    這是json 數據表嗎?雖然是.cgi file, 但內容格式跟json, xml無異

    另外你提到將所需要的資料轉成 JSON 形式的數據, 那是要用php和database嗎?
    ps. 我是php newbie…

    • Alex says:

      Hi Truman,

      Sina query 出來就是 json 數據表! 我將資料整理好就比較容易明白了:


      {
      “Volume”: “2.91 億”,
      “QuoteType”: “S”,
      “LotSize”: “1000”,
      “PrevClose”: “5.190”,
      “Last”: “5.200”,
      “Low”: “5.170”,
      “LastUpdate”: “2014-07-25 16:01:06”,
      “ExpDate”: “”,
      “YearLow”: “4.330”,
      “YearHigh”: “5.660”,
      “ImpVol”: null,
      “Gearing”: null,
      “PctChange”: “0.193%”,
      “EntitlementRatio”: null,
      “TimeToMaturity”: null,
      “Currency”: “HKD”,
      “AskSpread”: “0.010”,
      “Suspension”: “N”,
      “ID”: “1398”,
      “Open”: “5.210”,
      “Premium”: null,
      “BullOrBear”: “”,
      “Turnover”: “15.14 億”,
      “Moneyness”: null,
      “CallLevel”: null,
      “EffGearing”: null,
      “A-Share”: {
      “Last”: “3.520”,
      “Currency”: “CNY”,
      “LastGenerationTime”: “2014-07-25 15:44:52”,
      “Premium”: “17.355”,
      “Symbol”: “601398”
      },
      “Desp”: “工商銀行”,
      “LastTradingDate”: “”,
      “CallOrPut”: “”,
      “WarrantType”: “”,
      “High”: “5.230”,
      “LinkID”: {},
      “Yield”: “6.442”,
      “Change”: “0.010”,
      “MarketCap”: “4.51 千億”,
      “BidSpread”: “0.010”,
      “ADR-Share”: {},
      “lastmodify”: 1406285757,
      “PERatio”: “5.417”,
      “OutstandingQty”: “0”,
      “Strike”: null,
      “Delta”: null
      }

      你可以不必像我那麼將即時報價的網頁抓回來轉成 JSON 形式的數據。可以直接使用Sina query 出來的 json 數據! 這樣程式處理的速度會快一些。

      P.S. 將所需要的資料轉成 JSON 形式的數據純粹用php就可以。

  7. Truman says:

    但是我用過getJSON method 無法抽取Sina query, 我Google發現如果要做到跨域Ajax, 要用JSONP, 即在連結後加”?jsoncallback=”, 但依然不行

    Testing

    (function() {
    var Stock = "http://finance.sina.com.hk/cgi-bin/api/stock.cgi?action=stock&s=1?jsoncallback=?";
    $.getJSON(Stock)
    .done(function( data ) {
    $.each(data, function(key, val) {
    $("#test").text(data);
    alert(data);
    });
    });
    })();

    • Alex says:

      Hi Truman,

      要用 getJSON method 從其他網站取 json 數據, 其實我先前都說過。方法是:

      首先用 PHP 從其他網站取 json 數據, 這樣 json 數據便在你伺服器的網站內。 接著才將json 數據注入主網頁(即時股票串流報價網頁)。這樣便解決了跨域的問題了。

  8. Truman says:

    Hi
    我用file_get_contents($url) 去從其他網站取 json 數據
    但還是卡在問題中, 跨域不能解決
    附上code, 在網頁展示:
    http://truboy.altervista.org/stock/test/json.php

    • Alex says:

      Hi Truman,

      你附上的 code 已經 works 啦! 請看我 execute 的情況:

      json

      錯誤應該是:

      < ?php

      正確是(?php 前是沒有空格的):

      < ?php

  9. Truman says:

    我自己開 server原來成功, 應該是web hosting的問題(可能php version太舊)
    Thanks Alex

  10. jason says:

    Hi

    請問可以share D code 如我嗎?

    jason

    • Alex says:

      Hi Jason,

      非常抱歉, 因某些問題, D code 不可以公開。

  11. Sam says:

    你好﹐

    請問這個 股票串流報價 script 還work 嗎﹖ 可在那裡download?

    thsths

    • Alex says:

      Hi Sam,

      股票串流報價的 script 仍然 work 的, 只是因某些問題, 不可以公開而已。

  12. Sam says:

    thanks reply. 可惜, 因我不懂寫程式, 可指點一下嗎?如不便公開, 可pm 嗎?ths

    • Alex says:

      Hi Sam,

      串流報價程式其實十分簡單, 都是簡單的 JavaScript, 不過如果不懂寫程式, 可能會有困難。真對不起, 不公開包括 PM。

  13. sam says:

    ok. ths

  14. sam says:

    你好﹐ 網上找到以下 騰信 即時數據 ﹕

    http://money18.on.cc/js/real/hk/quote/00700_r.js

    是否用你說的方法 $.getJSON 就可抽出數據放到自己的web ?

    ths again

    • Alex says:

      Hi Sam,

      對! 其實任何即時報價的網站也可以的。

  15. sam says:

    ths . try try but to me the script language is difficult to understand

Leave a Reply

Your email address will not be published. Required fields are marked *