kline 專業金融K線繪製庫
阿新 • • 發佈:2019-01-23
本專案扒了某網站的K線外掛做了一些封裝和二次開發,使其更加便於使用和修改,方便後來的開發者. 修改主要涉及以下幾個點:
- 使用 webpack 打包 css/images/html
- 使用 ES6 + Babel 對原有程式碼進行了拆分和重構
- 刪除了一些不必要的邏輯
- 把原始碼中可配置的部分抽出來
- 添加了對 websocket(stomp over websocket) 連線方式的支援
- 增加對外介面及事件回撥
Features
✅ 支援兩種主題配色切換 ✅ 支援簡體中文,英文,繁體中文三種語言 ✅ 可配置的時間聚合方式 ✅ 支援多種畫線工具 ✅ 支援多種畫圖演算法 ✅ 支援深度圖資料及最近成交資料展示 ✅ 支援普通輪詢和Websocket Over Stomp兩種連線方式
ScreenShot!
Requirements
- jquery
- jquery.mousewheel
- sockjs (僅stomp方式需要)
- stomp (僅stomp方式需要)
Install & Load
安裝
$ npm install kline
使用標籤引入, 在HTML頁面頭部加入
<script src="/lib/sockjs.js"></script> <script src="/lib/stomp.js"></script> <script src="/lib/jquery.js"></script> <script src="/lib/jquery.mousewheel.js"></script> <script src="/dist/kline.js"></script>
OR RequireJS
require.config({ paths: { "jquery": "../lib/jquery", "jquery.mousewheel": "../lib/jquery.mousewheel", "sockjs": "../lib/sockjs", "stomp": "../lib/stomp", "kline": "../js/kline" }, shim: { "jquery.mousewheel": { deps: ["jquery"] }, "kline": { deps: ["jquery.mousewheel", "sockjs", "stomp"] } } }); require(['kline'], function () { // ... });
- OR CommonJS
var Kline = require('kline');
- OR ES6
import Kline from 'kline';
- 在頁面中加入
<div id="kline_container"></div>
Examples
- Poll(輪詢)
var kline = new Kline({
element: "#kline_container",
symbol: "BTC",
symbolName: "比特幣",
type: "poll", // poll/stomp
url: "http://127.0.0.1:8080/mock.json"
});
kline.draw();
- Stomp Over Websocket
var kline = new Kline({
element: "#kline_container",
symbol: "BTC",
symbolName: "比特幣",
type: "stomp", // poll/stomp
url: 'http://127.0.0.1:8088/socket',
subscribePath: "/kline/subscribe",
sendPath: "/kline/send"
});
kline.draw();
Support Options
引數名稱 | 引數說明 | 預設值 |
---|---|---|
element |
容器元素選擇器 | #kline_container |
width |
寬度 (px) | 1200 |
height |
高度度 (px) | 650 |
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 |
交易名稱 | |
type |
連線型別 stomp/poll(輪詢) | poll |
url |
請求地址 | |
limit |
分頁大小 | 1000 |
intervalTime |
請求間隔時間(ms) | 3000 |
subscribePath |
訂閱地址 (僅stomp方式需要) | |
sendPath |
傳送地址 (僅stomp方式需要) | |
debug |
是否開啟除錯模式 true/false | true |
showTrade |
是否顯示行情側邊欄 true/false | true |
enableSockjs |
是否開啟sockjs支援 true/false | true |
reverseColor |
是否反色, 預設綠漲紅跌 true/false | false |
stompClient |
stomp 連線物件 | null |
Methods
-
draw()
畫K線圖
kline.draw();
-
resize(int width, int height)
設定畫布大小
kline.resize(1200, 550);
-
setSymbol(string symbol, string symbolName)
設定交易品種
kline.setSymbol('usd/btc', 'USD/BTC');
-
setTheme(string style)
設定主題
kline.setTheme('dark'); // dark/light
-
setLanguage(string lang)
設定語言
kline.setLanguage('en-us'); // en-us/zh-ch/zh-tw
-
setShowTrade: function (isShow)
設定展示是否展示交易模組
kline.setShowTrade(false); // true/false
-
toggleTrade: function ()
切換展示是否展示交易模組
kline.toggleTrade();
-
setIntervalTime: function (intervalTime)
設定請求間隔時間(ms)
kline.setIntervalTime(5000);
-
connect: function ()
建立socket連線
kline.connect();
-
disconnect: function ()
斷開socket連線
kline.disconnect();
-
pause: function ()
暫停請求資料
kline.pause();
-
resend: function ()
重新請求資料
kline.resend();
Events
事件函式 | 說明 |
---|---|
onResize: function(width, height) |
畫布尺寸改變時觸發 |
onLangChange: function(lang) |
語言改變時觸發 |
onSymbolChange: function(symbol, symbolName) |
交易品種改變時觸發 |
onThemeChange: function(theme) |
主題改變時觸發 |
onRangeChange: function(range) |
聚合時間改變時觸發 |
Example
var kline = new Kline({
element: "#kline_container",
symbol: "BTC",
symbolName: "比特幣",
type: "poll", // poll/stomp
url: "http://127.0.0.1:8080/mock.json",
onResize: function(width, height) {
console.log("chart resized: " + width + " " + height);
}
});
Response
Example
{
"success": true,
"data": {
"lines": [
[
1.50790476E12,
99.30597249871,
99.30597249871,
99.30597249871,
99.30597249871,
66.9905449283
]
],
"trades": [
{
"amount": 0.02,
"price": 5798.79,
"tid": 373015085,
"time": 1508136949000,
"type": "buy"
}
],
"depths": {
"asks": [
[
500654.27,
0.5
]
],
"bids": [
[
5798.79,
0.013
]
]
}
}
}
-
響應引數說明:
-
lines
: K線圖, 依次是: 時間(ms), 開盤價, 最高價, 最低價, 收盤價, 成交量 -
depths
(可選, 行情側邊欄顯示): 深度圖資料,asks
:一定比例的賣單列表,bids
:一定比例的買單列表, 其中每項的值依次是 成交價, 成交量 -
trades
(可選, 行情側邊欄顯示): 最近成交記錄,amount
: 成交量,price
:單價,tid
:訂單ID,time
:成交時間(ms),type
:成交型別 buy/sell