2023-12-24 21:59:57 +08:00

1 line
42 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=2"><meta name="theme-color" content="#FFF"><link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon.png"><link rel="icon" type="image/ico" sizes="32x32" href="/images/favicon.ico"><meta http-equiv="Cache-Control" content="no-transform"><meta http-equiv="Cache-Control" content="no-siteapp"><link rel="alternate" type="application/rss+xml" title="涛声依旧" href="https://hitoli.com/rss.xml"><link rel="alternate" type="application/atom+xml" title="涛声依旧" href="https://hitoli.com/atom.xml"><link rel="alternate" type="application/json" title="涛声依旧" href="https://hitoli.com/feed.json"><link rel="stylesheet" href="//fonts.googleapis.com/css?family=Mulish:300,300italic,400,400italic,700,700italic%7CFredericka%20the%20Great:300,300italic,400,400italic,700,700italic%7CNoto%20Serif%20JP:300,300italic,400,400italic,700,700italic%7CNoto%20Serif%20SC:300,300italic,400,400italic,700,700italic%7CInconsolata:300,300italic,400,400italic,700,700italic&display=swap&subset=latin,latin-ext"><link rel="stylesheet" href="/css/app.css?v=0.0.0"><meta name="keywords" content="KLineChart,K线,蜡烛图"><link rel="canonical" href="https://hitoli.com/2022/11/24/KLineChart%E5%AE%9E%E7%8E%B0%E4%B8%80%E5%B9%85%E5%9B%BE%E4%B8%8A%E7%94%BB%E5%A4%9A%E4%B8%AA%E8%9C%A1%E7%83%9BK%E7%BA%BF/"><title>KLineChart 实现一幅图上画多个蜡烛 K 线 - KLineChart - 工作 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣</title><meta name="generator" content="Hexo 6.3.0"></head><body itemscope itemtype="http://schema.org/WebPage"><div id="loading"><div class="cat"><div class="body"></div><div class="head"><div class="face"></div></div><div class="foot"><div class="tummy-end"></div><div class="bottom"></div><div class="legs left"></div><div class="legs right"></div></div><div class="paw"><div class="hands left"></div><div class="hands right"></div></div></div></div><div id="container"><header id="header" itemscope itemtype="http://schema.org/WPHeader"><div class="inner"><div id="brand"><div class="pjax"><h1 itemprop="name headline">KLineChart 实现一幅图上画多个蜡烛 K 线</h1><div class="meta"><span class="item" title="创建时间2022-11-24 08:53:00"><span class="icon"><i class="ic i-calendar"></i> </span><span class="text">发表于</span> <time itemprop="dateCreated datePublished" datetime="2022-11-24T08:53:00+08:00">2022-11-24</time> </span><span class="item" title="本文字数"><span class="icon"><i class="ic i-pen"></i> </span><span class="text">本文字数</span> <span>2.1k</span> <span class="text"></span> </span><span class="item" title="阅读时长"><span class="icon"><i class="ic i-clock"></i> </span><span class="text">阅读时长</span> <span>2 分钟</span></span></div></div></div><nav id="nav"><div class="inner"><div class="toggle"><div class="lines" aria-label="切换导航栏"><span class="line"></span> <span class="line"></span> <span class="line"></span></div></div><ul class="menu"><li class="item title"><a href="/" rel="start">☆∵∴Hito∴∵★</a></li></ul><ul class="right"><li class="item theme"><i class="ic i-sun"></i></li><li class="item search"><i class="ic i-search"></i></li></ul></div></nav></div><div id="imgs" class="pjax"><ul><li class="item" data-background-image="https://nas.hitoli.com:18014/images/2022/10/29/6833939bly1gipeubcbajj20zk0m8h1h.jpg"></li><li class="item" data-background-image="https://nas.hitoli.com:18014/images/2022/10/29/6833939bly1gipevgoki5j20zk0m84qp.jpg"></li><li class="item" data-background-image="https://nas.hitoli.com:18014/images/2022/10/29/6833939bly1gicljitigmj20zk0m87fp.jpg"></li><li class="item" data-background-image="https://nas.hitoli.com:18014/images/2022/10/29/6833939bly1giclgi503lj20zk0m8hdt.jpg"></li><li class="item" data-background-image="https://nas.hitoli.com:18014/images/2022/10/29/6833939bly1giclhtuo6nj20zk0m8ttm.jpg"></li><li class="item" data-background-image="https://nas.hitoli.com:18014/images/2022/10/29/6833939bly1gipeu1usa7j20zk0m8b29.jpg"></li></ul></div></header><div id="waves"><svg class="waves" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 24 150 28" preserveAspectRatio="none" shape-rendering="auto"><defs><path id="gentle-wave" d="M-160 44c30 0 58-18 88-18s 58 18 88 18 58-18 88-18 58 18 88 18 v44h-352z"/></defs><g class="parallax"><use xlink:href="#gentle-wave" x="48" y="0"/><use xlink:href="#gentle-wave" x="48" y="3"/><use xlink:href="#gentle-wave" x="48" y="5"/><use xlink:href="#gentle-wave" x="48" y="7"/></g></svg></div><main><div class="inner"><div id="main" class="pjax"><div class="article wrap"><div class="breadcrumb" itemscope itemtype="https://schema.org/BreadcrumbList"><i class="ic i-home"></i> <span><a href="/">首页</a></span><i class="ic i-angle-right"></i> <span itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"><a href="/categories/%E5%B7%A5%E4%BD%9C/" itemprop="item" rel="index" title="分类于 工作"><span itemprop="name">工作</span></a><meta itemprop="position" content="1"></span><i class="ic i-angle-right"></i> <span class="current" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"><a href="/categories/%E5%B7%A5%E4%BD%9C/KLineChart/" itemprop="item" rel="index" title="分类于 KLineChart"><span itemprop="name">KLineChart</span></a><meta itemprop="position" content="2"></span></div><article itemscope itemtype="http://schema.org/Article" class="post block" lang="zh-CN"><link itemprop="mainEntityOfPage" href="https://hitoli.com/2022/11/24/KLineChart%E5%AE%9E%E7%8E%B0%E4%B8%80%E5%B9%85%E5%9B%BE%E4%B8%8A%E7%94%BB%E5%A4%9A%E4%B8%AA%E8%9C%A1%E7%83%9BK%E7%BA%BF/"><span hidden itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="image" content="/images/avatar.jpg"><meta itemprop="name" content="Hito Li"><meta itemprop="description" content="天下事有难易乎?为之,则难者亦易矣, 天生我材必有用"></span><span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><meta itemprop="name" content="涛声依旧"></span><div class="body md" itemprop="articleBody"><h4 id="引言"><a class="anchor" href="#引言">#</a> 引言</h4><p>最近接到一个任务是通过<span class="exturl" data-url="aHR0cHM6Ly9rbGluZWNoYXJ0cy5jb20vemgtQ04vZ3VpZGU="> KLineChart</span><span class="label info">8.6.1</span> 实现在一幅图上画两个合约的蜡烛图。研究 api 发现并没有通过配置实现的方法,于是联系作者沟通得知需要自己画图实现。于是有了本篇文章。<br><img data-src="https://nas.hitoli.com:18014/images/2022/11/24/KLineChart.jpg" alt="KLineChart.jpg"></p><h4 id="添加模版"><a class="anchor" href="#添加模版">#</a> 添加模版</h4><figure class="highlight js"><figcaption data-lang="JavaScript"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token keyword">let</span> shortName <span class="token operator">=</span> <span class="token keyword">this</span><span class="token punctuation">.</span>constant<span class="token punctuation">.</span>periodTypeEnum<span class="token punctuation">.</span><span class="token function">getNameByCode</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>klineType<span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">' 合约2'</span> <span class="token operator">+</span> <span class="token keyword">this</span><span class="token punctuation">.</span>currentInstrumentId</pre></td></tr><tr><td data-num="2"></td><td><pre><span class="token keyword">this</span><span class="token punctuation">.</span>chart<span class="token punctuation">.</span><span class="token function">addTechnicalIndicatorTemplate</span><span class="token punctuation">(</span><span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="3"></td><td><pre> <span class="token literal-property property">name</span><span class="token operator">:</span> <span class="token string">'custom_candle_solid'</span><span class="token punctuation">,</span></pre></td></tr><tr><td data-num="4"></td><td><pre> <span class="token literal-property property">shortName</span><span class="token operator">:</span> shortName<span class="token punctuation">,</span></pre></td></tr><tr><td data-num="5"></td><td><pre> <span class="token literal-property property">precision</span><span class="token operator">:</span> <span class="token number">2</span><span class="token punctuation">,</span></pre></td></tr><tr><td data-num="6"></td><td><pre> <span class="token literal-property property">bar</span><span class="token operator">:</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="7"></td><td><pre> <span class="token literal-property property">upColor</span><span class="token operator">:</span> <span class="token string">'#EF5350'</span><span class="token punctuation">,</span></pre></td></tr><tr><td data-num="8"></td><td><pre> <span class="token literal-property property">downColor</span><span class="token operator">:</span> <span class="token string">'#26A69A'</span><span class="token punctuation">,</span></pre></td></tr><tr><td data-num="9"></td><td><pre> <span class="token literal-property property">noChangeColor</span><span class="token operator">:</span> <span class="token string">'#888889'</span></pre></td></tr><tr><td data-num="10"></td><td><pre> <span class="token punctuation">&#125;</span><span class="token punctuation">,</span></pre></td></tr><tr><td data-num="11"></td><td><pre> <span class="token literal-property property">plots</span><span class="token operator">:</span> <span class="token punctuation">[</span></pre></td></tr><tr><td data-num="12"></td><td><pre> <span class="token punctuation">&#123;</span> <span class="token literal-property property">key</span><span class="token operator">:</span> <span class="token string">'open'</span><span class="token punctuation">,</span> <span class="token literal-property property">title</span><span class="token operator">:</span> <span class="token string">'开: '</span> <span class="token punctuation">&#125;</span><span class="token punctuation">,</span></pre></td></tr><tr><td data-num="13"></td><td><pre> <span class="token punctuation">&#123;</span> <span class="token literal-property property">key</span><span class="token operator">:</span> <span class="token string">'close'</span><span class="token punctuation">,</span> <span class="token literal-property property">title</span><span class="token operator">:</span> <span class="token string">'收: '</span> <span class="token punctuation">&#125;</span><span class="token punctuation">,</span></pre></td></tr><tr><td data-num="14"></td><td><pre> <span class="token punctuation">&#123;</span> <span class="token literal-property property">key</span><span class="token operator">:</span> <span class="token string">'high'</span><span class="token punctuation">,</span> <span class="token literal-property property">title</span><span class="token operator">:</span> <span class="token string">'高: '</span> <span class="token punctuation">&#125;</span><span class="token punctuation">,</span></pre></td></tr><tr><td data-num="15"></td><td><pre> <span class="token punctuation">&#123;</span> <span class="token literal-property property">key</span><span class="token operator">:</span> <span class="token string">'low'</span><span class="token punctuation">,</span> <span class="token literal-property property">title</span><span class="token operator">:</span> <span class="token string">'低: '</span> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="16"></td><td><pre> <span class="token punctuation">]</span><span class="token punctuation">,</span></pre></td></tr><tr><td data-num="17"></td><td><pre> <span class="token function-variable function">calcTechnicalIndicator</span><span class="token operator">:</span> <span class="token punctuation">(</span><span class="token parameter">dataList<span class="token punctuation">,</span> <span class="token punctuation">&#123;</span> params<span class="token punctuation">,</span> plots <span class="token punctuation">&#125;</span></span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="18"></td><td><pre> <span class="token keyword">return</span> dataList<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">kLineData<span class="token punctuation">,</span> i</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="19"></td><td><pre> <span class="token keyword">return</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="20"></td><td><pre> <span class="token literal-property property">instrumentId</span><span class="token operator">:</span> kLineData<span class="token punctuation">.</span>instrumentId<span class="token punctuation">,</span></pre></td></tr><tr><td data-num="21"></td><td><pre> <span class="token literal-property property">timestamp</span><span class="token operator">:</span> <span class="token function">getDateTime</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span>kLineData<span class="token punctuation">.</span>timestamp<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span></pre></td></tr><tr><td data-num="22"></td><td><pre> <span class="token literal-property property">open</span><span class="token operator">:</span> kLineData<span class="token punctuation">.</span>open<span class="token punctuation">,</span></pre></td></tr><tr><td data-num="23"></td><td><pre> <span class="token literal-property property">close</span><span class="token operator">:</span> kLineData<span class="token punctuation">.</span>close<span class="token punctuation">,</span></pre></td></tr><tr><td data-num="24"></td><td><pre> <span class="token literal-property property">high</span><span class="token operator">:</span> kLineData<span class="token punctuation">.</span>high<span class="token punctuation">,</span></pre></td></tr><tr><td data-num="25"></td><td><pre> <span class="token literal-property property">low</span><span class="token operator">:</span> kLineData<span class="token punctuation">.</span>low</pre></td></tr><tr><td data-num="26"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="27"></td><td><pre> <span class="token punctuation">&#125;</span><span class="token punctuation">)</span></pre></td></tr><tr><td data-num="28"></td><td><pre> <span class="token punctuation">&#125;</span><span class="token punctuation">,</span></pre></td></tr><tr><td data-num="29"></td><td><pre> <span class="token function-variable function">render</span><span class="token operator">:</span> <span class="token punctuation">(</span><span class="token parameter"><span class="token punctuation">&#123;</span> ctx<span class="token punctuation">,</span> dataSource<span class="token punctuation">,</span> viewport<span class="token punctuation">,</span> styles<span class="token punctuation">,</span> xAxis<span class="token punctuation">,</span> yAxis <span class="token punctuation">&#125;</span></span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="30"></td><td><pre> <span class="token comment">// X 轴起始像素</span></pre></td></tr><tr><td data-num="31"></td><td><pre> <span class="token keyword">let</span> x <span class="token operator">=</span> xAxis<span class="token punctuation">.</span><span class="token function">convertToPixel</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span></pre></td></tr><tr><td data-num="32"></td><td><pre> dataSource<span class="token punctuation">.</span>technicalIndicatorDataList<span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span><span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token parameter">kLineData<span class="token punctuation">,</span> i</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="33"></td><td><pre> <span class="token keyword">let</span> open <span class="token operator">=</span> kLineData<span class="token punctuation">.</span>open</pre></td></tr><tr><td data-num="34"></td><td><pre> <span class="token keyword">let</span> close <span class="token operator">=</span> kLineData<span class="token punctuation">.</span>close</pre></td></tr><tr><td data-num="35"></td><td><pre> <span class="token keyword">let</span> high <span class="token operator">=</span> kLineData<span class="token punctuation">.</span>high</pre></td></tr><tr><td data-num="36"></td><td><pre> <span class="token keyword">let</span> low <span class="token operator">=</span> kLineData<span class="token punctuation">.</span>low</pre></td></tr><tr><td data-num="37"></td><td><pre> <span class="token comment">// 给蜡烛柱设置颜色</span></pre></td></tr><tr><td data-num="38"></td><td><pre> <span class="token keyword">if</span> <span class="token punctuation">(</span>close <span class="token operator">></span> open<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span> <span class="token comment">// 涨</span></pre></td></tr><tr><td data-num="39"></td><td><pre> ctx<span class="token punctuation">.</span>strokeStyle <span class="token operator">=</span> <span class="token string">'#EF5350'</span></pre></td></tr><tr><td data-num="40"></td><td><pre> ctx<span class="token punctuation">.</span>fillStyle <span class="token operator">=</span> <span class="token string">'#EF5350'</span></pre></td></tr><tr><td data-num="41"></td><td><pre> <span class="token punctuation">&#125;</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>close <span class="token operator">&lt;</span> open<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span> <span class="token comment">// 跌</span></pre></td></tr><tr><td data-num="42"></td><td><pre> ctx<span class="token punctuation">.</span>strokeStyle <span class="token operator">=</span> <span class="token string">'#26A69A'</span></pre></td></tr><tr><td data-num="43"></td><td><pre> ctx<span class="token punctuation">.</span>fillStyle <span class="token operator">=</span> <span class="token string">'#26A69A'</span></pre></td></tr><tr><td data-num="44"></td><td><pre> <span class="token punctuation">&#125;</span> <span class="token keyword">else</span> <span class="token punctuation">&#123;</span> <span class="token comment">// 未变动</span></pre></td></tr><tr><td data-num="45"></td><td><pre> ctx<span class="token punctuation">.</span>strokeStyle <span class="token operator">=</span> <span class="token string">'#888889'</span></pre></td></tr><tr><td data-num="46"></td><td><pre> ctx<span class="token punctuation">.</span>fillStyle <span class="token operator">=</span> <span class="token string">'#888889'</span></pre></td></tr><tr><td data-num="47"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="48"></td><td><pre> <span class="token comment">// 获取开盘价 Y 轴像素</span></pre></td></tr><tr><td data-num="49"></td><td><pre> <span class="token keyword">let</span> openY <span class="token operator">=</span> yAxis<span class="token punctuation">.</span><span class="token function">convertToPixel</span><span class="token punctuation">(</span>open<span class="token punctuation">)</span></pre></td></tr><tr><td data-num="50"></td><td><pre> <span class="token comment">// 获取收盘价 Y 轴像素</span></pre></td></tr><tr><td data-num="51"></td><td><pre> <span class="token keyword">let</span> closeY <span class="token operator">=</span> yAxis<span class="token punctuation">.</span><span class="token function">convertToPixel</span><span class="token punctuation">(</span>close<span class="token punctuation">)</span></pre></td></tr><tr><td data-num="52"></td><td><pre> <span class="token comment">// 开、收、高、低的 Y 轴像素</span></pre></td></tr><tr><td data-num="53"></td><td><pre> <span class="token keyword">let</span> priceY <span class="token operator">=</span> <span class="token punctuation">[</span>openY<span class="token punctuation">,</span> closeY<span class="token punctuation">,</span> yAxis<span class="token punctuation">.</span><span class="token function">convertToPixel</span><span class="token punctuation">(</span>high<span class="token punctuation">)</span><span class="token punctuation">,</span> yAxis<span class="token punctuation">.</span><span class="token function">convertToPixel</span><span class="token punctuation">(</span>low<span class="token punctuation">)</span><span class="token punctuation">]</span></pre></td></tr><tr><td data-num="54"></td><td><pre> <span class="token comment">// 从低到高排序</span></pre></td></tr><tr><td data-num="55"></td><td><pre> priceY<span class="token punctuation">.</span><span class="token function">sort</span><span class="token punctuation">(</span><span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token parameter">a<span class="token punctuation">,</span> b</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="56"></td><td><pre> <span class="token keyword">return</span> a <span class="token operator">-</span> b</pre></td></tr><tr><td data-num="57"></td><td><pre> <span class="token punctuation">&#125;</span><span class="token punctuation">)</span></pre></td></tr><tr><td data-num="58"></td><td><pre> <span class="token comment">// 画蜡烛柱上部</span></pre></td></tr><tr><td data-num="59"></td><td><pre> ctx<span class="token punctuation">.</span><span class="token function">fillRect</span><span class="token punctuation">(</span>x <span class="token operator">-</span> <span class="token number">0.5</span><span class="token punctuation">,</span> priceY<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> priceY<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">-</span> priceY<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span></pre></td></tr><tr><td data-num="60"></td><td><pre> <span class="token comment">// 画蜡烛柱下部</span></pre></td></tr><tr><td data-num="61"></td><td><pre> ctx<span class="token punctuation">.</span><span class="token function">fillRect</span><span class="token punctuation">(</span>x <span class="token operator">-</span> <span class="token number">0.5</span><span class="token punctuation">,</span> priceY<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> priceY<span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span> <span class="token operator">-</span> priceY<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">)</span></pre></td></tr><tr><td data-num="62"></td><td><pre> <span class="token comment">// 蜡烛柱高度</span></pre></td></tr><tr><td data-num="63"></td><td><pre> <span class="token keyword">var</span> barHeight <span class="token operator">=</span> Math<span class="token punctuation">.</span><span class="token function">max</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> priceY<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span> <span class="token operator">-</span> priceY<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span></pre></td></tr><tr><td data-num="64"></td><td><pre> <span class="token comment">// 画蜡烛柱中部 viewport.barSpace 蜡烛柱的宽度,随放大缩小操作而变化)</span></pre></td></tr><tr><td data-num="65"></td><td><pre> ctx<span class="token punctuation">.</span><span class="token function">fillRect</span><span class="token punctuation">(</span>x <span class="token operator">-</span> <span class="token punctuation">(</span>viewport<span class="token punctuation">.</span>barSpace <span class="token operator">/</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> priceY<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span> viewport<span class="token punctuation">.</span>barSpace<span class="token punctuation">,</span> barHeight<span class="token punctuation">)</span></pre></td></tr><tr><td data-num="66"></td><td><pre> <span class="token comment">// 下一蜡烛柱 X 轴的起始位置viewport.dataSpace 蜡烛柱的宽度加蜡烛柱之间的间隔,随放大缩小操作而变化)</span></pre></td></tr><tr><td data-num="67"></td><td><pre> x <span class="token operator">+=</span> viewport<span class="token punctuation">.</span>dataSpace</pre></td></tr><tr><td data-num="68"></td><td><pre> <span class="token punctuation">&#125;</span><span class="token punctuation">)</span></pre></td></tr><tr><td data-num="69"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="70"></td><td><pre><span class="token punctuation">&#125;</span><span class="token punctuation">)</span></pre></td></tr></table></figure><h4 id="创建指标"><a class="anchor" href="#创建指标">#</a> 创建指标</h4><figure class="highlight js"><figcaption data-lang="JavaScript"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token keyword">this</span><span class="token punctuation">.</span>chart<span class="token punctuation">.</span><span class="token function">createTechnicalIndicator</span><span class="token punctuation">(</span><span class="token string">'custom_candle_solid'</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">,</span> <span class="token punctuation">&#123;</span> <span class="token literal-property property">id</span><span class="token operator">:</span> <span class="token string">'paneId10'</span><span class="token punctuation">,</span> <span class="token literal-property property">dragEnabled</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span> <span class="token literal-property property">height</span><span class="token operator">:</span> <span class="token keyword">this</span><span class="token punctuation">.</span>height <span class="token punctuation">&#125;</span><span class="token punctuation">)</span></pre></td></tr></table></figure><div class="tags"><a href="/tags/KLineChart/" rel="tag"><i class="ic i-tag"></i> KLineChart</a> <a href="/tags/K%E7%BA%BF/" rel="tag"><i class="ic i-tag"></i> K线</a> <a href="/tags/%E8%9C%A1%E7%83%9B%E5%9B%BE/" rel="tag"><i class="ic i-tag"></i> 蜡烛图</a></div></div><footer><div class="meta"><span class="item"><span class="icon"><i class="ic i-calendar-check"></i> </span><span class="text">更新于</span> <time title="修改时间2023-04-22 21:43:37" itemprop="dateModified" datetime="2023-04-22T21:43:37+08:00">2023-04-22</time> </span><span id="2022/11/24/KLineChart实现一幅图上画多个蜡烛K线/" class="item leancloud_visitors" data-flag-title="KLineChart 实现一幅图上画多个蜡烛 K 线" title="阅读次数"><span class="icon"><i class="ic i-eye"></i> </span><span class="text">阅读次数</span> <span class="leancloud-visitors-count"></span> <span class="text"></span></span></div><div class="reward"><button><i class="ic i-heartbeat"></i> 赞赏</button><p>请我喝[茶]~( ̄▽ ̄)~*</p><div id="qr"><div><img data-src="/images/wechatpay.png" alt="Hito Li 微信支付"><p>微信支付</p></div><div><img data-src="/images/alipay.png" alt="Hito Li 支付宝"><p>支付宝</p></div></div></div><div id="copyright"><ul><li class="author"><strong>本文作者: </strong>Hito Li <i class="ic i-at"><em>@</em></i>涛声依旧</li><li class="link"><strong>本文链接:</strong> <a href="https://hitoli.com/2022/11/24/KLineChart%E5%AE%9E%E7%8E%B0%E4%B8%80%E5%B9%85%E5%9B%BE%E4%B8%8A%E7%94%BB%E5%A4%9A%E4%B8%AA%E8%9C%A1%E7%83%9BK%E7%BA%BF/" title="KLineChart 实现一幅图上画多个蜡烛 K 线">https://hitoli.com/2022/11/24/KLineChart实现一幅图上画多个蜡烛K线/</a></li><li class="license"><strong>版权声明: </strong>本站所有文章除特别声明外,均采用 <span class="exturl" data-url="aHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLXNhLzQuMC9kZWVkLnpo"><i class="ic i-creative-commons"><em>(CC)</em></i>BY-NC-SA</span> 许可协议。转载请注明出处!</li></ul></div></footer></article></div><div class="post-nav"><div class="item left"><a href="/2022/11/21/mysql%E6%95%B0%E6%8D%AE%E5%BA%93auto-increment%E8%87%AA%E5%A2%9E%E9%95%BF%E4%B8%8D%E5%8F%98%E7%9A%84%E5%A4%84%E7%90%86%E6%96%B9%E6%B3%95/" itemprop="url" rel="prev" data-background-image="https:&#x2F;&#x2F;nas.hitoli.com:18014&#x2F;images&#x2F;2022&#x2F;10&#x2F;29&#x2F;6833939bly1giclxfdlttj20zk0m8npd.jpg" title="mysql数据库auto_increment自增长不变的处理方法"><span class="type">上一篇</span> <span class="category"><i class="ic i-flag"></i> 解决问题</span><h3>mysql数据库auto_increment自增长不变的处理方法</h3></a></div><div class="item right"><a href="/2022/11/30/Nginx%E9%85%8D%E7%BD%AEstream%E8%B8%A9%E5%9D%91/" itemprop="url" rel="next" data-background-image="https:&#x2F;&#x2F;nas.hitoli.com:18014&#x2F;images&#x2F;2022&#x2F;10&#x2F;29&#x2F;6833939bly1gipexw3o58j20zk0m8e81.jpg" title="Nginx配置stream踩坑"><span class="type">下一篇</span> <span class="category"><i class="ic i-flag"></i> Nginx</span><h3>Nginx配置stream踩坑</h3></a></div></div><div class="wrap" id="comments"></div></div><div id="sidebar"><div class="inner"><div class="panels"><div class="inner"><div class="contents panel pjax" data-title="文章目录"><ol class="toc"><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%BC%95%E8%A8%80"><span class="toc-number">1.</span> <span class="toc-text">引言</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E6%B7%BB%E5%8A%A0%E6%A8%A1%E7%89%88"><span class="toc-number">2.</span> <span class="toc-text">添加模版</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%88%9B%E5%BB%BA%E6%8C%87%E6%A0%87"><span class="toc-number">3.</span> <span class="toc-text">创建指标</span></a></li></ol></div><div class="related panel pjax" data-title="系列文章"><ul><li class="active"><a href="/2022/11/24/KLineChart%E5%AE%9E%E7%8E%B0%E4%B8%80%E5%B9%85%E5%9B%BE%E4%B8%8A%E7%94%BB%E5%A4%9A%E4%B8%AA%E8%9C%A1%E7%83%9BK%E7%BA%BF/" rel="bookmark" title="KLineChart实现一幅图上画多个蜡烛K线">KLineChart实现一幅图上画多个蜡烛K线</a></li><li><a href="/2022/12/02/KLineChart%E5%AE%9E%E7%8E%B0%E8%87%AA%E5%AE%9A%E4%B9%89%E6%8C%87%E6%A0%87%E7%94%BB%E5%9B%BE/" rel="bookmark" title="KLineChart实现自定义指标画图">KLineChart实现自定义指标画图</a></li><li><a href="/2023/01/31/KLineChart%E7%94%BB%E6%B3%A2%E6%AE%B5%E9%AB%98%E4%BD%8E%E4%BB%B7%E5%9B%BE/" rel="bookmark" title="KLineChart画波段高低价图">KLineChart画波段高低价图</a></li></ul></div><div class="overview panel" data-title="站点概览"><div class="author" itemprop="author" itemscope itemtype="http://schema.org/Person"><img class="image" itemprop="image" alt="Hito Li" data-src="/images/avatar.jpg"><p class="name" itemprop="name">Hito Li</p><div class="description" itemprop="description">天生我材必有用</div></div><nav class="state"><div class="item posts"><a href="/archives/"><span class="count">52</span> <span class="name">文章</span></a></div><div class="item categories"><a href="/categories/"><span class="count">22</span> <span class="name">分类</span></a></div><div class="item tags"><a href="/tags/"><span class="count">89</span> <span class="name">标签</span></a></div></nav><div class="social"><span class="exturl item weibo" data-url="aHR0cHM6Ly93ZWliby5jb20vdS8xMDYxNDYwNzQ1" title="https:&#x2F;&#x2F;weibo.com&#x2F;u&#x2F;1061460745"><i class="ic i-weibo"></i></span> <span class="exturl item douban" data-url="aHR0cHM6Ly93d3cuZG91YmFuLmNvbS9wZW9wbGUvMjU5Mzc2NTY0" title="https:&#x2F;&#x2F;www.douban.com&#x2F;people&#x2F;259376564"><i class="ic i-douban"></i></span> <span class="exturl item music" data-url="aHR0cHM6Ly9tdXNpYy4xNjMuY29tLyMvdXNlci9ob21lP2lkPTEwNTQ2NzQ2Mw==" title="https:&#x2F;&#x2F;music.163.com&#x2F;#&#x2F;user&#x2F;home?id&#x3D;105467463"><i class="ic i-cloud-music"></i></span> <a href="/about/me" title="about&#x2F;me" class="item about"><i class="ic i-address-card"></i></a></div><ul class="menu"><li class="item"><a href="/" rel="section"><i class="ic i-home"></i>首页</a></li><li class="item"><a href="/about/me" rel="section"><i class="ic i-user"></i>关于</a></li><li class="item dropdown"><a href="javascript:void(0);"><i class="ic i-feather"></i>文章</a><ul class="submenu"><li class="item"><a href="/archives/" rel="section"><i class="ic i-list-alt"></i>归档</a></li><li class="item"><a href="/categories/" rel="section"><i class="ic i-th"></i>分类</a></li><li class="item"><a href="/tags/" rel="section"><i class="ic i-tags"></i>标签</a></li></ul></li><li class="item"><span class="exturl" data-url="aHR0cHM6Ly93d3cuZm9yZXZlcmJsb2cuY24vZ28uaHRtbA=="><i class="ic i-paper-plane"></i>虫洞</span></li></ul></div></div></div><ul id="quick"><li class="prev pjax"><a href="/2022/11/21/mysql%E6%95%B0%E6%8D%AE%E5%BA%93auto-increment%E8%87%AA%E5%A2%9E%E9%95%BF%E4%B8%8D%E5%8F%98%E7%9A%84%E5%A4%84%E7%90%86%E6%96%B9%E6%B3%95/" rel="prev" title="上一篇"><i class="ic i-chevron-left"></i></a></li><li class="up"><i class="ic i-arrow-up"></i></li><li class="down"><i class="ic i-arrow-down"></i></li><li class="next pjax"><a href="/2022/11/30/Nginx%E9%85%8D%E7%BD%AEstream%E8%B8%A9%E5%9D%91/" rel="next" title="下一篇"><i class="ic i-chevron-right"></i></a></li><li class="percent"></li></ul></div></div><div class="dimmer"></div></div></main><footer id="footer"><div class="inner"><div class="widgets"><div class="rpost pjax"><h2>随机文章</h2><ul><li class="item"><div class="breadcrumb"><a href="/categories/Linux/" title="分类于 Linux">Linux</a> <i class="ic i-angle-right"></i> <a href="/categories/Linux/%E5%B7%A5%E5%85%B7/" title="分类于 工具">工具</a></div><span><a href="/2023/11/03/Linux%E4%B8%8B%E5%BF%AB%E9%80%9F%E9%83%A8%E7%BD%B2SpringBoot%E9%A1%B9%E7%9B%AE%E7%9A%84%E8%84%9A%E6%9C%AC/" title="Linux下快速部署SpringBoot项目的脚本">Linux下快速部署SpringBoot项目的脚本</a></span></li><li class="item"><div class="breadcrumb"><a href="/categories/Linux/" title="分类于 Linux">Linux</a> <i class="ic i-angle-right"></i> <a href="/categories/Linux/%E6%9C%8D%E5%8A%A1/" title="分类于 服务">服务</a> <i class="ic i-angle-right"></i> <a href="/categories/Linux/%E6%9C%8D%E5%8A%A1/Nginx/" title="分类于 Nginx">Nginx</a></div><span><a href="/2022/11/30/Nginx%E5%8A%A8%E6%80%81%E8%A7%A3%E6%9E%90%E5%9F%9F%E5%90%8D%E6%96%B9%E6%A1%88/" title="Nginx动态解析域名方案">Nginx动态解析域名方案</a></span></li><li class="item"><div class="breadcrumb"><a href="/categories/%E5%B7%A5%E4%BD%9C/" title="分类于 工作">工作</a> <i class="ic i-angle-right"></i> <a href="/categories/%E5%B7%A5%E4%BD%9C/Highcharts/" title="分类于 Highcharts">Highcharts</a></div><span><a href="/2023/01/10/Highcharts%E7%94%BB%E6%94%B6%E7%9B%8A%E6%A6%82%E8%A7%88/" title="Highcharts画收益概览">Highcharts画收益概览</a></span></li><li class="item"><div class="breadcrumb"><a href="/categories/Windows/" title="分类于 Windows">Windows</a> <i class="ic i-angle-right"></i> <a href="/categories/Windows/%E5%B7%A5%E5%85%B7/" title="分类于 工具">工具</a></div><span><a href="/2022/11/01/360%E7%8B%AC%E7%AB%8B%E7%89%88%E5%B0%8F%E5%B7%A5%E5%85%B7/" title="360独立版小工具">360独立版小工具</a></span></li><li class="item"><div class="breadcrumb"><a href="/categories/%E6%9E%81%E7%A9%BA%E9%97%B4/" title="分类于 极空间">极空间</a> <i class="ic i-angle-right"></i> <a href="/categories/%E6%9E%81%E7%A9%BA%E9%97%B4/Docker/" title="分类于 Docker">Docker</a></div><span><a href="/2022/10/20/%E6%9E%81%E7%A9%BA%E9%97%B4Docker%E7%89%88Wordpress%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AE/" title="极空间Docker版Wordpress安装与配置">极空间Docker版Wordpress安装与配置</a></span></li><li class="item"><div class="breadcrumb"><a href="/categories/Linux/" title="分类于 Linux">Linux</a> <i class="ic i-angle-right"></i> <a href="/categories/Linux/%E6%9C%8D%E5%8A%A1/" title="分类于 服务">服务</a> <i class="ic i-angle-right"></i> <a href="/categories/Linux/%E6%9C%8D%E5%8A%A1/Nginx/" title="分类于 Nginx">Nginx</a></div><span><a href="/2022/11/30/Nginx%E9%85%8D%E7%BD%AEstream%E8%B8%A9%E5%9D%91/" title="Nginx配置stream踩坑">Nginx配置stream踩坑</a></span></li><li class="item"><div class="breadcrumb"><a href="/categories/Linux/" title="分类于 Linux">Linux</a> <i class="ic i-angle-right"></i> <a href="/categories/Linux/%E6%9C%8D%E5%8A%A1/" title="分类于 服务">服务</a> <i class="ic i-angle-right"></i> <a href="/categories/Linux/%E6%9C%8D%E5%8A%A1/Nginx/" title="分类于 Nginx">Nginx</a></div><span><a href="/2022/11/08/Nginx%E9%85%8D%E7%BD%AE-%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86/" title="Nginx配置-反向代理">Nginx配置-反向代理</a></span></li><li class="item"><div class="breadcrumb"><a href="/categories/%E5%B7%A5%E4%BD%9C/" title="分类于 工作">工作</a> <i class="ic i-angle-right"></i> <a href="/categories/%E5%B7%A5%E4%BD%9C/KLineChart/" title="分类于 KLineChart">KLineChart</a></div><span><a href="/2023/01/31/KLineChart%E7%94%BB%E6%B3%A2%E6%AE%B5%E9%AB%98%E4%BD%8E%E4%BB%B7%E5%9B%BE/" title="KLineChart画波段高低价图">KLineChart画波段高低价图</a></span></li><li class="item"><div class="breadcrumb"><a href="/categories/%E7%94%9F%E6%B4%BB/" title="分类于 生活">生活</a> <i class="ic i-angle-right"></i> <a href="/categories/%E7%94%9F%E6%B4%BB/%E6%97%A5%E5%B8%B8%E8%AE%B0%E5%BD%95/" title="分类于 日常记录">日常记录</a></div><span><a href="/2023/10/29/%E7%BB%99%E6%88%91%E7%9A%84%E8%80%81%E7%AC%94%E8%AE%B0%E6%9C%AC%E6%B8%85%E7%90%86%E7%81%B0%E5%B0%98/" title="给我的老笔记本清理灰尘">给我的老笔记本清理灰尘</a></span></li><li class="item"><div class="breadcrumb"><a href="/categories/%E5%B7%A5%E4%BD%9C/" title="分类于 工作">工作</a> <i class="ic i-angle-right"></i> <a href="/categories/%E5%B7%A5%E4%BD%9C/KLineChart/" title="分类于 KLineChart">KLineChart</a></div><span><a href="/2022/11/24/KLineChart%E5%AE%9E%E7%8E%B0%E4%B8%80%E5%B9%85%E5%9B%BE%E4%B8%8A%E7%94%BB%E5%A4%9A%E4%B8%AA%E8%9C%A1%E7%83%9BK%E7%BA%BF/" title="KLineChart实现一幅图上画多个蜡烛K线">KLineChart实现一幅图上画多个蜡烛K线</a></span></li></ul></div><div><h2>最新评论</h2><ul class="leancloud-recent-comment"></ul></div></div><div class="status"><div class="copyright">&copy; 2010 <span itemprop="copyrightYear">2023</span> <span class="with-love"><i class="ic i-sakura rotate"></i> </span><span class="author" itemprop="copyrightHolder">Hito Li @ ☆∵∴Hito∴∵★</span></div><div class="count"><span class="post-meta-item-icon"><i class="ic i-chart-area"></i> </span><span title="站点总字数">102k 字</span> <span class="post-meta-divider">|</span> <span class="post-meta-item-icon"><i class="ic i-coffee"></i> </span><span title="站点阅读时长">1:32</span></div><div class="powered-by">基于 <span class="exturl" data-url="aHR0cHM6Ly9oZXhvLmlv">Hexo</span> & Theme.<span class="exturl" data-url="aHR0cHM6Ly9naXRodWIuY29tL2FtZWhpbWUvaGV4by10aGVtZS1zaG9rYQ==">Shoka</span></div></div></div></footer></div><script data-config type="text/javascript">var LOCAL={path:"2022/11/24/KLineChart实现一幅图上画多个蜡烛K线/",favicon:{show:"´3哎呀呀",hide:"(´Д`)真糟糕!"},search:{placeholder:"文章搜索",empty:"关于 「 ${query} 」,什么也没搜到",stats:"${time} ms 内找到 ${hits} 条结果"},valine:!0,fancybox:!0,copyright:'复制成功,转载请遵守 <i class="ic i-creative-commons"></i>BY-NC-SA 协议。',ignores:[function(e){return e.includes("#")},function(e){return new RegExp(LOCAL.path+"$").test(e)}]}</script><script src="https://nas.hitoli.com:18003/assets/polyfill.js"></script><script src="https://nas.hitoli.com:18003/assets/pace.min.js"></script><script src="https://nas.hitoli.com:18003/assets/pjax.min.js"></script><script src="https://nas.hitoli.com:18003/assets/fetch.umd.js"></script><script src="https://nas.hitoli.com:18003/assets/anime.min.js"></script><script src="https://nas.hitoli.com:18003/assets/algoliasearch-lite.umd.min.js"></script><script src="https://nas.hitoli.com:18003/assets/instantsearch.production.min.js"></script><script src="https://nas.hitoli.com:18003/assets/lozad.min.js"></script><script src="https://nas.hitoli.com:18003/assets/quicklink.umd.min.js"></script><script src="https://nas.hitoli.com:18003/assets/jquery.min.js,jquery.fancybox.min.js,jquery.justifiedGallery.min.js" async></script><script src="https://nas.hitoli.com:18003/assets/MiniValine.min.js"></script><script src="https://nas.hitoli.com:18003/assets/copy-tex.min.js" async></script><script src="https://nas.hitoli.com:18003/assets/frappe-charts.min.iife.js"></script><script src="/js/app.js?v=0.0.0"></script></body></html>