用vue.js實現的期貨,股票的實時K線


用vue.js實現的期貨,股票的實時k線

項目地址: https://github.com/zhengquantao/vue-Kline

vue-kline npm version

NPM

  • 效果圖

Build Setup

本項目基於Vue的k線圖.某K線插件做了一些封裝和二次開發,使其更加便於使用和修改,方便后來的開發者. 修改主要涉及以下幾個點:

  • 使用 webpack 打包 js/css/images/*.vue
  • 使用 vue.js 對原有代碼進行了拆分和封裝 支持所有vue版本
  • 刪除了一些不必要的邏輯
  • 把源碼中常用可配置的部分抽出來
  • 增加對外接口及事件回調
  • 超級簡單的組件引入方式,不用在意其背后的實現原理,真正做到快速上手,快速開發

演示地址

Requirements

  • jquery
  • jquery.mousewheel

安裝和使用

安裝

$ npm install vue-kline 
    OR
  only download src (不推薦,要改變import引入路徑和自己安裝依賴,對新人不友好)
  • 使用組件方式引入, 放在想添加的頁面上
   <template>
    <div id="app">
        <!--把子組件放到想放的位置-->
        <Vue-kline></Vue-kline>
    </div>
    </template>
    <script>
    import VueKline from "vue-kline"; //當前頁引入vue-kline
    export default {
      components: {
          VueKline,                   //以子組件形式注冊到當前頁面中
      },
    };
</script>
  • OR 僅僅下載src文件
  <template>
    <div id="app">
        <!--把子組件放到想放的位置-->
        <Vue-kline></Vue-kline>
    </div>
    </template>
    <script>
    import VueKline from "./src/kline"; //當前頁引入vue-kline(引入方式不同,其他方式相同,注意要改你自己的路徑)
    export default {
      components: {
          VueKline,                   //以子組件形式注冊到當前頁面中
      },
    };
</script>
  

自定制(沒有使用Vuex作為組件數據轉輸方式,而是用:xxxx數據綁定方式, 所以vue-kline很輕便、簡單)

    <template>
      <div class="container">
        <!-- :klineParams="klineParams" :klineData="klineData" 綁定下面data數據 用於自定制數據傳輸到vue-kline, ref="callMethods"綁定一個DOM事件 用於調用接口  --->
        <Vue-kline :klineParams="klineParams" :klineData="klineData" ref="callMethods"></Vue-kline>
      </div>
    </template>
    <script>
    import VueKline from "vue-kline";
    improt axios from "axios"
    export default {
      components: {
        ...
        VueKline
      },
      data() {
        return {
          klineParams: {
            width: 600,               // k線窗口寬
            height: 400,              // k線窗口高
            theme: "dark",            // 主題顏色
            language: "zh-cn",        //語言
            ranges: ["1w", "1d", "1h", "30m", "15m", "5m", "1m", "line"],  // 聚合選項
            symbol: "BTC",            // 交易代號
            symbolName: "BTC/USD",    // 交易名稱
            intervalTime: 5000,       // k線更新周期 毫秒
            depthWidth: 50            // 深度圖寬度
          },
          klineData: {};              // 數據
      },
      computed: {                     // 當然你可以寫在methods中, 我這里寫到computed中
          requestData(){              //方法名任意取 
            this.$axios.request({
            url: "xxxxx",             //請求地址 
            method: "POST"
          })
          .then(ret => {
            this.klineData = ret      // 把返回數據賦值到上面的 klineData, 
          });
        },  
      },
      mounted(){
        this.requestData;             // 進入頁面時執行 requestData()
      },
      methods:{                       // 可根據使用場景調用內部自定制方法(如果不需要就不寫)
        this.$refs.callMethods.resize(int width, int height);
        this.$refs.callMethods.setSymbol(string symbol, string symbolName)
        this.$refs.callMethods.setTheme(string style);
        this.$refs.callMethods.setLanguage(string lang);
        this.$refs.callMethods.setIntervalTime(int intervalTime);
        this.$refs.callMethods.setDepthWidth(int width);
        this.$refs.callMethods.onRangeChange();
        this.$refs.callMethods.redraw();
      }
    };
    </script>

參數

klineParams:{}  // K線圖參數(具體參數看 構建選項)
klineData:{}    // 數據(只需把指定數據放到這里即可渲染出K線)

構建選項

參數名稱 參數說明 默認值
width 寬度 (px) 600
height 高度度 (px) 400
theme 主題 dark(暗色)/light(亮色) dark
language 語言 zh-cn(簡體中文)/en-us(英文)/zh-tw(繁體中文) zh-cn
ranges 聚合選項 1w/1d/12h/6h/4h/2h/1h/30m/15m/5m/3m/1m/line (w:周, d:天, h:小時, m:分鍾, line:分時數據) ["1w", "1d", "1h", "30m", "15m", "5m", "1m", "line"]
symbol 交易代號  
symbolName 交易名稱  
intervalTime 請求間隔時間(ms) 3000
depthWidth 深度圖寬度 最小50,小於50則取50,默認50

方法

  • redraw()

    重新繪制線條

this.$refs.callMethods.redraw();
  • resize(int width, int height)

    設置畫布大小

this.$refs.callMethods.resize(1200, 550);
  • setSymbol(string symbol, string symbolName)

    設置交易品種

this.$refs.callMethods.setSymbol('usd/btc', 'USD/BTC');
  • setTheme(string style)

    設置主題

this.$refs.callMethods.setTheme('dark');  // dark/light
  • setLanguage(string lang)

    設置語言

this.$refs.callMethods.setLanguage('en-us');  // en-us/zh-ch/zh-tw
  • setIntervalTime(int intervalTime)

    設置請求間隔時間(ms)

this.$refs.callMethods.setIntervalTime(5000);
  • setDepthWidth(int width)

    設置深度圖寬度

this.$refs.callMethods.setDepthWidth(100);
  • onRangeChange: function ()

    聚合時間改變時觸發

this.$refs.callMethods.onRangeChange();

事件

事件函數 說明
onResize: function(width, height) 畫布尺寸改變時觸發
onLangChange: function(lang) 語言改變時觸發
onSymbolChange: function(symbol, symbolName) 交易品種改變時觸發
onThemeChange: function(theme) 主題改變時觸發
onRangeChange: function(range) 聚合時間改變時觸發

回調函數res格式

數據請求成功

當success為true,請求成功。

{
  "success": true,
  "data": {
    "lines": [
      [
        1.50790476E12,
        99.30597249871,
        99.30597249871,
        99.30597249871,
        99.30597249871,
        66.9905449283
      ]
    ],
    "depths": {
      "asks": [
        [
          500654.27,
          0.5
        ]
      ],
      "bids": [
        [
          5798.79,
          0.013
        ]
      ]
    }
  }
}

數據請求失敗

當res為空,或者success為false,請求失敗。

{
  "success": false,
  "data": null,	        // success為false,則忽略data
}
  • res參數說明:

  • lines: K線圖, 依次是: 時間(ms), 開盤價, 最高價, 最低價, 收盤價, 成交量

  • depths深度圖數據,asks: 一定比例的賣單列表, bids:一定比例的買單列表, 其中每項的值依次是 : 成交價, 成交量

特別說明

  • 當然細心的你可能會發現我npm包名(vue-kline)和github上的名字(vue-Kline)會不一樣,對你造成一定誤解,對此我十分抱歉。原因是當我先把vue-kline發布到npm上,再回到github上是發現名字十天前已經被人使用了。沒有辦法github上只能硬着頭皮用K大寫 vue-Kline。

vue-kline起源與ctpbee發展計划

vue-kline起因是我們內部開源ctpbee量化項目,需要將數據直觀展示給用戶,而網上又沒有關於vue的實現。在此背景下vue-kline孕育而生。

ctpbee是一個可供使用的交易微框架, 主要面對開發者, 希望能得到各位大佬的支持. 策略以及指標等工具都以ctpbee_** 形式發布. ctpbee只提供最小的內核. 本人崇尚開源, 無論你是交易者還是程序員, 只要你有新的想法以及對開源感興趣, 歡迎基於ctpbee 開發出新的可用工具. 我會維護一個工具列表, 指引用戶前往使用.

最后一句

如果這個能幫助到你, 請點擊star來支持我噢. ^_^

如果你希望貢獻代碼, 歡迎加群一起討論和或者提交PR QQ群號(: 756319143) 點進加入群聊以了解更多

最后一句 ----> 祝各位大佬都能賺錢 !

如果對你有用或者你喜歡,希望能在github上給我點顆星星,給我支持吧!github地址>>>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM