stock-sdk 1.4.2 → 1.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -3
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +71 -18
- package/dist/index.d.ts +71 -18
- package/dist/index.js +1 -1
- package/package.json +9 -1
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
**[English](./README_EN.md)** | 中文
|
|
9
9
|
|
|
10
|
-
为 **前端和 Node.js 设计的股票行情 SDK**。
|
|
10
|
+
为 **前端和 Node.js 设计的股票行情 JavaScript SDK**。
|
|
11
11
|
|
|
12
12
|
无需 Python、无需后端服务,直接在 **浏览器或 Node.js** 中获取 **A 股 / 港股 / 美股 / 公募基金** 的实时行情与 K 线数据。
|
|
13
13
|
|
|
@@ -19,6 +19,8 @@
|
|
|
19
19
|
|
|
20
20
|
📦 [NPM](https://www.npmjs.com/package/stock-sdk) | 📖 [GitHub](https://github.com/chengzuopeng/stock-sdk) | 🎮 [在线演示](https://stock-sdk.linkdiary.cn/playground/)
|
|
21
21
|
|
|
22
|
+
🧭 [Stock Dashboard](https://chengzuopeng.github.io/stock-dashboard/):基于 stock-sdk 搭建的股票数据大盘演示站点,欢迎体验。
|
|
23
|
+
|
|
22
24
|
## Why stock-sdk?
|
|
23
25
|
|
|
24
26
|
如果你是前端工程师,可能遇到过这些问题:
|
|
@@ -193,8 +195,8 @@ console.log(`共获取 ${allQuotes.length} 只股票`);
|
|
|
193
195
|
|
|
194
196
|
---
|
|
195
197
|
|
|
196
|
-
🌐 [官网](https://stock-sdk.linkdiary.cn) | 📦 [NPM](https://www.npmjs.com/package/stock-sdk) | 📖 [GitHub](https://github.com/chengzuopeng/stock-sdk) | 🎮 [在线演示](https://stock-sdk.linkdiary.cn/playground) | 🐛 [Issues](https://github.com/chengzuopeng/stock-sdk/issues)
|
|
198
|
+
🌐 [官网](https://stock-sdk.linkdiary.cn) | 📦 [NPM](https://www.npmjs.com/package/stock-sdk) | 📖 [GitHub](https://github.com/chengzuopeng/stock-sdk) | 🎮 [在线演示](https://stock-sdk.linkdiary.cn/playground) | 🧭 [Stock Dashboard](https://chengzuopeng.github.io/stock-dashboard/) | 🐛 [Issues](https://github.com/chengzuopeng/stock-sdk/issues)
|
|
197
199
|
|
|
198
200
|
---
|
|
199
201
|
|
|
200
|
-
如果这个项目对你有帮助,欢迎 Star ⭐ 或提出 Issue 反馈。
|
|
202
|
+
如果这个项目对你有帮助,欢迎 Star ⭐ 或提出 Issue 反馈。
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var yt=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var _e=Object.getOwnPropertyNames;var Le=Object.prototype.hasOwnProperty;var Ct=(t,e)=>{for(var r in e)yt(t,r,{get:e[r],enumerable:!0})},ke=(t,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of _e(e))!Le.call(t,n)&&n!==r&&yt(t,n,{get:()=>e[n],enumerable:!(s=Pe(e,n))||s.enumerable});return t};var Ie=t=>ke(yt({},"__esModule",{value:!0}),t);var Fe={};Ct(Fe,{StockSDK:()=>st,addIndicators:()=>ot,asyncPool:()=>N,calcATR:()=>rt,calcBIAS:()=>et,calcBOLL:()=>Z,calcCCI:()=>nt,calcEMA:()=>q,calcKDJ:()=>Y,calcMA:()=>G,calcMACD:()=>J,calcRSI:()=>X,calcSMA:()=>B,calcWMA:()=>gt,calcWR:()=>tt,chunkArray:()=>H,decodeGBK:()=>D,default:()=>Ae,parseResponse:()=>Q,safeNumber:()=>g,safeNumberOrNull:()=>C});module.exports=Ie(Fe);function D(t){return new TextDecoder("gbk").decode(t)}function Q(t){let e=t.split(";").map(s=>s.trim()).filter(Boolean),r=[];for(let s of e){let n=s.indexOf("=");if(n<0)continue;let o=s.slice(0,n).trim();o.startsWith("v_")&&(o=o.slice(2));let i=s.slice(n+1).trim();i.startsWith('"')&&i.endsWith('"')&&(i=i.slice(1,-1));let a=i.split("~");r.push({key:o,fields:a})}return r}function g(t){if(!t||t==="")return 0;let e=parseFloat(t);return Number.isNaN(e)?0:e}function C(t){if(!t||t==="")return null;let e=parseFloat(t);return Number.isNaN(e)?null:e}function u(t){if(!t||t===""||t==="-")return null;let e=parseFloat(t);return Number.isNaN(e)?null:e}var Rt="https://qt.gtimg.cn",St="https://web.ifzq.gtimg.cn/appstock/app/minute/query",bt="https://assets.linkdiary.cn/shares/zh_a_list.json",wt="https://assets.linkdiary.cn/shares/us_list.json",Tt="https://assets.linkdiary.cn/shares/hk_list.json",Jt="https://assets.linkdiary.cn/shares/trade-data-list.txt";var it="https://push2his.eastmoney.com/api/qt/stock/kline/get",Mt="https://push2his.eastmoney.com/api/qt/stock/trends2/get",Kt="https://33.push2his.eastmoney.com/api/qt/stock/kline/get",At="https://63.push2his.eastmoney.com/api/qt/stock/kline/get",Pt="https://17.push2.eastmoney.com/api/qt/clist/get",_t="https://91.push2.eastmoney.com/api/qt/stock/get",Lt="https://29.push2.eastmoney.com/api/qt/clist/get",at="https://7.push2his.eastmoney.com/api/qt/stock/kline/get",kt="https://push2his.eastmoney.com/api/qt/stock/trends2/get",It="https://79.push2.eastmoney.com/api/qt/clist/get",xt="https://91.push2.eastmoney.com/api/qt/stock/get",Ot="https://29.push2.eastmoney.com/api/qt/clist/get",lt="https://91.push2his.eastmoney.com/api/qt/stock/kline/get",Ut="https://push2his.eastmoney.com/api/qt/stock/trends2/get",Et=3e4,$=500,F=500,W=7;var z=class{constructor(e={}){this.baseUrl=e.baseUrl??Rt,this.timeout=e.timeout??Et}getTimeout(){return this.timeout}async get(e,r={}){let s=new AbortController,n=setTimeout(()=>s.abort(),this.timeout);try{let o=await fetch(e,{signal:s.signal});if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);switch(r.responseType){case"json":return await o.json();case"arraybuffer":return await o.arrayBuffer();default:return await o.text()}}finally{clearTimeout(n)}}async getTencentQuote(e){let r=`${this.baseUrl}/?q=${encodeURIComponent(e)}`,s=await this.get(r,{responseType:"arraybuffer"}),n=D(s);return Q(n)}};var xe=new Set(["daily","weekly","monthly"]),Oe=new Set(["1","5","15","30","60"]),Ue=new Set(["","qfq","hfq"]);function E(t,e){if(!Number.isFinite(t)||!Number.isInteger(t)||t<=0)throw new RangeError(`${e} must be a positive integer`)}function U(t){if(!xe.has(t))throw new RangeError("period must be one of: daily, weekly, monthly")}function v(t){if(!Oe.has(t))throw new RangeError("period must be one of: 1, 5, 15, 30, 60")}function I(t){if(!Ue.has(t))throw new RangeError("adjust must be one of: '', 'qfq', 'hfq'")}function H(t,e){E(e,"chunkSize");let r=[];for(let s=0;s<t.length;s+=e)r.push(t.slice(s,s+e));return r}async function N(t,e){E(e,"concurrency");let r=[],s=[];for(let n of t){let o=Promise.resolve().then(()=>n()).then(i=>{r.push(i)});if(s.push(o),s.length>=e){await Promise.race(s);for(let i=s.length-1;i>=0;i--)await Promise.race([s[i].then(()=>"fulfilled"),Promise.resolve("pending")])==="fulfilled"&&s.splice(i,1)}}return await Promise.all(s),r}function ut(t){return t.startsWith("sh")?"1":t.startsWith("sz")||t.startsWith("bj")?"0":t.startsWith("6")?"1":"0"}var K={};Ct(K,{getAShareCodeList:()=>ne,getAllHKQuotesByCodes:()=>ie,getAllQuotesByCodes:()=>se,getAllUSQuotesByCodes:()=>ae,getFullQuotes:()=>ct,getFundFlow:()=>Yt,getFundQuotes:()=>te,getHKCodeList:()=>oe,getHKQuotes:()=>ft,getPanelLargeOrder:()=>Xt,getSimpleQuotes:()=>Zt,getTodayTimeline:()=>ee,getTradingCalendar:()=>le,getUSCodeList:()=>re,getUSQuotes:()=>pt,parseFullQuote:()=>Bt,parseFundFlow:()=>jt,parseFundQuote:()=>Dt,parseHKQuote:()=>Ht,parsePanelLargeOrder:()=>vt,parseSimpleQuote:()=>qt,parseUSQuote:()=>Nt,search:()=>ce});function Bt(t){let e=[];for(let s=0;s<5;s++)e.push({price:g(t[9+s*2]),volume:g(t[10+s*2])});let r=[];for(let s=0;s<5;s++)r.push({price:g(t[19+s*2]),volume:g(t[20+s*2])});return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:g(t[3]),prevClose:g(t[4]),open:g(t[5]),volume:g(t[6]),outerVolume:g(t[7]),innerVolume:g(t[8]),bid:e,ask:r,time:t[30]??"",change:g(t[31]),changePercent:g(t[32]),high:g(t[33]),low:g(t[34]),volume2:g(t[36]),amount:g(t[37]),turnoverRate:C(t[38]),pe:C(t[39]),amplitude:C(t[43]),circulatingMarketCap:C(t[44]),totalMarketCap:C(t[45]),pb:C(t[46]),limitUp:C(t[47]),limitDown:C(t[48]),volumeRatio:C(t[49]),avgPrice:C(t[51]),peStatic:C(t[52]),peDynamic:C(t[53]),high52w:C(t[67]),low52w:C(t[68]),circulatingShares:C(t[72]),totalShares:C(t[73]),raw:t}}function qt(t){return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:g(t[3]),change:g(t[4]),changePercent:g(t[5]),volume:g(t[6]),amount:g(t[7]),marketCap:C(t[9]),marketType:t[10]??"",raw:t}}function jt(t){return{code:t[0]??"",mainInflow:g(t[1]),mainOutflow:g(t[2]),mainNet:g(t[3]),mainNetRatio:g(t[4]),retailInflow:g(t[5]),retailOutflow:g(t[6]),retailNet:g(t[7]),retailNetRatio:g(t[8]),totalFlow:g(t[9]),name:t[12]??"",date:t[13]??"",raw:t}}function vt(t){return{buyLargeRatio:g(t[0]),buySmallRatio:g(t[1]),sellLargeRatio:g(t[2]),sellSmallRatio:g(t[3]),raw:t}}function Ht(t){return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:g(t[3]),prevClose:g(t[4]),open:g(t[5]),volume:g(t[6]),time:t[30]??"",change:g(t[31]),changePercent:g(t[32]),high:g(t[33]),low:g(t[34]),amount:g(t[37]),lotSize:C(t[40]),circulatingMarketCap:C(t[44]),totalMarketCap:C(t[45]),currency:t[t.length-3]??"",raw:t}}function Nt(t){return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:g(t[3]),prevClose:g(t[4]),open:g(t[5]),volume:g(t[6]),time:t[30]??"",change:g(t[31]),changePercent:g(t[32]),high:g(t[33]),low:g(t[34]),amount:g(t[37]),turnoverRate:C(t[38]),pe:C(t[39]),amplitude:C(t[43]),totalMarketCap:C(t[45]),pb:C(t[47]),high52w:C(t[48]),low52w:C(t[49]),raw:t}}function Dt(t){return{code:t[0]??"",name:t[1]??"",nav:g(t[5]),accNav:g(t[6]),change:g(t[7]),navDate:t[8]??"",raw:t}}async function ct(t,e){return!e||e.length===0?[]:(await t.getTencentQuote(e.join(","))).filter(s=>s.fields&&s.fields.length>0&&s.fields[0]!=="").map(s=>Bt(s.fields))}async function Zt(t,e){if(!e||e.length===0)return[];let r=e.map(n=>`s_${n}`);return(await t.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>qt(n.fields))}async function Yt(t,e){if(!e||e.length===0)return[];let r=e.map(n=>`ff_${n}`);return(await t.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>jt(n.fields))}async function Xt(t,e){if(!e||e.length===0)return[];let r=e.map(n=>`s_pk${n}`);return(await t.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>vt(n.fields))}async function ft(t,e){if(!e||e.length===0)return[];let r=e.map(n=>`hk${n}`);return(await t.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>Ht(n.fields))}async function pt(t,e){if(!e||e.length===0)return[];let r=e.map(n=>`us${n}`);return(await t.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>Nt(n.fields))}async function te(t,e){if(!e||e.length===0)return[];let r=e.map(n=>`jj${n}`);return(await t.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>Dt(n.fields))}async function ee(t,e){let r=t.getTimeout(),s=new AbortController,n=setTimeout(()=>s.abort(),r);try{let o=await fetch(`${St}?code=${e}`,{signal:s.signal});if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);let i=await o.json();if(i.code!==0)throw new Error(i.msg||"API error");let a=i.data?.[e];if(!a)return{code:e,date:"",data:[]};let l=a.data?.data||[],c=a.data?.date||"",f=!1;if(l.length>0){let p=l[0].split(" "),m=parseFloat(p[1])||0,h=parseInt(p[2],10)||0,y=parseFloat(p[3])||0;h>0&&m>0&&y/h>m*50&&(f=!0)}let d=l.map(p=>{let m=p.split(" "),h=m[0],y=`${h.slice(0,2)}:${h.slice(2,4)}`,R=parseInt(m[2],10)||0,S=parseFloat(m[3])||0,b=f?R*100:R,M=b>0?S/b:0;return{time:y,price:parseFloat(m[1])||0,volume:b,amount:S,avgPrice:Math.round(M*100)/100}});return{code:e,date:c,data:d}}finally{clearTimeout(n)}}async function ne(t,e=!0){let r=t.getTimeout(),s=new AbortController,n=setTimeout(()=>s.abort(),r);try{let o=await fetch(bt,{signal:s.signal});if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);let a=(await o.json()).list||[];return e?a:a.map(l=>l.replace(/^(sh|sz|bj)/,""))}finally{clearTimeout(n)}}async function re(t,e=!0){let r=t.getTimeout(),s=new AbortController,n=setTimeout(()=>s.abort(),r);try{let o=await fetch(wt,{signal:s.signal});if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);let a=(await o.json()).list||[];return e?a:a.map(l=>l.replace(/^\d{3}\./,""))}finally{clearTimeout(n)}}async function oe(t){let e=t.getTimeout(),r=new AbortController,s=setTimeout(()=>r.abort(),e);try{let n=await fetch(Tt,{signal:r.signal});if(!n.ok)throw new Error(`HTTP error! status: ${n.status}`);return(await n.json()).list||[]}finally{clearTimeout(s)}}async function se(t,e,r={}){let{batchSize:s=$,concurrency:n=W,onProgress:o}=r;E(s,"batchSize"),E(n,"concurrency");let i=Math.min(s,F),a=H(e,i),l=a.length,c=0,f=a.map(p=>async()=>{let m=await ct(t,p);return c++,o&&o(c,l),m});return(await N(f,n)).flat()}async function ie(t,e,r={}){let{batchSize:s=$,concurrency:n=W,onProgress:o}=r;E(s,"batchSize"),E(n,"concurrency");let i=Math.min(s,F),a=H(e,i),l=a.length,c=0,f=a.map(p=>async()=>{let m=await ft(t,p);return c++,o&&o(c,l),m});return(await N(f,n)).flat()}async function ae(t,e,r={}){let{batchSize:s=$,concurrency:n=W,onProgress:o}=r;E(s,"batchSize"),E(n,"concurrency");let i=Math.min(s,F),a=H(e,i),l=a.length,c=0,f=a.map(p=>async()=>{let m=await pt(t,p);return c++,o&&o(c,l),m});return(await N(f,n)).flat()}async function le(t){let e=await t.get(Jt);return!e||e.trim()===""?[]:e.trim().split(",").map(r=>r.trim()).filter(r=>r.length>0)}var ue="https://smartbox.gtimg.cn/s3/";function Ee(t){return t.replace(/\\u([0-9a-fA-F]{4})/g,(e,r)=>String.fromCharCode(parseInt(r,16)))}function Be(t){return!t||t==="N"?[]:t.split("^").filter(Boolean).map(r=>{let s=r.split("~"),n=s[0]||"",o=s[1]||"",i=Ee(s[2]||""),a=s[4]||"";return{code:n+o,name:i,market:n,type:a}})}function qe(t){return new Promise((e,r)=>{let s=`${ue}?v=2&t=all&q=${encodeURIComponent(t)}`;window.v_hint="";let n=document.createElement("script");n.src=s,n.charset="utf-8",n.onload=()=>{let o=window.v_hint||"";document.body.removeChild(n),e(o)},n.onerror=()=>{document.body.removeChild(n),r(new Error("Network error calling Smartbox"))},document.body.appendChild(n)})}async function je(t,e){let r=`${ue}?v=2&t=all&q=${encodeURIComponent(e)}`,n=(await t.get(r)).match(/v_hint="([^"]*)"/);return n?n[1]:""}function ve(){return typeof window<"u"&&typeof document<"u"}async function ce(t,e){if(!e||!e.trim())return[];let r;return ve()?r=await qe(e):r=await je(t,e),Be(r)}var P={};Ct(P,{getConceptConstituents:()=>we,getConceptKline:()=>Te,getConceptList:()=>Wt,getConceptMinuteKline:()=>Me,getConceptSpot:()=>be,getHKHistoryKline:()=>de,getHistoryKline:()=>fe,getIndustryConstituents:()=>ye,getIndustryKline:()=>Ce,getIndustryList:()=>$t,getIndustryMinuteKline:()=>Re,getIndustrySpot:()=>he,getMinuteKline:()=>pe,getUSHistoryKline:()=>me});async function fe(t,e,r={}){let{period:s="daily",adjust:n="hfq",startDate:o="19700101",endDate:i="20500101"}=r;U(s),I(n);let a=e.replace(/^(sh|sz|bj)/,""),l={daily:"101",weekly:"102",monthly:"103"},c={"":"0",qfq:"1",hfq:"2"},f=`${ut(e)}.${a}`,d=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f116",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:l[s],fqt:c[n],secid:f,beg:o,end:i}),p=`${it}?${d.toString()}`,h=(await t.get(p,{responseType:"json"}))?.data?.klines;return!Array.isArray(h)||h.length===0?[]:h.map(y=>{let[R,S,b,M,A,_,L,k,x,O,j]=y.split(",");return{date:R,code:a,open:u(S),close:u(b),high:u(M),low:u(A),volume:u(_),amount:u(L),amplitude:u(k),changePercent:u(x),change:u(O),turnoverRate:u(j)}})}async function pe(t,e,r={}){let{period:s="1",adjust:n="hfq",startDate:o="1979-09-01 09:32:00",endDate:i="2222-01-01 09:32:00"}=r;v(s),I(n);let a=e.replace(/^(sh|sz|bj)/,""),l=`${ut(e)}.${a}`;if(s==="1"){let c=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13",fields2:"f51,f52,f53,f54,f55,f56,f57,f58",ut:"7eea3edcaed734bea9cbfc24409ed989",ndays:"5",iscr:"0",secid:l}),f=`${Mt}?${c.toString()}`,p=(await t.get(f,{responseType:"json"}))?.data?.trends;if(!Array.isArray(p)||p.length===0)return[];let m=o.replace("T"," ").slice(0,16),h=i.replace("T"," ").slice(0,16);return p.map(y=>{let[R,S,b,M,A,_,L,k]=y.split(",");return{time:R,open:u(S),close:u(b),high:u(M),low:u(A),volume:u(_),amount:u(L),avgPrice:u(k)}}).filter(y=>y.time>=m&&y.time<=h)}else{let c={"":"0",qfq:"1",hfq:"2"},f=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:s,fqt:c[n],secid:l,beg:"0",end:"20500000"}),d=`${it}?${f.toString()}`,m=(await t.get(d,{responseType:"json"}))?.data?.klines;if(!Array.isArray(m)||m.length===0)return[];let h=o.replace("T"," ").slice(0,16),y=i.replace("T"," ").slice(0,16);return m.map(R=>{let[S,b,M,A,_,L,k,x,O,j,ht]=R.split(",");return{time:S,open:u(b),close:u(M),high:u(A),low:u(_),changePercent:u(O),change:u(j),volume:u(L),amount:u(k),amplitude:u(x),turnoverRate:u(ht)}}).filter(R=>R.time>=h&&R.time<=y)}}async function de(t,e,r={}){let{period:s="daily",adjust:n="hfq",startDate:o="19700101",endDate:i="20500101"}=r;U(s),I(n);let a=e.replace(/^hk/i,"").padStart(5,"0"),l={daily:"101",weekly:"102",monthly:"103"},c={"":"0",qfq:"1",hfq:"2"},f=`116.${a}`,d=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:l[s],fqt:c[n],secid:f,beg:o,end:i,lmt:"1000000"}),p=`${Kt}?${d.toString()}`,m=await t.get(p,{responseType:"json"}),h=m?.data?.klines,y=m?.data?.name||"";return!Array.isArray(h)||h.length===0?[]:h.map(R=>{let[S,b,M,A,_,L,k,x,O,j,ht]=R.split(",");return{date:S,code:a,name:y,open:u(b),close:u(M),high:u(A),low:u(_),volume:u(L),amount:u(k),amplitude:u(x),changePercent:u(O),change:u(j),turnoverRate:u(ht)}})}async function me(t,e,r={}){let{period:s="daily",adjust:n="hfq",startDate:o="19700101",endDate:i="20500101"}=r;U(s),I(n);let a={daily:"101",weekly:"102",monthly:"103"},l={"":"0",qfq:"1",hfq:"2"},c=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:a[s],fqt:l[n],secid:e,beg:o,end:i,lmt:"1000000"}),f=`${At}?${c.toString()}`,d=await t.get(f,{responseType:"json"}),p=d?.data?.klines,m=d?.data?.code||e.split(".")[1]||e,h=d?.data?.name||"";return!Array.isArray(p)||p.length===0?[]:p.map(y=>{let[R,S,b,M,A,_,L,k,x,O,j]=y.split(",");return{date:R,code:m,name:h,open:u(S),close:u(b),high:u(M),low:u(A),volume:u(_),amount:u(L),amplitude:u(k),changePercent:u(x),change:u(O),turnoverRate:u(j)}})}var Qt=null;async function dt(t,e){if(e.startsWith("BK"))return e;if(!Qt){let s=await $t(t);Qt=new Map(s.map(n=>[n.name,n.code]))}let r=Qt.get(e);if(!r)throw new Error(`\u672A\u627E\u5230\u884C\u4E1A\u677F\u5757: ${e}`);return r}function w(t){if(t==null)return null;let e=String(t);return u(e)}async function ge(t,e,r,s,n=100,o){let i=[],a=1,l=0;do{let c=new URLSearchParams({...r,pn:String(a),pz:String(n),fields:s}),f=`${e}?${c.toString()}`,p=(await t.get(f,{responseType:"json"}))?.data;if(!p||!Array.isArray(p.diff))break;a===1&&(l=p.total??0);let m=p.diff.map((h,y)=>o(h,i.length+y+1));i.push(...m),a++}while(i.length<l);return i}async function $t(t){let s=await ge(t,Pt,{po:"1",np:"1",ut:"bd1d9ddb04089700cf9c27f6f7426281",fltt:"2",invt:"2",fid:"f3",fs:"m:90 t:2 f:!50"},"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f26,f22,f33,f11,f62,f128,f136,f115,f152,f124,f107,f104,f105,f140,f141,f207,f208,f209,f222",100,(n,o)=>({rank:o,name:String(n.f14??""),code:String(n.f12??""),price:w(n.f2),change:w(n.f4),changePercent:w(n.f3),totalMarketCap:w(n.f20),turnoverRate:w(n.f8),riseCount:w(n.f104),fallCount:w(n.f105),leadingStock:n.f128?String(n.f128):null,leadingStockChangePercent:w(n.f136)}));return s.sort((n,o)=>(o.changePercent??0)-(n.changePercent??0)),s.forEach((n,o)=>{n.rank=o+1}),s}async function he(t,e){let r=await dt(t,e),s=new URLSearchParams({fields:"f43,f44,f45,f46,f47,f48,f170,f171,f168,f169",mpi:"1000",invt:"2",fltt:"1",secid:`90.${r}`}),n=`${_t}?${s.toString()}`,i=(await t.get(n,{responseType:"json"}))?.data;return i?[{key:"f43",name:"\u6700\u65B0",divide:!0},{key:"f44",name:"\u6700\u9AD8",divide:!0},{key:"f45",name:"\u6700\u4F4E",divide:!0},{key:"f46",name:"\u5F00\u76D8",divide:!0},{key:"f47",name:"\u6210\u4EA4\u91CF",divide:!1},{key:"f48",name:"\u6210\u4EA4\u989D",divide:!1},{key:"f170",name:"\u6DA8\u8DCC\u5E45",divide:!0},{key:"f171",name:"\u632F\u5E45",divide:!0},{key:"f168",name:"\u6362\u624B\u7387",divide:!0},{key:"f169",name:"\u6DA8\u8DCC\u989D",divide:!0}].map(({key:l,name:c,divide:f})=>{let d=i[l],p=null;return typeof d=="number"&&!isNaN(d)&&(p=f?d/100:d),{item:c,value:p}}):[]}async function ye(t,e){let s={po:"1",np:"1",ut:"bd1d9ddb04089700cf9c27f6f7426281",fltt:"2",invt:"2",fid:"f3",fs:`b:${await dt(t,e)} f:!50`};return ge(t,Lt,s,"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152,f45",100,(o,i)=>({rank:i,code:String(o.f12??""),name:String(o.f14??""),price:w(o.f2),changePercent:w(o.f3),change:w(o.f4),volume:w(o.f5),amount:w(o.f6),amplitude:w(o.f7),high:w(o.f15),low:w(o.f16),open:w(o.f17),prevClose:w(o.f18),turnoverRate:w(o.f8),pe:w(o.f9),pb:w(o.f23)}))}async function Ce(t,e,r={}){let{period:s="daily",adjust:n="",startDate:o="19700101",endDate:i="20500101"}=r;U(s),I(n);let a=await dt(t,e),l={daily:"101",weekly:"102",monthly:"103"},c={"":"0",qfq:"1",hfq:"2"},f=new URLSearchParams({secid:`90.${a}`,fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",klt:l[s],fqt:c[n],beg:o,end:i,smplmt:"10000",lmt:"1000000"}),d=`${at}?${f.toString()}`,m=(await t.get(d,{responseType:"json"}))?.data?.klines;return!Array.isArray(m)||m.length===0?[]:m.map(h=>{let[y,R,S,b,M,A,_,L,k,x,O]=h.split(",");return{date:y,open:u(R),close:u(S),high:u(b),low:u(M),changePercent:u(k),change:u(x),volume:u(A),amount:u(_),amplitude:u(L),turnoverRate:u(O)}})}async function Re(t,e,r={}){let{period:s="5"}=r;v(s);let n=await dt(t,e);if(s==="1"){let o=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13",fields2:"f51,f52,f53,f54,f55,f56,f57,f58",iscr:"0",ndays:"1",secid:`90.${n}`}),i=`${kt}?${o.toString()}`,l=(await t.get(i,{responseType:"json"}))?.data?.trends;return!Array.isArray(l)||l.length===0?[]:l.map(c=>{let[f,d,p,m,h,y,R,S]=c.split(",");return{time:f,open:u(d),close:u(p),high:u(m),low:u(h),volume:u(y),amount:u(R),price:u(S)}})}else{let o=new URLSearchParams({secid:`90.${n}`,fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",klt:s,fqt:"1",beg:"0",end:"20500101",smplmt:"10000",lmt:"1000000"}),i=`${at}?${o.toString()}`,l=(await t.get(i,{responseType:"json"}))?.data?.klines;return!Array.isArray(l)||l.length===0?[]:l.map(c=>{let[f,d,p,m,h,y,R,S,b,M,A]=c.split(",");return{time:f,open:u(d),close:u(p),high:u(m),low:u(h),changePercent:u(b),change:u(M),volume:u(y),amount:u(R),amplitude:u(S),turnoverRate:u(A)}})}}var Ft=null;function T(t){if(t==null)return null;let e=String(t);return u(e)}async function mt(t,e){if(e.startsWith("BK"))return e;if(!Ft){let s=await Wt(t);Ft=new Map(s.map(n=>[n.name,n.code]))}let r=Ft.get(e);if(!r)throw new Error(`\u672A\u627E\u5230\u6982\u5FF5\u677F\u5757: ${e}`);return r}async function Se(t,e,r,s,n=100,o){let i=[],a=1,l=0;do{let c=new URLSearchParams({...r,pn:String(a),pz:String(n),fields:s}),f=`${e}?${c.toString()}`,p=(await t.get(f,{responseType:"json"}))?.data;if(!p||!Array.isArray(p.diff))break;a===1&&(l=p.total??0);let m=p.diff.map((h,y)=>o(h,i.length+y+1));i.push(...m),a++}while(i.length<l);return i}async function Wt(t){let s=await Se(t,It,{po:"1",np:"1",ut:"bd1d9ddb04089700cf9c27f6f7426281",fltt:"2",invt:"2",fid:"f12",fs:"m:90 t:3 f:!50"},"f2,f3,f4,f8,f12,f14,f15,f16,f17,f18,f20,f21,f24,f25,f22,f33,f11,f62,f128,f124,f107,f104,f105,f136",100,(n,o)=>({rank:o,name:String(n.f14??""),code:String(n.f12??""),price:T(n.f2),change:T(n.f4),changePercent:T(n.f3),totalMarketCap:T(n.f20),turnoverRate:T(n.f8),riseCount:T(n.f104),fallCount:T(n.f105),leadingStock:n.f128?String(n.f128):null,leadingStockChangePercent:T(n.f136)}));return s.sort((n,o)=>(o.changePercent??0)-(n.changePercent??0)),s.forEach((n,o)=>{n.rank=o+1}),s}async function be(t,e){let r=await mt(t,e),s=new URLSearchParams({fields:"f43,f44,f45,f46,f47,f48,f170,f171,f168,f169",mpi:"1000",invt:"2",fltt:"1",secid:`90.${r}`}),n=`${xt}?${s.toString()}`,i=(await t.get(n,{responseType:"json"}))?.data;return i?[{key:"f43",name:"\u6700\u65B0",divide:!0},{key:"f44",name:"\u6700\u9AD8",divide:!0},{key:"f45",name:"\u6700\u4F4E",divide:!0},{key:"f46",name:"\u5F00\u76D8",divide:!0},{key:"f47",name:"\u6210\u4EA4\u91CF",divide:!1},{key:"f48",name:"\u6210\u4EA4\u989D",divide:!1},{key:"f170",name:"\u6DA8\u8DCC\u5E45",divide:!0},{key:"f171",name:"\u632F\u5E45",divide:!0},{key:"f168",name:"\u6362\u624B\u7387",divide:!0},{key:"f169",name:"\u6DA8\u8DCC\u989D",divide:!0}].map(({key:l,name:c,divide:f})=>{let d=i[l],p=null;return typeof d=="number"&&!isNaN(d)&&(p=f?d/100:d),{item:c,value:p}}):[]}async function we(t,e){let s={po:"1",np:"1",ut:"bd1d9ddb04089700cf9c27f6f7426281",fltt:"2",invt:"2",fid:"f12",fs:`b:${await mt(t,e)} f:!50`};return Se(t,Ot,s,"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152,f45",100,(o,i)=>({rank:i,code:String(o.f12??""),name:String(o.f14??""),price:T(o.f2),changePercent:T(o.f3),change:T(o.f4),volume:T(o.f5),amount:T(o.f6),amplitude:T(o.f7),high:T(o.f15),low:T(o.f16),open:T(o.f17),prevClose:T(o.f18),turnoverRate:T(o.f8),pe:T(o.f9),pb:T(o.f23)}))}async function Te(t,e,r={}){let{period:s="daily",adjust:n="",startDate:o="19700101",endDate:i="20500101"}=r;U(s),I(n);let a=await mt(t,e),l={daily:"101",weekly:"102",monthly:"103"},c={"":"0",qfq:"1",hfq:"2"},f=new URLSearchParams({secid:`90.${a}`,fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",klt:l[s],fqt:c[n],beg:o,end:i,smplmt:"10000",lmt:"1000000"}),d=`${lt}?${f.toString()}`,m=(await t.get(d,{responseType:"json"}))?.data?.klines;return!Array.isArray(m)||m.length===0?[]:m.map(h=>{let[y,R,S,b,M,A,_,L,k,x,O]=h.split(",");return{date:y,open:u(R),close:u(S),high:u(b),low:u(M),changePercent:u(k),change:u(x),volume:u(A),amount:u(_),amplitude:u(L),turnoverRate:u(O)}})}async function Me(t,e,r={}){let{period:s="5"}=r;v(s);let n=await mt(t,e);if(s==="1"){let o=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13",fields2:"f51,f52,f53,f54,f55,f56,f57,f58",iscr:"0",ndays:"1",secid:`90.${n}`}),i=`${Ut}?${o.toString()}`,l=(await t.get(i,{responseType:"json"}))?.data?.trends;return!Array.isArray(l)||l.length===0?[]:l.map(c=>{let[f,d,p,m,h,y,R,S]=c.split(",");return{time:f,open:u(d),close:u(p),high:u(m),low:u(h),volume:u(y),amount:u(R),price:u(S)}})}else{let o=new URLSearchParams({secid:`90.${n}`,fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",klt:s,fqt:"1",beg:"0",end:"20500101",smplmt:"10000",lmt:"1000000"}),i=`${lt}?${o.toString()}`,l=(await t.get(i,{responseType:"json"}))?.data?.klines;return!Array.isArray(l)||l.length===0?[]:l.map(c=>{let[f,d,p,m,h,y,R,S,b,M,A]=c.split(",");return{time:f,open:u(d),close:u(p),high:u(m),low:u(h),changePercent:u(b),change:u(M),volume:u(y),amount:u(R),amplitude:u(S),turnoverRate:u(A)}})}}function V(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function B(t,e){let r=[];for(let s=0;s<t.length;s++){if(s<e-1){r.push(null);continue}let n=0,o=0;for(let i=s-e+1;i<=s;i++)t[i]!==null&&(n+=t[i],o++);r.push(o===e?V(n/e):null)}return r}function q(t,e){let r=[],s=2/(e+1),n=null,o=!1;for(let i=0;i<t.length;i++){if(i<e-1){r.push(null);continue}if(!o){let l=0,c=0;for(let f=i-e+1;f<=i;f++)t[f]!==null&&(l+=t[f],c++);c===e&&(n=l/e,o=!0),r.push(n!==null?V(n):null);continue}let a=t[i];a===null?r.push(n!==null?V(n):null):(n=s*a+(1-s)*n,r.push(V(n)))}return r}function gt(t,e){let r=[],s=Array.from({length:e},(o,i)=>i+1),n=s.reduce((o,i)=>o+i,0);for(let o=0;o<t.length;o++){if(o<e-1){r.push(null);continue}let i=0,a=!0;for(let l=0;l<e;l++){let c=t[o-e+1+l];if(c===null){a=!1;break}i+=c*s[l]}r.push(a?V(i/n):null)}return r}function G(t,e={}){let{periods:r=[5,10,20,30,60,120,250],type:s="sma"}=e,n=s==="ema"?q:s==="wma"?gt:B,o={};for(let i of r)o[`ma${i}`]=n(t,i);return t.map((i,a)=>{let l={};for(let c of r)l[`ma${c}`]=o[`ma${c}`][a];return l})}function Ke(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function J(t,e={}){let{short:r=12,long:s=26,signal:n=9}=e,o=q(t,r),i=q(t,s),a=t.map((c,f)=>o[f]===null||i[f]===null?null:o[f]-i[f]),l=q(a,n);return t.map((c,f)=>({dif:a[f]!==null?Ke(a[f]):null,dea:l[f],macd:a[f]!==null&&l[f]!==null?Ke((a[f]-l[f])*2):null}))}function zt(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function He(t,e,r){let s=[];for(let n=0;n<t.length;n++){if(n<e-1||r[n]===null){s.push(null);continue}let o=0,i=0;for(let a=n-e+1;a<=n;a++)t[a]!==null&&r[n]!==null&&(o+=Math.pow(t[a]-r[n],2),i++);s.push(i===e?Math.sqrt(o/e):null)}return s}function Z(t,e={}){let{period:r=20,stdDev:s=2}=e,n=B(t,r),o=He(t,r,n);return t.map((i,a)=>{if(n[a]===null||o[a]===null)return{mid:null,upper:null,lower:null,bandwidth:null};let l=n[a]+s*o[a],c=n[a]-s*o[a],f=n[a]!==0?zt((l-c)/n[a]*100):null;return{mid:n[a],upper:zt(l),lower:zt(c),bandwidth:f}})}function Vt(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function Y(t,e={}){let{period:r=9,kPeriod:s=3,dPeriod:n=3}=e,o=[],i=50,a=50;for(let l=0;l<t.length;l++){if(l<r-1){o.push({k:null,d:null,j:null});continue}let c=-1/0,f=1/0,d=!0;for(let y=l-r+1;y<=l;y++){if(t[y].high===null||t[y].low===null){d=!1;break}c=Math.max(c,t[y].high),f=Math.min(f,t[y].low)}let p=t[l].close;if(!d||p===null||c===f){o.push({k:null,d:null,j:null});continue}let m=(p-f)/(c-f)*100;i=(s-1)/s*i+1/s*m,a=(n-1)/n*a+1/n*i;let h=3*i-2*a;o.push({k:Vt(i),d:Vt(a),j:Vt(h)})}return o}function Ne(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function X(t,e={}){let{periods:r=[6,12,24]}=e,s=[null];for(let o=1;o<t.length;o++)t[o]===null||t[o-1]===null?s.push(null):s.push(t[o]-t[o-1]);let n={};for(let o of r){let i=[],a=0,l=0;for(let c=0;c<t.length;c++){if(c<o){i.push(null),s[c]!==null&&(s[c]>0?a+=s[c]:l+=Math.abs(s[c]));continue}if(c===o)a=a/o,l=l/o;else{let f=s[c]??0,d=f>0?f:0,p=f<0?Math.abs(f):0;a=(a*(o-1)+d)/o,l=(l*(o-1)+p)/o}if(l===0)i.push(100);else if(a===0)i.push(0);else{let f=a/l;i.push(Ne(100-100/(1+f)))}}n[`rsi${o}`]=i}return t.map((o,i)=>{let a={};for(let l of r)a[`rsi${l}`]=n[`rsi${l}`][i];return a})}function De(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function tt(t,e={}){let{periods:r=[6,10]}=e,s={};for(let n of r){let o=[];for(let i=0;i<t.length;i++){if(i<n-1){o.push(null);continue}let a=-1/0,l=1/0,c=!0;for(let p=i-n+1;p<=i;p++){if(t[p].high===null||t[p].low===null){c=!1;break}a=Math.max(a,t[p].high),l=Math.min(l,t[p].low)}let f=t[i].close;if(!c||f===null||a===l){o.push(null);continue}let d=(a-f)/(a-l)*100;o.push(De(d))}s[`wr${n}`]=o}return t.map((n,o)=>{let i={};for(let a of r)i[`wr${a}`]=s[`wr${a}`][o];return i})}function Qe(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function et(t,e={}){let{periods:r=[6,12,24]}=e,s={};for(let n of r){let o=B(t,n),i=[];for(let a=0;a<t.length;a++)if(t[a]===null||o[a]===null||o[a]===0)i.push(null);else{let l=(t[a]-o[a])/o[a]*100;i.push(Qe(l))}s[`bias${n}`]=i}return t.map((n,o)=>{let i={};for(let a of r)i[`bias${a}`]=s[`bias${a}`][o];return i})}function $e(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function nt(t,e={}){let{period:r=14}=e,s=[],n=t.map(o=>o.high===null||o.low===null||o.close===null?null:(o.high+o.low+o.close)/3);for(let o=0;o<t.length;o++){if(o<r-1){s.push({cci:null});continue}let i=0,a=0;for(let d=o-r+1;d<=o;d++)n[d]!==null&&(i+=n[d],a++);if(a!==r||n[o]===null){s.push({cci:null});continue}let l=i/r,c=0;for(let d=o-r+1;d<=o;d++)c+=Math.abs(n[d]-l);let f=c/r;if(f===0)s.push({cci:0});else{let d=(n[o]-l)/(.015*f);s.push({cci:$e(d)})}}return s}function Gt(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function rt(t,e={}){let{period:r=14}=e,s=[],n=[];for(let i=0;i<t.length;i++){let{high:a,low:l,close:c}=t[i];if(a===null||l===null||c===null){n.push(null);continue}if(i===0)n.push(a-l);else{let f=t[i-1].close;if(f===null)n.push(a-l);else{let d=a-l,p=Math.abs(a-f),m=Math.abs(l-f);n.push(Math.max(d,p,m))}}}let o=null;for(let i=0;i<t.length;i++){if(i<r-1){s.push({tr:n[i]!==null?Gt(n[i]):null,atr:null});continue}if(i===r-1){let a=0,l=0;for(let c=0;c<r;c++)n[c]!==null&&(a+=n[c],l++);l===r&&(o=a/r)}else o!==null&&n[i]!==null&&(o=(o*(r-1)+n[i])/r);s.push({tr:n[i]!==null?Gt(n[i]):null,atr:o!==null?Gt(o):null})}return s}function ot(t,e={}){if(t.length===0)return[];let r=t.map(m=>m.close),s=t.map(m=>({open:m.open,high:m.high,low:m.low,close:m.close,volume:m.volume})),n=e.ma?G(r,typeof e.ma=="object"?e.ma:{}):null,o=e.macd?J(r,typeof e.macd=="object"?e.macd:{}):null,i=e.boll?Z(r,typeof e.boll=="object"?e.boll:{}):null,a=e.kdj?Y(s,typeof e.kdj=="object"?e.kdj:{}):null,l=e.rsi?X(r,typeof e.rsi=="object"?e.rsi:{}):null,c=e.wr?tt(s,typeof e.wr=="object"?e.wr:{}):null,f=e.bias?et(r,typeof e.bias=="object"?e.bias:{}):null,d=e.cci?nt(s,typeof e.cci=="object"?e.cci:{}):null,p=e.atr?rt(s,typeof e.atr=="object"?e.atr:{}):null;return t.map((m,h)=>({...m,...n&&{ma:n[h]},...o&&{macd:o[h]},...i&&{boll:i[h]},...a&&{kdj:a[h]},...l&&{rsi:l[h]},...c&&{wr:c[h]},...f&&{bias:f[h]},...d&&{cci:d[h]},...p&&{atr:p[h]}}))}var st=class{constructor(e={}){this.client=new z(e)}getFullQuotes(e){return K.getFullQuotes(this.client,e)}getSimpleQuotes(e){return K.getSimpleQuotes(this.client,e)}getHKQuotes(e){return K.getHKQuotes(this.client,e)}getUSQuotes(e){return K.getUSQuotes(this.client,e)}getFundQuotes(e){return K.getFundQuotes(this.client,e)}getFundFlow(e){return K.getFundFlow(this.client,e)}getPanelLargeOrder(e){return K.getPanelLargeOrder(this.client,e)}getTodayTimeline(e){return K.getTodayTimeline(this.client,e)}getIndustryList(){return P.getIndustryList(this.client)}getIndustrySpot(e){return P.getIndustrySpot(this.client,e)}getIndustryConstituents(e){return P.getIndustryConstituents(this.client,e)}getIndustryKline(e,r){return P.getIndustryKline(this.client,e,r)}getIndustryMinuteKline(e,r){return P.getIndustryMinuteKline(this.client,e,r)}getConceptList(){return P.getConceptList(this.client)}getConceptSpot(e){return P.getConceptSpot(this.client,e)}getConceptConstituents(e){return P.getConceptConstituents(this.client,e)}getConceptKline(e,r){return P.getConceptKline(this.client,e,r)}getConceptMinuteKline(e,r){return P.getConceptMinuteKline(this.client,e,r)}getHistoryKline(e,r){return P.getHistoryKline(this.client,e,r)}getMinuteKline(e,r){return P.getMinuteKline(this.client,e,r)}getHKHistoryKline(e,r){return P.getHKHistoryKline(this.client,e,r)}getUSHistoryKline(e,r){return P.getUSHistoryKline(this.client,e,r)}search(e){return K.search(this.client,e)}getAShareCodeList(e=!0){return K.getAShareCodeList(this.client,e)}getUSCodeList(e=!0){return K.getUSCodeList(this.client,e)}getHKCodeList(){return K.getHKCodeList(this.client)}async getAllAShareQuotes(e={}){let r=await this.getAShareCodeList();return this.getAllQuotesByCodes(r,e)}async getAllHKShareQuotes(e={}){let r=await this.getHKCodeList();return K.getAllHKQuotesByCodes(this.client,r,e)}async getAllUSShareQuotes(e={}){let r=await this.getUSCodeList(!1);return K.getAllUSQuotesByCodes(this.client,r,e)}getAllQuotesByCodes(e,r={}){return K.getAllQuotesByCodes(this.client,e,r)}async batchRaw(e){return this.client.getTencentQuote(e)}getTradingCalendar(){return K.getTradingCalendar(this.client)}detectMarket(e){return/^\d{3}\.[A-Z]+$/i.test(e)?"US":/^\d{5}$/.test(e)?"HK":"A"}safeMax(e,r=0){return!e||e.length===0?r:Math.max(...e)}calcRequiredLookback(e){let r=0,s=!1;if(e.ma){let o=typeof e.ma=="object"?e.ma:{},i=o.periods??[5,10,20,30,60,120,250],a=o.type??"sma";r=Math.max(r,this.safeMax(i,20)),a==="ema"&&(s=!0)}if(e.macd){let o=typeof e.macd=="object"?e.macd:{},i=o.long??26,a=o.signal??9;r=Math.max(r,i*3+a),s=!0}if(e.boll){let o=typeof e.boll=="object"&&e.boll.period?e.boll.period:20;r=Math.max(r,o)}if(e.kdj){let o=typeof e.kdj=="object"&&e.kdj.period?e.kdj.period:9;r=Math.max(r,o)}if(e.rsi){let o=typeof e.rsi=="object"&&e.rsi.periods?e.rsi.periods:[6,12,24];r=Math.max(r,this.safeMax(o,14)+1)}if(e.wr){let o=typeof e.wr=="object"&&e.wr.periods?e.wr.periods:[6,10];r=Math.max(r,this.safeMax(o,10))}if(e.bias){let o=typeof e.bias=="object"&&e.bias.periods?e.bias.periods:[6,12,24];r=Math.max(r,this.safeMax(o,12))}if(e.cci){let o=typeof e.cci=="object"&&e.cci.period?e.cci.period:14;r=Math.max(r,o)}if(e.atr){let o=typeof e.atr=="object"&&e.atr.period?e.atr.period:14;r=Math.max(r,o)}return Math.ceil(r*(s?1.5:1.2))}calcActualStartDate(e,r,s=1.5){let n=Math.ceil(r*s),o=new Date(parseInt(e.slice(0,4)),parseInt(e.slice(4,6))-1,parseInt(e.slice(6,8)));o.setDate(o.getDate()-n);let i=o.getFullYear(),a=String(o.getMonth()+1).padStart(2,"0"),l=String(o.getDate()).padStart(2,"0");return`${i}${a}${l}`}dateToTimestamp(e){let r=e.includes("-")?e:`${e.slice(0,4)}-${e.slice(4,6)}-${e.slice(6,8)}`;return new Date(r).getTime()}async getKlineWithIndicators(e,r={}){let{startDate:s,endDate:n,indicators:o={}}=r,i=r.market??this.detectMarket(e),a=this.calcRequiredLookback(o),c={A:1.5,HK:1.46,US:1.45}[i],f=s?this.calcActualStartDate(s,a,c):void 0,d={period:r.period,adjust:r.adjust,startDate:f,endDate:r.endDate},p;switch(i){case"HK":p=await this.getHKHistoryKline(e,d);break;case"US":p=await this.getUSHistoryKline(e,d);break;default:p=await this.getHistoryKline(e,d)}if(s&&p.length<a)switch(i){case"HK":p=await this.getHKHistoryKline(e,{...d,startDate:void 0});break;case"US":p=await this.getUSHistoryKline(e,{...d,startDate:void 0});break;default:p=await this.getHistoryKline(e,{...d,startDate:void 0})}let m=ot(p,o);if(s){let h=this.dateToTimestamp(s),y=n?this.dateToTimestamp(n):1/0;return m.filter(R=>{let S=this.dateToTimestamp(R.date);return S>=h&&S<=y})}return m}},Ae=st;0&&(module.exports={StockSDK,addIndicators,asyncPool,calcATR,calcBIAS,calcBOLL,calcCCI,calcEMA,calcKDJ,calcMA,calcMACD,calcRSI,calcSMA,calcWMA,calcWR,chunkArray,decodeGBK,parseResponse,safeNumber,safeNumberOrNull});
|
|
1
|
+
"use strict";var xe=Object.defineProperty;var Qt=Object.getOwnPropertyDescriptor;var Ft=Object.getOwnPropertyNames;var $t=Object.prototype.hasOwnProperty;var Le=(t,e)=>{for(var n in e)xe(t,n,{get:e[n],enumerable:!0})},Wt=(t,e,n,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Ft(e))!$t.call(t,r)&&r!==n&&xe(t,r,{get:()=>e[r],enumerable:!(s=Qt(e,r))||s.enumerable});return t};var zt=t=>Wt(xe({},"__esModule",{value:!0}),t);var cn={};Le(cn,{HttpError:()=>B,StockSDK:()=>ae,addIndicators:()=>ie,asyncPool:()=>k,calcATR:()=>se,calcBIAS:()=>re,calcBOLL:()=>Z,calcCCI:()=>oe,calcEMA:()=>U,calcKDJ:()=>ee,calcMA:()=>J,calcMACD:()=>X,calcRSI:()=>te,calcSMA:()=>E,calcWMA:()=>Me,calcWR:()=>ne,chunkArray:()=>P,decodeGBK:()=>v,default:()=>Nt,parseResponse:()=>j,safeNumber:()=>f,safeNumberOrNull:()=>y});module.exports=zt(cn);function v(t){return new TextDecoder("gbk").decode(t)}function j(t){let e=t.split(";").map(s=>s.trim()).filter(Boolean),n=[];for(let s of e){let r=s.indexOf("=");if(r<0)continue;let o=s.slice(0,r).trim();o.startsWith("v_")&&(o=o.slice(2));let i=s.slice(r+1).trim();i.startsWith('"')&&i.endsWith('"')&&(i=i.slice(1,-1));let a=i.split("~");n.push({key:o,fields:a})}return n}function f(t){if(!t||t==="")return 0;let e=parseFloat(t);return Number.isNaN(e)?0:e}function y(t){if(!t||t==="")return null;let e=parseFloat(t);return Number.isNaN(e)?null:e}function g(t){if(!t||t===""||t==="-")return null;let e=parseFloat(t);return Number.isNaN(e)?null:e}function R(t){return t==null?null:g(String(t))}var Oe="https://qt.gtimg.cn",we="https://web.ifzq.gtimg.cn/appstock/app/minute/query",Ie="https://assets.linkdiary.cn/shares/zh_a_list.json",Ee="https://assets.linkdiary.cn/shares/us_list.json",Ue="https://assets.linkdiary.cn/shares/hk_list.json",ft="https://assets.linkdiary.cn/shares/trade-data-list.txt";var le="https://push2his.eastmoney.com/api/qt/stock/kline/get",Be="https://push2his.eastmoney.com/api/qt/stock/trends2/get",Pe="https://33.push2his.eastmoney.com/api/qt/stock/kline/get",ke="https://63.push2his.eastmoney.com/api/qt/stock/kline/get",De="https://17.push2.eastmoney.com/api/qt/clist/get",qe="https://91.push2.eastmoney.com/api/qt/stock/get",He="https://29.push2.eastmoney.com/api/qt/clist/get",Ne="https://7.push2his.eastmoney.com/api/qt/stock/kline/get",ve="https://push2his.eastmoney.com/api/qt/stock/trends2/get",je="https://79.push2.eastmoney.com/api/qt/clist/get",Qe="https://91.push2.eastmoney.com/api/qt/stock/get",Fe="https://29.push2.eastmoney.com/api/qt/clist/get",$e="https://91.push2his.eastmoney.com/api/qt/stock/kline/get",We="https://push2his.eastmoney.com/api/qt/stock/trends2/get",ze=3e4,Q=500,F=500,$=7,Ge=3,Ve=1e3,Ye=3e4,Je=2,Xe=[408,429,500,502,503,504];var B=class extends Error{constructor(n,s,r,o){let i=s?` ${s}`:"",a=r?`, url: ${r}`:"",l=o?`, provider: ${o}`:"";super(`HTTP error! status: ${n}${i}${a}${l}`);this.status=n;this.statusText=s;this.url=r;this.provider=o;this.name="HttpError"}},W=class{constructor(e={}){this.baseUrl=e.baseUrl??Oe,this.timeout=e.timeout??ze,this.retryOptions=this.resolveRetryOptions(e.retry),this.headers={...e.headers??{}},e.userAgent&&(Object.keys(this.headers).some(s=>s.toLowerCase()==="user-agent")||(this.headers["User-Agent"]=e.userAgent))}resolveRetryOptions(e){return{maxRetries:e?.maxRetries??Ge,baseDelay:e?.baseDelay??Ve,maxDelay:e?.maxDelay??Ye,backoffMultiplier:e?.backoffMultiplier??Je,retryableStatusCodes:e?.retryableStatusCodes??Xe,retryOnNetworkError:e?.retryOnNetworkError??!0,retryOnTimeout:e?.retryOnTimeout??!0,onRetry:e?.onRetry}}inferProvider(e){try{let n=new URL(e).hostname;if(n.includes("eastmoney.com"))return"eastmoney";if(n.includes("gtimg.cn"))return"tencent";if(n.includes("linkdiary.cn"))return"linkdiary"}catch{return}}getTimeout(){return this.timeout}calculateDelay(e){return Math.min(this.retryOptions.baseDelay*Math.pow(this.retryOptions.backoffMultiplier,e),this.retryOptions.maxDelay)+Math.random()*100}sleep(e){return new Promise(n=>setTimeout(n,e))}shouldRetry(e,n){return n>=this.retryOptions.maxRetries?!1:e instanceof DOMException&&e.name==="AbortError"?this.retryOptions.retryOnTimeout:e instanceof TypeError?this.retryOptions.retryOnNetworkError:e instanceof B?this.retryOptions.retryableStatusCodes.includes(e.status):!1}async executeWithRetry(e,n=0){try{return await e()}catch(s){if(this.shouldRetry(s,n)){let r=this.calculateDelay(n);return this.retryOptions.onRetry&&s instanceof Error&&this.retryOptions.onRetry(n+1,s,r),await this.sleep(r),this.executeWithRetry(e,n+1)}throw s}}async get(e,n={}){return this.executeWithRetry(async()=>{let s=new AbortController,r=setTimeout(()=>s.abort(),this.timeout),o=this.inferProvider(e);try{let i=await fetch(e,{signal:s.signal,headers:{...this.headers}});if(!i.ok)throw new B(i.status,i.statusText,e,o);switch(n.responseType){case"json":return await i.json();case"arraybuffer":return await i.arrayBuffer();default:return await i.text()}}catch(i){throw i instanceof Error&&(i.url=e,i.provider=o),i}finally{clearTimeout(r)}})}async getTencentQuote(e){let n=`${this.baseUrl}/?q=${encodeURIComponent(e)}`,s=await this.get(n,{responseType:"arraybuffer"}),r=v(s);return j(r)}};var Gt=new Set(["daily","weekly","monthly"]),Vt=new Set(["1","5","15","30","60"]),Yt=new Set(["","qfq","hfq"]);function K(t,e){if(!Number.isFinite(t)||!Number.isInteger(t)||t<=0)throw new RangeError(`${e} must be a positive integer`)}function x(t){if(!Gt.has(t))throw new RangeError("period must be one of: daily, weekly, monthly")}function z(t){if(!Vt.has(t))throw new RangeError("period must be one of: 1, 5, 15, 30, 60")}function M(t){if(!Yt.has(t))throw new RangeError("adjust must be one of: '', 'qfq', 'hfq'")}function P(t,e){K(e,"chunkSize");let n=[];for(let s=0;s<t.length;s+=e)n.push(t.slice(s,s+e));return n}async function k(t,e){K(e,"concurrency");let n=[],s=[];for(let r of t){let o=Promise.resolve().then(()=>r()).then(i=>{n.push(i)});if(s.push(o),s.length>=e){await Promise.race(s);for(let i=s.length-1;i>=0;i--)await Promise.race([s[i].then(()=>"fulfilled"),Promise.resolve("pending")])==="fulfilled"&&s.splice(i,1)}}return await Promise.all(s),n}function ue(t){return t.startsWith("sh")?"1":t.startsWith("sz")||t.startsWith("bj")?"0":t.startsWith("6")?"1":"0"}function L(t){return{daily:"101",weekly:"102",monthly:"103"}[t]}function A(t){return{"":"0",qfq:"1",hfq:"2"}[t]}var b={};Le(b,{getAShareCodeList:()=>Ct,getAllHKQuotesByCodes:()=>Tt,getAllQuotesByCodes:()=>St,getAllUSQuotesByCodes:()=>Kt,getFullQuotes:()=>ce,getFundFlow:()=>mt,getFundQuotes:()=>ht,getHKCodeList:()=>bt,getHKQuotes:()=>pe,getPanelLargeOrder:()=>gt,getSimpleQuotes:()=>dt,getTodayTimeline:()=>yt,getTradingCalendar:()=>Mt,getUSCodeList:()=>Rt,getUSQuotes:()=>fe,parseFullQuote:()=>Ze,parseFundFlow:()=>tt,parseFundQuote:()=>st,parseHKQuote:()=>rt,parsePanelLargeOrder:()=>nt,parseSimpleQuote:()=>et,parseUSQuote:()=>ot,search:()=>_t});function Ze(t){let e=[];for(let s=0;s<5;s++)e.push({price:f(t[9+s*2]),volume:f(t[10+s*2])});let n=[];for(let s=0;s<5;s++)n.push({price:f(t[19+s*2]),volume:f(t[20+s*2])});return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:f(t[3]),prevClose:f(t[4]),open:f(t[5]),volume:f(t[6]),outerVolume:f(t[7]),innerVolume:f(t[8]),bid:e,ask:n,time:t[30]??"",change:f(t[31]),changePercent:f(t[32]),high:f(t[33]),low:f(t[34]),volume2:f(t[36]),amount:f(t[37]),turnoverRate:y(t[38]),pe:y(t[39]),amplitude:y(t[43]),circulatingMarketCap:y(t[44]),totalMarketCap:y(t[45]),pb:y(t[46]),limitUp:y(t[47]),limitDown:y(t[48]),volumeRatio:y(t[49]),avgPrice:y(t[51]),peStatic:y(t[52]),peDynamic:y(t[53]),high52w:y(t[67]),low52w:y(t[68]),circulatingShares:y(t[72]),totalShares:y(t[73]),raw:t}}function et(t){return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:f(t[3]),change:f(t[4]),changePercent:f(t[5]),volume:f(t[6]),amount:f(t[7]),marketCap:y(t[9]),marketType:t[10]??"",raw:t}}function tt(t){return{code:t[0]??"",mainInflow:f(t[1]),mainOutflow:f(t[2]),mainNet:f(t[3]),mainNetRatio:f(t[4]),retailInflow:f(t[5]),retailOutflow:f(t[6]),retailNet:f(t[7]),retailNetRatio:f(t[8]),totalFlow:f(t[9]),name:t[12]??"",date:t[13]??"",raw:t}}function nt(t){return{buyLargeRatio:f(t[0]),buySmallRatio:f(t[1]),sellLargeRatio:f(t[2]),sellSmallRatio:f(t[3]),raw:t}}function rt(t){return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:f(t[3]),prevClose:f(t[4]),open:f(t[5]),volume:f(t[6]),time:t[30]??"",change:f(t[31]),changePercent:f(t[32]),high:f(t[33]),low:f(t[34]),amount:f(t[37]),lotSize:y(t[40]),circulatingMarketCap:y(t[44]),totalMarketCap:y(t[45]),currency:t[t.length-3]??"",raw:t}}function ot(t){return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:f(t[3]),prevClose:f(t[4]),open:f(t[5]),volume:f(t[6]),time:t[30]??"",change:f(t[31]),changePercent:f(t[32]),high:f(t[33]),low:f(t[34]),amount:f(t[37]),turnoverRate:y(t[38]),pe:y(t[39]),amplitude:y(t[43]),totalMarketCap:y(t[45]),pb:y(t[47]),high52w:y(t[48]),low52w:y(t[49]),raw:t}}function st(t){return{code:t[0]??"",name:t[1]??"",nav:f(t[5]),accNav:f(t[6]),change:f(t[7]),navDate:t[8]??"",raw:t}}async function ce(t,e){return!e||e.length===0?[]:(await t.getTencentQuote(e.join(","))).filter(s=>s.fields&&s.fields.length>0&&s.fields[0]!=="").map(s=>Ze(s.fields))}async function dt(t,e){if(!e||e.length===0)return[];let n=e.map(r=>`s_${r}`);return(await t.getTencentQuote(n.join(","))).filter(r=>r.fields&&r.fields.length>0&&r.fields[0]!=="").map(r=>et(r.fields))}async function mt(t,e){if(!e||e.length===0)return[];let n=e.map(r=>`ff_${r}`);return(await t.getTencentQuote(n.join(","))).filter(r=>r.fields&&r.fields.length>0&&r.fields[0]!=="").map(r=>tt(r.fields))}async function gt(t,e){if(!e||e.length===0)return[];let n=e.map(r=>`s_pk${r}`);return(await t.getTencentQuote(n.join(","))).filter(r=>r.fields&&r.fields.length>0&&r.fields[0]!=="").map(r=>nt(r.fields))}async function pe(t,e){if(!e||e.length===0)return[];let n=e.map(r=>`hk${r}`);return(await t.getTencentQuote(n.join(","))).filter(r=>r.fields&&r.fields.length>0&&r.fields[0]!=="").map(r=>rt(r.fields))}async function fe(t,e){if(!e||e.length===0)return[];let n=e.map(r=>`us${r}`);return(await t.getTencentQuote(n.join(","))).filter(r=>r.fields&&r.fields.length>0&&r.fields[0]!=="").map(r=>ot(r.fields))}async function ht(t,e){if(!e||e.length===0)return[];let n=e.map(r=>`jj${r}`);return(await t.getTencentQuote(n.join(","))).filter(r=>r.fields&&r.fields.length>0&&r.fields[0]!=="").map(r=>st(r.fields))}async function yt(t,e){let n=t.getTimeout(),s=new AbortController,r=setTimeout(()=>s.abort(),n);try{let o=await fetch(`${we}?code=${e}`,{signal:s.signal});if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);let i=await o.json();if(i.code!==0)throw new Error(i.msg||"API error");let a=i.data?.[e];if(!a)return{code:e,date:"",data:[]};let l=a.data?.data||[],u=a.data?.date||"",c=!1;if(l.length>0){let d=l[0].split(" "),m=parseFloat(d[1])||0,h=parseInt(d[2],10)||0,C=parseFloat(d[3])||0;h>0&&m>0&&C/h>m*50&&(c=!0)}let p=l.map(d=>{let m=d.split(" "),h=m[0],C=`${h.slice(0,2)}:${h.slice(2,4)}`,T=parseInt(m[2],10)||0,I=parseFloat(m[3])||0,_=c?T*100:T,N=_>0?I/_:0;return{time:C,price:parseFloat(m[1])||0,volume:_,amount:I,avgPrice:Math.round(N*100)/100}});return{code:e,date:u,data:p}}finally{clearTimeout(r)}}var de=null,G=null,me=null,V=null,ge=null;async function Ct(t,e=!0){if(de)return e?de.slice():(G||(G=de.map(r=>r.replace(/^(sh|sz|bj)/,""))),G.slice());let s=(await t.get(Ie,{responseType:"json"}))?.list||[];return de=s,G=s.map(r=>r.replace(/^(sh|sz|bj)/,"")),e?s.slice():G.slice()}async function Rt(t,e=!0){if(me)return e?me.slice():(V||(V=me.map(r=>r.replace(/^\d{3}\./,""))),V.slice());let s=(await t.get(Ee,{responseType:"json"}))?.list||[];return me=s,V=s.map(r=>r.replace(/^\d{3}\./,"")),e?s.slice():V.slice()}async function bt(t){return ge||(ge=(await t.get(Ue,{responseType:"json"}))?.list||[]),ge.slice()}async function St(t,e,n={}){let{batchSize:s=Q,concurrency:r=$,onProgress:o}=n;K(s,"batchSize"),K(r,"concurrency");let i=Math.min(s,F),a=P(e,i),l=a.length,u=0,c=a.map(d=>async()=>{let m=await ce(t,d);return u++,o&&o(u,l),m});return(await k(c,r)).flat()}async function Tt(t,e,n={}){let{batchSize:s=Q,concurrency:r=$,onProgress:o}=n;K(s,"batchSize"),K(r,"concurrency");let i=Math.min(s,F),a=P(e,i),l=a.length,u=0,c=a.map(d=>async()=>{let m=await pe(t,d);return u++,o&&o(u,l),m});return(await k(c,r)).flat()}async function Kt(t,e,n={}){let{batchSize:s=Q,concurrency:r=$,onProgress:o}=n;K(s,"batchSize"),K(r,"concurrency");let i=Math.min(s,F),a=P(e,i),l=a.length,u=0,c=a.map(d=>async()=>{let m=await fe(t,d);return u++,o&&o(u,l),m});return(await k(c,r)).flat()}var H=null;async function Mt(t){if(H)return H.slice();let e=await t.get(ft);return!e||e.trim()===""?(H=[],H.slice()):(H=e.trim().split(",").map(n=>n.trim()).filter(n=>n.length>0),H.slice())}var At="https://smartbox.gtimg.cn/s3/";function Jt(t){return t.replace(/\\u([0-9a-fA-F]{4})/g,(e,n)=>String.fromCharCode(parseInt(n,16)))}function Xt(t){return!t||t==="N"?[]:t.split("^").filter(Boolean).map(n=>{let s=n.split("~"),r=s[0]||"",o=s[1]||"",i=Jt(s[2]||""),a=s[4]||"";return{code:r+o,name:i,market:r,type:a}})}function Zt(t){return new Promise((e,n)=>{let s=`${At}?v=2&t=all&q=${encodeURIComponent(t)}`;window.v_hint="";let r=document.createElement("script");r.src=s,r.charset="utf-8",r.onload=()=>{let o=window.v_hint||"";document.body.removeChild(r),e(o)},r.onerror=()=>{document.body.removeChild(r),n(new Error("Network error calling Smartbox"))},document.body.appendChild(r)})}async function en(t,e){let n=`${At}?v=2&t=all&q=${encodeURIComponent(e)}`,r=(await t.get(n)).match(/v_hint="([^"]*)"/);return r?r[1]:""}function tn(){return typeof window<"u"&&typeof document<"u"}async function _t(t,e){if(!e||!e.trim())return[];let n;return tn()?n=await Zt(e):n=await en(t,e),Xt(n)}var S={};Le(S,{getConceptConstituents:()=>kt,getConceptKline:()=>Dt,getConceptList:()=>lt,getConceptMinuteKline:()=>qt,getConceptSpot:()=>Pt,getHKHistoryKline:()=>Ot,getHistoryKline:()=>xt,getIndustryConstituents:()=>Et,getIndustryKline:()=>Ut,getIndustryList:()=>at,getIndustryMinuteKline:()=>Bt,getIndustrySpot:()=>It,getMinuteKline:()=>Lt,getUSHistoryKline:()=>wt});async function it(t,e,n,s,r=100,o){let i=[],a=1,l=0;do{let u=new URLSearchParams({...n,pn:String(a),pz:String(r),fields:s}),c=`${e}?${u.toString()}`,d=(await t.get(c,{responseType:"json"}))?.data;if(!d||!Array.isArray(d.diff))break;a===1&&(l=d.total??0);let m=d.diff.map((h,C)=>o(h,i.length+C+1));i.push(...m),a++}while(i.length<l);return i}function O(t){let[e,n,s,r,o,i,a,l,u,c,p]=t.split(",");return{date:e,open:g(n),close:g(s),high:g(r),low:g(o),volume:g(i),amount:g(a),amplitude:g(l),changePercent:g(u),change:g(c),turnoverRate:g(p)}}async function w(t,e,n){let s=`${e}?${n.toString()}`,r=await t.get(s,{responseType:"json"});return{klines:r?.data?.klines||[],name:r?.data?.name,code:r?.data?.code}}async function xt(t,e,n={}){let{period:s="daily",adjust:r="hfq",startDate:o="19700101",endDate:i="20500101"}=n;x(s),M(r);let a=e.replace(/^(sh|sz|bj)/,""),l=`${ue(e)}.${a}`,u=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f116",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:L(s),fqt:A(r),secid:l,beg:o,end:i}),c=le,{klines:p}=await w(t,c,u);return p.length===0?[]:p.map(d=>({...O(d),code:a}))}async function Lt(t,e,n={}){let{period:s="1",adjust:r="hfq",startDate:o="1979-09-01 09:32:00",endDate:i="2222-01-01 09:32:00"}=n;z(s),M(r);let a=e.replace(/^(sh|sz|bj)/,""),l=`${ue(e)}.${a}`;if(s==="1"){let u=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13",fields2:"f51,f52,f53,f54,f55,f56,f57,f58",ut:"7eea3edcaed734bea9cbfc24409ed989",ndays:"5",iscr:"0",secid:l}),c=`${Be}?${u.toString()}`,d=(await t.get(c,{responseType:"json"}))?.data?.trends;if(!Array.isArray(d)||d.length===0)return[];let m=o.replace("T"," ").slice(0,16),h=i.replace("T"," ").slice(0,16);return d.map(C=>{let[T,I,_,N,Ae,_e,vt,jt]=C.split(",");return{time:T,open:g(I),close:g(_),high:g(N),low:g(Ae),volume:g(_e),amount:g(vt),avgPrice:g(jt)}}).filter(C=>C.time>=m&&C.time<=h)}else{let u=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:s,fqt:A(r||""),secid:l,beg:"0",end:"20500000"}),c=le,{klines:p}=await w(t,c,u);if(p.length===0)return[];let d=o.replace("T"," ").slice(0,16),m=i.replace("T"," ").slice(0,16);return p.map(h=>{let C=O(h);return{...C,time:C.date}}).filter(h=>h.time>=d&&h.time<=m)}}async function Ot(t,e,n={}){let{period:s="daily",adjust:r="hfq",startDate:o="19700101",endDate:i="20500101"}=n;x(s),M(r);let a=e.replace(/^hk/i,"").padStart(5,"0"),l=`116.${a}`,u=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:L(s),fqt:A(r),secid:l,beg:o,end:i,lmt:"1000000"}),c=Pe,{klines:p,name:d}=await w(t,c,u);return p.length===0?[]:p.map(m=>({...O(m),code:a,name:d||""}))}async function wt(t,e,n={}){let{period:s="daily",adjust:r="hfq",startDate:o="19700101",endDate:i="20500101"}=n;x(s),M(r);let a=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:L(s),fqt:A(r),secid:e,beg:o,end:i,lmt:"1000000"}),l=ke,{klines:u,name:c,code:p}=await w(t,l,a),d=p||e.split(".")[1]||e,m=c||"";return u.length===0?[]:u.map(h=>({...O(h),code:d,name:m}))}function he(t){let e=null;return{async getCode(n,s,r){if(s.startsWith("BK"))return s;if(!e){let i=await r(n);e=new Map(i.map(a=>[a.name,a.code]))}let o=e.get(s);if(!o)throw new Error(`${t.errorPrefix}: ${s}`);return o}}}async function ye(t,e){let n={po:"1",np:"1",ut:"bd1d9ddb04089700cf9c27f6f7426281",fltt:"2",invt:"2",fid:e.type==="concept"?"f12":"f3",fs:e.fsFilter},s=e.type==="concept"?"f2,f3,f4,f8,f12,f14,f15,f16,f17,f18,f20,f21,f24,f25,f22,f33,f11,f62,f128,f124,f107,f104,f105,f136":"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f26,f22,f33,f11,f62,f128,f136,f115,f152,f124,f107,f104,f105,f140,f141,f207,f208,f209,f222",r=await it(t,e.listUrl,n,s,100,(o,i)=>({rank:i,name:String(o.f14??""),code:String(o.f12??""),price:R(o.f2),change:R(o.f4),changePercent:R(o.f3),totalMarketCap:R(o.f20),turnoverRate:R(o.f8),riseCount:R(o.f104),fallCount:R(o.f105),leadingStock:o.f128?String(o.f128):null,leadingStockChangePercent:R(o.f136)}));return r.sort((o,i)=>(i.changePercent??0)-(o.changePercent??0)),r.forEach((o,i)=>{o.rank=i+1}),r}async function Ce(t,e,n){let s=new URLSearchParams({fields:"f43,f44,f45,f46,f47,f48,f170,f171,f168,f169",mpi:"1000",invt:"2",fltt:"1",secid:`90.${e}`}),r=`${n}?${s.toString()}`,i=(await t.get(r,{responseType:"json"}))?.data;return i?[{key:"f43",name:"\u6700\u65B0",divide:!0},{key:"f44",name:"\u6700\u9AD8",divide:!0},{key:"f45",name:"\u6700\u4F4E",divide:!0},{key:"f46",name:"\u5F00\u76D8",divide:!0},{key:"f47",name:"\u6210\u4EA4\u91CF",divide:!1},{key:"f48",name:"\u6210\u4EA4\u989D",divide:!1},{key:"f170",name:"\u6DA8\u8DCC\u5E45",divide:!0},{key:"f171",name:"\u632F\u5E45",divide:!0},{key:"f168",name:"\u6362\u624B\u7387",divide:!0},{key:"f169",name:"\u6DA8\u8DCC\u989D",divide:!0}].map(({key:l,name:u,divide:c})=>{let p=i[l],d=null;return typeof p=="number"&&!isNaN(p)&&(d=c?p/100:p),{item:u,value:d}}):[]}async function Re(t,e,n){let s={po:"1",np:"1",ut:"bd1d9ddb04089700cf9c27f6f7426281",fltt:"2",invt:"2",fid:"f3",fs:`b:${e} f:!50`};return it(t,n,s,"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152,f45",100,(o,i)=>({rank:i,code:String(o.f12??""),name:String(o.f14??""),price:R(o.f2),changePercent:R(o.f3),change:R(o.f4),volume:R(o.f5),amount:R(o.f6),amplitude:R(o.f7),high:R(o.f15),low:R(o.f16),open:R(o.f17),prevClose:R(o.f18),turnoverRate:R(o.f8),pe:R(o.f9),pb:R(o.f23)}))}async function be(t,e,n,s={}){let{period:r="daily",adjust:o="",startDate:i="19700101",endDate:a="20500101"}=s;x(r),M(o);let l=new URLSearchParams({secid:`90.${e}`,fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",klt:L(r),fqt:A(o),beg:i,end:a,smplmt:"10000",lmt:"1000000"}),{klines:u}=await w(t,n,l);return u.length===0?[]:u.map(c=>O(c))}async function Se(t,e,n,s,r={}){let{period:o="5"}=r;if(z(o),o==="1"){let i=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13",fields2:"f51,f52,f53,f54,f55,f56,f57,f58",iscr:"0",ndays:"1",secid:`90.${e}`}),a=`${s}?${i.toString()}`,u=(await t.get(a,{responseType:"json"}))?.data?.trends;return!Array.isArray(u)||u.length===0?[]:u.map(c=>{let[p,d,m,h,C,T,I,_]=c.split(",");return{time:p,open:g(d),close:g(m),high:g(h),low:g(C),volume:g(T),amount:g(I),price:g(_)}})}else{let i=new URLSearchParams({secid:`90.${e}`,fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",klt:o,fqt:"1",beg:"0",end:"20500101",smplmt:"10000",lmt:"1000000"}),a=`${n}?${i.toString()}`,u=(await t.get(a,{responseType:"json"}))?.data?.klines;return!Array.isArray(u)||u.length===0?[]:u.map(c=>{let[p,d,m,h,C,T,I,_,N,Ae,_e]=c.split(",");return{time:p,open:g(d),close:g(m),high:g(h),low:g(C),changePercent:g(N),change:g(Ae),volume:g(T),amount:g(I),amplitude:g(_),turnoverRate:g(_e)}})}}var D={type:"industry",fsFilter:"m:90 t:2 f:!50",listUrl:De,spotUrl:qe,consUrl:He,klineUrl:Ne,trendsUrl:ve,errorPrefix:"\u672A\u627E\u5230\u884C\u4E1A\u677F\u5757"},nn=he(D);async function Te(t,e){return nn.getCode(t,e,at)}async function at(t){return ye(t,D)}async function It(t,e){let n=await Te(t,e);return Ce(t,n,D.spotUrl)}async function Et(t,e){let n=await Te(t,e);return Re(t,n,D.consUrl)}async function Ut(t,e,n={}){let s=await Te(t,e);return be(t,s,D.klineUrl,n)}async function Bt(t,e,n={}){let s=await Te(t,e);return Se(t,s,D.klineUrl,D.trendsUrl,n)}var q={type:"concept",fsFilter:"m:90 t:3 f:!50",listUrl:je,spotUrl:Qe,consUrl:Fe,klineUrl:$e,trendsUrl:We,errorPrefix:"\u672A\u627E\u5230\u6982\u5FF5\u677F\u5757"},rn=he(q);async function Ke(t,e){return rn.getCode(t,e,lt)}async function lt(t){return ye(t,q)}async function Pt(t,e){let n=await Ke(t,e);return Ce(t,n,q.spotUrl)}async function kt(t,e){let n=await Ke(t,e);return Re(t,n,q.consUrl)}async function Dt(t,e,n={}){let s=await Ke(t,e);return be(t,s,q.klineUrl,n)}async function qt(t,e,n={}){let s=await Ke(t,e);return Se(t,s,q.klineUrl,q.trendsUrl,n)}function Y(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function E(t,e){let n=[];for(let s=0;s<t.length;s++){if(s<e-1){n.push(null);continue}let r=0,o=0;for(let i=s-e+1;i<=s;i++)t[i]!==null&&(r+=t[i],o++);n.push(o===e?Y(r/e):null)}return n}function U(t,e){let n=[],s=2/(e+1),r=null,o=!1;for(let i=0;i<t.length;i++){if(i<e-1){n.push(null);continue}if(!o){let l=0,u=0;for(let c=i-e+1;c<=i;c++)t[c]!==null&&(l+=t[c],u++);u===e&&(r=l/e,o=!0),n.push(r!==null?Y(r):null);continue}let a=t[i];a===null?n.push(r!==null?Y(r):null):(r=s*a+(1-s)*r,n.push(Y(r)))}return n}function Me(t,e){let n=[],s=Array.from({length:e},(o,i)=>i+1),r=s.reduce((o,i)=>o+i,0);for(let o=0;o<t.length;o++){if(o<e-1){n.push(null);continue}let i=0,a=!0;for(let l=0;l<e;l++){let u=t[o-e+1+l];if(u===null){a=!1;break}i+=u*s[l]}n.push(a?Y(i/r):null)}return n}function J(t,e={}){let{periods:n=[5,10,20,30,60,120,250],type:s="sma"}=e,r=s==="ema"?U:s==="wma"?Me:E,o={};for(let i of n)o[`ma${i}`]=r(t,i);return t.map((i,a)=>{let l={};for(let u of n)l[`ma${u}`]=o[`ma${u}`][a];return l})}function Ht(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function X(t,e={}){let{short:n=12,long:s=26,signal:r=9}=e,o=U(t,n),i=U(t,s),a=t.map((u,c)=>o[c]===null||i[c]===null?null:o[c]-i[c]),l=U(a,r);return t.map((u,c)=>({dif:a[c]!==null?Ht(a[c]):null,dea:l[c],macd:a[c]!==null&&l[c]!==null?Ht((a[c]-l[c])*2):null}))}function ut(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function on(t,e,n){let s=[];for(let r=0;r<t.length;r++){if(r<e-1||n[r]===null){s.push(null);continue}let o=0,i=0;for(let a=r-e+1;a<=r;a++)t[a]!==null&&n[r]!==null&&(o+=Math.pow(t[a]-n[r],2),i++);s.push(i===e?Math.sqrt(o/e):null)}return s}function Z(t,e={}){let{period:n=20,stdDev:s=2}=e,r=E(t,n),o=on(t,n,r);return t.map((i,a)=>{if(r[a]===null||o[a]===null)return{mid:null,upper:null,lower:null,bandwidth:null};let l=r[a]+s*o[a],u=r[a]-s*o[a],c=r[a]!==0?ut((l-u)/r[a]*100):null;return{mid:r[a],upper:ut(l),lower:ut(u),bandwidth:c}})}function ct(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function ee(t,e={}){let{period:n=9,kPeriod:s=3,dPeriod:r=3}=e,o=[],i=50,a=50;for(let l=0;l<t.length;l++){if(l<n-1){o.push({k:null,d:null,j:null});continue}let u=-1/0,c=1/0,p=!0;for(let C=l-n+1;C<=l;C++){if(t[C].high===null||t[C].low===null){p=!1;break}u=Math.max(u,t[C].high),c=Math.min(c,t[C].low)}let d=t[l].close;if(!p||d===null||u===c){o.push({k:null,d:null,j:null});continue}let m=(d-c)/(u-c)*100;i=(s-1)/s*i+1/s*m,a=(r-1)/r*a+1/r*i;let h=3*i-2*a;o.push({k:ct(i),d:ct(a),j:ct(h)})}return o}function sn(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function te(t,e={}){let{periods:n=[6,12,24]}=e,s=[null];for(let o=1;o<t.length;o++)t[o]===null||t[o-1]===null?s.push(null):s.push(t[o]-t[o-1]);let r={};for(let o of n){let i=[],a=0,l=0;for(let u=0;u<t.length;u++){if(u<o){i.push(null),s[u]!==null&&(s[u]>0?a+=s[u]:l+=Math.abs(s[u]));continue}if(u===o)a=a/o,l=l/o;else{let c=s[u]??0,p=c>0?c:0,d=c<0?Math.abs(c):0;a=(a*(o-1)+p)/o,l=(l*(o-1)+d)/o}if(l===0)i.push(100);else if(a===0)i.push(0);else{let c=a/l;i.push(sn(100-100/(1+c)))}}r[`rsi${o}`]=i}return t.map((o,i)=>{let a={};for(let l of n)a[`rsi${l}`]=r[`rsi${l}`][i];return a})}function an(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function ne(t,e={}){let{periods:n=[6,10]}=e,s={};for(let r of n){let o=[];for(let i=0;i<t.length;i++){if(i<r-1){o.push(null);continue}let a=-1/0,l=1/0,u=!0;for(let d=i-r+1;d<=i;d++){if(t[d].high===null||t[d].low===null){u=!1;break}a=Math.max(a,t[d].high),l=Math.min(l,t[d].low)}let c=t[i].close;if(!u||c===null||a===l){o.push(null);continue}let p=(a-c)/(a-l)*100;o.push(an(p))}s[`wr${r}`]=o}return t.map((r,o)=>{let i={};for(let a of n)i[`wr${a}`]=s[`wr${a}`][o];return i})}function ln(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function re(t,e={}){let{periods:n=[6,12,24]}=e,s={};for(let r of n){let o=E(t,r),i=[];for(let a=0;a<t.length;a++)if(t[a]===null||o[a]===null||o[a]===0)i.push(null);else{let l=(t[a]-o[a])/o[a]*100;i.push(ln(l))}s[`bias${r}`]=i}return t.map((r,o)=>{let i={};for(let a of n)i[`bias${a}`]=s[`bias${a}`][o];return i})}function un(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function oe(t,e={}){let{period:n=14}=e,s=[],r=t.map(o=>o.high===null||o.low===null||o.close===null?null:(o.high+o.low+o.close)/3);for(let o=0;o<t.length;o++){if(o<n-1){s.push({cci:null});continue}let i=0,a=0;for(let p=o-n+1;p<=o;p++)r[p]!==null&&(i+=r[p],a++);if(a!==n||r[o]===null){s.push({cci:null});continue}let l=i/n,u=0;for(let p=o-n+1;p<=o;p++)u+=Math.abs(r[p]-l);let c=u/n;if(c===0)s.push({cci:0});else{let p=(r[o]-l)/(.015*c);s.push({cci:un(p)})}}return s}function pt(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function se(t,e={}){let{period:n=14}=e,s=[],r=[];for(let i=0;i<t.length;i++){let{high:a,low:l,close:u}=t[i];if(a===null||l===null||u===null){r.push(null);continue}if(i===0)r.push(a-l);else{let c=t[i-1].close;if(c===null)r.push(a-l);else{let p=a-l,d=Math.abs(a-c),m=Math.abs(l-c);r.push(Math.max(p,d,m))}}}let o=null;for(let i=0;i<t.length;i++){if(i<n-1){s.push({tr:r[i]!==null?pt(r[i]):null,atr:null});continue}if(i===n-1){let a=0,l=0;for(let u=0;u<n;u++)r[u]!==null&&(a+=r[u],l++);l===n&&(o=a/n)}else o!==null&&r[i]!==null&&(o=(o*(n-1)+r[i])/n);s.push({tr:r[i]!==null?pt(r[i]):null,atr:o!==null?pt(o):null})}return s}function ie(t,e={}){if(t.length===0)return[];let n=t.map(m=>m.close),s=t.map(m=>({open:m.open,high:m.high,low:m.low,close:m.close,volume:m.volume})),r=e.ma?J(n,typeof e.ma=="object"?e.ma:{}):null,o=e.macd?X(n,typeof e.macd=="object"?e.macd:{}):null,i=e.boll?Z(n,typeof e.boll=="object"?e.boll:{}):null,a=e.kdj?ee(s,typeof e.kdj=="object"?e.kdj:{}):null,l=e.rsi?te(n,typeof e.rsi=="object"?e.rsi:{}):null,u=e.wr?ne(s,typeof e.wr=="object"?e.wr:{}):null,c=e.bias?re(n,typeof e.bias=="object"?e.bias:{}):null,p=e.cci?oe(s,typeof e.cci=="object"?e.cci:{}):null,d=e.atr?se(s,typeof e.atr=="object"?e.atr:{}):null;return t.map((m,h)=>({...m,...r&&{ma:r[h]},...o&&{macd:o[h]},...i&&{boll:i[h]},...a&&{kdj:a[h]},...l&&{rsi:l[h]},...u&&{wr:u[h]},...c&&{bias:c[h]},...p&&{cci:p[h]},...d&&{atr:d[h]}}))}var ae=class{constructor(e={}){this.client=new W(e)}getFullQuotes(e){return b.getFullQuotes(this.client,e)}getSimpleQuotes(e){return b.getSimpleQuotes(this.client,e)}getHKQuotes(e){return b.getHKQuotes(this.client,e)}getUSQuotes(e){return b.getUSQuotes(this.client,e)}getFundQuotes(e){return b.getFundQuotes(this.client,e)}getFundFlow(e){return b.getFundFlow(this.client,e)}getPanelLargeOrder(e){return b.getPanelLargeOrder(this.client,e)}getTodayTimeline(e){return b.getTodayTimeline(this.client,e)}getIndustryList(){return S.getIndustryList(this.client)}getIndustrySpot(e){return S.getIndustrySpot(this.client,e)}getIndustryConstituents(e){return S.getIndustryConstituents(this.client,e)}getIndustryKline(e,n){return S.getIndustryKline(this.client,e,n)}getIndustryMinuteKline(e,n){return S.getIndustryMinuteKline(this.client,e,n)}getConceptList(){return S.getConceptList(this.client)}getConceptSpot(e){return S.getConceptSpot(this.client,e)}getConceptConstituents(e){return S.getConceptConstituents(this.client,e)}getConceptKline(e,n){return S.getConceptKline(this.client,e,n)}getConceptMinuteKline(e,n){return S.getConceptMinuteKline(this.client,e,n)}getHistoryKline(e,n){return S.getHistoryKline(this.client,e,n)}getMinuteKline(e,n){return S.getMinuteKline(this.client,e,n)}getHKHistoryKline(e,n){return S.getHKHistoryKline(this.client,e,n)}getUSHistoryKline(e,n){return S.getUSHistoryKline(this.client,e,n)}search(e){return b.search(this.client,e)}getAShareCodeList(e=!0){return b.getAShareCodeList(this.client,e)}getUSCodeList(e=!0){return b.getUSCodeList(this.client,e)}getHKCodeList(){return b.getHKCodeList(this.client)}async getAllAShareQuotes(e={}){let n=await this.getAShareCodeList();return this.getAllQuotesByCodes(n,e)}async getAllHKShareQuotes(e={}){let n=await this.getHKCodeList();return b.getAllHKQuotesByCodes(this.client,n,e)}async getAllUSShareQuotes(e={}){let n=await this.getUSCodeList(!1);return b.getAllUSQuotesByCodes(this.client,n,e)}getAllQuotesByCodes(e,n={}){return b.getAllQuotesByCodes(this.client,e,n)}async batchRaw(e){return this.client.getTencentQuote(e)}getTradingCalendar(){return b.getTradingCalendar(this.client)}detectMarket(e){return/^\d{3}\.[A-Z]+$/i.test(e)?"US":/^\d{5}$/.test(e)?"HK":"A"}safeMax(e,n=0){return!e||e.length===0?n:Math.max(...e)}calcRequiredLookback(e){let n=0,s=!1;if(e.ma){let o=typeof e.ma=="object"?e.ma:{},i=o.periods??[5,10,20,30,60,120,250],a=o.type??"sma";n=Math.max(n,this.safeMax(i,20)),a==="ema"&&(s=!0)}if(e.macd){let o=typeof e.macd=="object"?e.macd:{},i=o.long??26,a=o.signal??9;n=Math.max(n,i*3+a),s=!0}if(e.boll){let o=typeof e.boll=="object"&&e.boll.period?e.boll.period:20;n=Math.max(n,o)}if(e.kdj){let o=typeof e.kdj=="object"&&e.kdj.period?e.kdj.period:9;n=Math.max(n,o)}if(e.rsi){let o=typeof e.rsi=="object"&&e.rsi.periods?e.rsi.periods:[6,12,24];n=Math.max(n,this.safeMax(o,14)+1)}if(e.wr){let o=typeof e.wr=="object"&&e.wr.periods?e.wr.periods:[6,10];n=Math.max(n,this.safeMax(o,10))}if(e.bias){let o=typeof e.bias=="object"&&e.bias.periods?e.bias.periods:[6,12,24];n=Math.max(n,this.safeMax(o,12))}if(e.cci){let o=typeof e.cci=="object"&&e.cci.period?e.cci.period:14;n=Math.max(n,o)}if(e.atr){let o=typeof e.atr=="object"&&e.atr.period?e.atr.period:14;n=Math.max(n,o)}return Math.ceil(n*(s?1.5:1.2))}calcActualStartDate(e,n,s=1.5){let r=Math.ceil(n*s),o=new Date(parseInt(e.slice(0,4)),parseInt(e.slice(4,6))-1,parseInt(e.slice(6,8)));o.setDate(o.getDate()-r);let i=o.getFullYear(),a=String(o.getMonth()+1).padStart(2,"0"),l=String(o.getDate()).padStart(2,"0");return`${i}${a}${l}`}calcActualStartDateByCalendar(e,n,s){if(!s||s.length===0)return;let r=this.normalizeDate(e),o=s.findIndex(a=>a>=r);o===-1&&(o=s.length-1);let i=Math.max(0,o-n);return this.toCompactDate(s[i])}normalizeDate(e){return e.includes("-")?e:e.length===8?`${e.slice(0,4)}-${e.slice(4,6)}-${e.slice(6,8)}`:e}toCompactDate(e){return e.replace(/-/g,"")}dateToTimestamp(e){let n=e.includes("-")?e:`${e.slice(0,4)}-${e.slice(4,6)}-${e.slice(6,8)}`;return new Date(n).getTime()}async getKlineWithIndicators(e,n={}){let{startDate:s,endDate:r,indicators:o={}}=n,i=n.market??this.detectMarket(e),a=this.calcRequiredLookback(o),l={A:1.5,HK:1.46,US:1.45},u;if(s)if(i==="A")try{let m=await b.getTradingCalendar(this.client);u=this.calcActualStartDateByCalendar(s,a,m)??this.calcActualStartDate(s,a,l[i])}catch{u=this.calcActualStartDate(s,a,l[i])}else u=this.calcActualStartDate(s,a,l[i]);let c={period:n.period,adjust:n.adjust,startDate:u,endDate:n.endDate},p;switch(i){case"HK":p=await this.getHKHistoryKline(e,c);break;case"US":p=await this.getUSHistoryKline(e,c);break;default:p=await this.getHistoryKline(e,c)}if(s&&p.length<a)switch(i){case"HK":p=await this.getHKHistoryKline(e,{...c,startDate:void 0});break;case"US":p=await this.getUSHistoryKline(e,{...c,startDate:void 0});break;default:p=await this.getHistoryKline(e,{...c,startDate:void 0})}let d=ie(p,o);if(s){let m=this.dateToTimestamp(s),h=r?this.dateToTimestamp(r):1/0;return d.filter(C=>{let T=this.dateToTimestamp(C.date);return T>=m&&T<=h})}return d}},Nt=ae;0&&(module.exports={HttpError,StockSDK,addIndicators,asyncPool,calcATR,calcBIAS,calcBOLL,calcCCI,calcEMA,calcKDJ,calcMA,calcMACD,calcRSI,calcSMA,calcWMA,calcWR,chunkArray,decodeGBK,parseResponse,safeNumber,safeNumberOrNull});
|
package/dist/index.d.cts
CHANGED
|
@@ -1,6 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP 错误类
|
|
3
|
+
*/
|
|
4
|
+
declare class HttpError extends Error {
|
|
5
|
+
readonly status: number;
|
|
6
|
+
readonly statusText: string;
|
|
7
|
+
readonly url?: string | undefined;
|
|
8
|
+
readonly provider?: string | undefined;
|
|
9
|
+
constructor(status: number, statusText: string, url?: string | undefined, provider?: string | undefined);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* 重试配置选项
|
|
13
|
+
*/
|
|
14
|
+
interface RetryOptions {
|
|
15
|
+
/** 最大重试次数,默认 3 */
|
|
16
|
+
maxRetries?: number;
|
|
17
|
+
/** 初始退避时间(毫秒),默认 1000 */
|
|
18
|
+
baseDelay?: number;
|
|
19
|
+
/** 最大退避时间(毫秒),默认 30000 */
|
|
20
|
+
maxDelay?: number;
|
|
21
|
+
/** 退避系数,默认 2 */
|
|
22
|
+
backoffMultiplier?: number;
|
|
23
|
+
/** 可重试的 HTTP 状态码,默认 [408, 429, 500, 502, 503, 504] */
|
|
24
|
+
retryableStatusCodes?: number[];
|
|
25
|
+
/** 是否在网络错误时重试,默认 true */
|
|
26
|
+
retryOnNetworkError?: boolean;
|
|
27
|
+
/** 是否在超时时重试,默认 true */
|
|
28
|
+
retryOnTimeout?: boolean;
|
|
29
|
+
/** 重试回调(用于日志等) */
|
|
30
|
+
onRetry?: (attempt: number, error: Error, delay: number) => void;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 请求客户端配置选项
|
|
34
|
+
*/
|
|
1
35
|
interface RequestClientOptions {
|
|
2
36
|
baseUrl?: string;
|
|
3
37
|
timeout?: number;
|
|
38
|
+
retry?: RetryOptions;
|
|
39
|
+
/** 自定义请求头 */
|
|
40
|
+
headers?: Record<string, string>;
|
|
41
|
+
/** 自定义 User-Agent(浏览器环境可能会被忽略) */
|
|
42
|
+
userAgent?: string;
|
|
4
43
|
}
|
|
5
44
|
|
|
6
45
|
/**
|
|
@@ -671,10 +710,14 @@ interface USKlineOptions {
|
|
|
671
710
|
}
|
|
672
711
|
|
|
673
712
|
/**
|
|
674
|
-
* 东方财富 -
|
|
713
|
+
* 东方财富 - 板块通用逻辑
|
|
714
|
+
* 提取行业板块和概念板块的共享代码
|
|
675
715
|
*/
|
|
676
716
|
|
|
677
|
-
|
|
717
|
+
/**
|
|
718
|
+
* K 线选项
|
|
719
|
+
*/
|
|
720
|
+
interface BoardKlineOptions {
|
|
678
721
|
/** K 线周期 */
|
|
679
722
|
period?: 'daily' | 'weekly' | 'monthly';
|
|
680
723
|
/** 复权类型 */
|
|
@@ -684,29 +727,27 @@ interface IndustryBoardKlineOptions {
|
|
|
684
727
|
/** 结束日期 YYYYMMDD */
|
|
685
728
|
endDate?: string;
|
|
686
729
|
}
|
|
687
|
-
|
|
730
|
+
/**
|
|
731
|
+
* 分钟 K 线选项
|
|
732
|
+
*/
|
|
733
|
+
interface BoardMinuteKlineOptions {
|
|
688
734
|
/** K 线周期:1/5/15/30/60 分钟 */
|
|
689
735
|
period?: '1' | '5' | '15' | '30' | '60';
|
|
690
736
|
}
|
|
691
737
|
|
|
738
|
+
/**
|
|
739
|
+
* 东方财富 - 行业板块
|
|
740
|
+
*/
|
|
741
|
+
|
|
742
|
+
type IndustryBoardKlineOptions = BoardKlineOptions;
|
|
743
|
+
type IndustryBoardMinuteKlineOptions = BoardMinuteKlineOptions;
|
|
744
|
+
|
|
692
745
|
/**
|
|
693
746
|
* 东方财富 - 概念板块
|
|
694
747
|
*/
|
|
695
748
|
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
period?: 'daily' | 'weekly' | 'monthly';
|
|
699
|
-
/** 复权类型 */
|
|
700
|
-
adjust?: '' | 'qfq' | 'hfq';
|
|
701
|
-
/** 开始日期 YYYYMMDD */
|
|
702
|
-
startDate?: string;
|
|
703
|
-
/** 结束日期 YYYYMMDD */
|
|
704
|
-
endDate?: string;
|
|
705
|
-
}
|
|
706
|
-
interface ConceptBoardMinuteKlineOptions {
|
|
707
|
-
/** K 线周期:1/5/15/30/60 分钟 */
|
|
708
|
-
period?: '1' | '5' | '15' | '30' | '60';
|
|
709
|
-
}
|
|
749
|
+
type ConceptBoardKlineOptions = BoardKlineOptions;
|
|
750
|
+
type ConceptBoardMinuteKlineOptions = BoardMinuteKlineOptions;
|
|
710
751
|
|
|
711
752
|
interface OHLCV {
|
|
712
753
|
open: number | null;
|
|
@@ -1113,6 +1154,18 @@ declare class StockSDK {
|
|
|
1113
1154
|
* 计算实际请求的开始日期
|
|
1114
1155
|
*/
|
|
1115
1156
|
private calcActualStartDate;
|
|
1157
|
+
/**
|
|
1158
|
+
* 计算实际请求的开始日期(交易日历)
|
|
1159
|
+
*/
|
|
1160
|
+
private calcActualStartDateByCalendar;
|
|
1161
|
+
/**
|
|
1162
|
+
* 统一日期格式为 YYYY-MM-DD
|
|
1163
|
+
*/
|
|
1164
|
+
private normalizeDate;
|
|
1165
|
+
/**
|
|
1166
|
+
* 压缩日期格式为 YYYYMMDD
|
|
1167
|
+
*/
|
|
1168
|
+
private toCompactDate;
|
|
1116
1169
|
/**
|
|
1117
1170
|
* 日期字符串转时间戳
|
|
1118
1171
|
*/
|
|
@@ -1136,4 +1189,4 @@ declare class StockSDK {
|
|
|
1136
1189
|
}): Promise<KlineWithIndicators<HistoryKline | HKUSHistoryKline>[]>;
|
|
1137
1190
|
}
|
|
1138
1191
|
|
|
1139
|
-
export { type ATROptions, type BIASOptions, type BOLLOptions, type CCIOptions, type ConceptBoard, type ConceptBoardConstituent, type ConceptBoardKline, type ConceptBoardKlineOptions, type ConceptBoardMinuteKline, type ConceptBoardMinuteKlineOptions, type ConceptBoardMinuteTimeline, type ConceptBoardSpot, type FullQuote, type FundFlow, type FundQuote, type GetAllAShareQuotesOptions, type HKQuote, type HKUSHistoryKline, type HistoryKline, type IndicatorOptions, type IndustryBoard, type IndustryBoardConstituent, type IndustryBoardKline, type IndustryBoardKlineOptions, type IndustryBoardMinuteKline, type IndustryBoardMinuteKlineOptions, type IndustryBoardMinuteTimeline, type IndustryBoardSpot, type KDJOptions, type KlineWithIndicators, type MACDOptions, type MAOptions, type MarketType, type MinuteKline, type MinuteTimeline, type PanelLargeOrder, type RSIOptions, type SearchResult, type SimpleQuote, StockSDK, type TodayTimeline, type TodayTimelineResponse, type USQuote, type WROptions, addIndicators, asyncPool, calcATR, calcBIAS, calcBOLL, calcCCI, calcEMA, calcKDJ, calcMA, calcMACD, calcRSI, calcSMA, calcWMA, calcWR, chunkArray, decodeGBK, StockSDK as default, parseResponse, safeNumber, safeNumberOrNull };
|
|
1192
|
+
export { type ATROptions, type BIASOptions, type BOLLOptions, type CCIOptions, type ConceptBoard, type ConceptBoardConstituent, type ConceptBoardKline, type ConceptBoardKlineOptions, type ConceptBoardMinuteKline, type ConceptBoardMinuteKlineOptions, type ConceptBoardMinuteTimeline, type ConceptBoardSpot, type FullQuote, type FundFlow, type FundQuote, type GetAllAShareQuotesOptions, type HKQuote, type HKUSHistoryKline, type HistoryKline, HttpError, type IndicatorOptions, type IndustryBoard, type IndustryBoardConstituent, type IndustryBoardKline, type IndustryBoardKlineOptions, type IndustryBoardMinuteKline, type IndustryBoardMinuteKlineOptions, type IndustryBoardMinuteTimeline, type IndustryBoardSpot, type KDJOptions, type KlineWithIndicators, type MACDOptions, type MAOptions, type MarketType, type MinuteKline, type MinuteTimeline, type PanelLargeOrder, type RSIOptions, type RequestClientOptions, type RetryOptions, type SearchResult, type SimpleQuote, StockSDK, type TodayTimeline, type TodayTimelineResponse, type USQuote, type WROptions, addIndicators, asyncPool, calcATR, calcBIAS, calcBOLL, calcCCI, calcEMA, calcKDJ, calcMA, calcMACD, calcRSI, calcSMA, calcWMA, calcWR, chunkArray, decodeGBK, StockSDK as default, parseResponse, safeNumber, safeNumberOrNull };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP 错误类
|
|
3
|
+
*/
|
|
4
|
+
declare class HttpError extends Error {
|
|
5
|
+
readonly status: number;
|
|
6
|
+
readonly statusText: string;
|
|
7
|
+
readonly url?: string | undefined;
|
|
8
|
+
readonly provider?: string | undefined;
|
|
9
|
+
constructor(status: number, statusText: string, url?: string | undefined, provider?: string | undefined);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* 重试配置选项
|
|
13
|
+
*/
|
|
14
|
+
interface RetryOptions {
|
|
15
|
+
/** 最大重试次数,默认 3 */
|
|
16
|
+
maxRetries?: number;
|
|
17
|
+
/** 初始退避时间(毫秒),默认 1000 */
|
|
18
|
+
baseDelay?: number;
|
|
19
|
+
/** 最大退避时间(毫秒),默认 30000 */
|
|
20
|
+
maxDelay?: number;
|
|
21
|
+
/** 退避系数,默认 2 */
|
|
22
|
+
backoffMultiplier?: number;
|
|
23
|
+
/** 可重试的 HTTP 状态码,默认 [408, 429, 500, 502, 503, 504] */
|
|
24
|
+
retryableStatusCodes?: number[];
|
|
25
|
+
/** 是否在网络错误时重试,默认 true */
|
|
26
|
+
retryOnNetworkError?: boolean;
|
|
27
|
+
/** 是否在超时时重试,默认 true */
|
|
28
|
+
retryOnTimeout?: boolean;
|
|
29
|
+
/** 重试回调(用于日志等) */
|
|
30
|
+
onRetry?: (attempt: number, error: Error, delay: number) => void;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 请求客户端配置选项
|
|
34
|
+
*/
|
|
1
35
|
interface RequestClientOptions {
|
|
2
36
|
baseUrl?: string;
|
|
3
37
|
timeout?: number;
|
|
38
|
+
retry?: RetryOptions;
|
|
39
|
+
/** 自定义请求头 */
|
|
40
|
+
headers?: Record<string, string>;
|
|
41
|
+
/** 自定义 User-Agent(浏览器环境可能会被忽略) */
|
|
42
|
+
userAgent?: string;
|
|
4
43
|
}
|
|
5
44
|
|
|
6
45
|
/**
|
|
@@ -671,10 +710,14 @@ interface USKlineOptions {
|
|
|
671
710
|
}
|
|
672
711
|
|
|
673
712
|
/**
|
|
674
|
-
* 东方财富 -
|
|
713
|
+
* 东方财富 - 板块通用逻辑
|
|
714
|
+
* 提取行业板块和概念板块的共享代码
|
|
675
715
|
*/
|
|
676
716
|
|
|
677
|
-
|
|
717
|
+
/**
|
|
718
|
+
* K 线选项
|
|
719
|
+
*/
|
|
720
|
+
interface BoardKlineOptions {
|
|
678
721
|
/** K 线周期 */
|
|
679
722
|
period?: 'daily' | 'weekly' | 'monthly';
|
|
680
723
|
/** 复权类型 */
|
|
@@ -684,29 +727,27 @@ interface IndustryBoardKlineOptions {
|
|
|
684
727
|
/** 结束日期 YYYYMMDD */
|
|
685
728
|
endDate?: string;
|
|
686
729
|
}
|
|
687
|
-
|
|
730
|
+
/**
|
|
731
|
+
* 分钟 K 线选项
|
|
732
|
+
*/
|
|
733
|
+
interface BoardMinuteKlineOptions {
|
|
688
734
|
/** K 线周期:1/5/15/30/60 分钟 */
|
|
689
735
|
period?: '1' | '5' | '15' | '30' | '60';
|
|
690
736
|
}
|
|
691
737
|
|
|
738
|
+
/**
|
|
739
|
+
* 东方财富 - 行业板块
|
|
740
|
+
*/
|
|
741
|
+
|
|
742
|
+
type IndustryBoardKlineOptions = BoardKlineOptions;
|
|
743
|
+
type IndustryBoardMinuteKlineOptions = BoardMinuteKlineOptions;
|
|
744
|
+
|
|
692
745
|
/**
|
|
693
746
|
* 东方财富 - 概念板块
|
|
694
747
|
*/
|
|
695
748
|
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
period?: 'daily' | 'weekly' | 'monthly';
|
|
699
|
-
/** 复权类型 */
|
|
700
|
-
adjust?: '' | 'qfq' | 'hfq';
|
|
701
|
-
/** 开始日期 YYYYMMDD */
|
|
702
|
-
startDate?: string;
|
|
703
|
-
/** 结束日期 YYYYMMDD */
|
|
704
|
-
endDate?: string;
|
|
705
|
-
}
|
|
706
|
-
interface ConceptBoardMinuteKlineOptions {
|
|
707
|
-
/** K 线周期:1/5/15/30/60 分钟 */
|
|
708
|
-
period?: '1' | '5' | '15' | '30' | '60';
|
|
709
|
-
}
|
|
749
|
+
type ConceptBoardKlineOptions = BoardKlineOptions;
|
|
750
|
+
type ConceptBoardMinuteKlineOptions = BoardMinuteKlineOptions;
|
|
710
751
|
|
|
711
752
|
interface OHLCV {
|
|
712
753
|
open: number | null;
|
|
@@ -1113,6 +1154,18 @@ declare class StockSDK {
|
|
|
1113
1154
|
* 计算实际请求的开始日期
|
|
1114
1155
|
*/
|
|
1115
1156
|
private calcActualStartDate;
|
|
1157
|
+
/**
|
|
1158
|
+
* 计算实际请求的开始日期(交易日历)
|
|
1159
|
+
*/
|
|
1160
|
+
private calcActualStartDateByCalendar;
|
|
1161
|
+
/**
|
|
1162
|
+
* 统一日期格式为 YYYY-MM-DD
|
|
1163
|
+
*/
|
|
1164
|
+
private normalizeDate;
|
|
1165
|
+
/**
|
|
1166
|
+
* 压缩日期格式为 YYYYMMDD
|
|
1167
|
+
*/
|
|
1168
|
+
private toCompactDate;
|
|
1116
1169
|
/**
|
|
1117
1170
|
* 日期字符串转时间戳
|
|
1118
1171
|
*/
|
|
@@ -1136,4 +1189,4 @@ declare class StockSDK {
|
|
|
1136
1189
|
}): Promise<KlineWithIndicators<HistoryKline | HKUSHistoryKline>[]>;
|
|
1137
1190
|
}
|
|
1138
1191
|
|
|
1139
|
-
export { type ATROptions, type BIASOptions, type BOLLOptions, type CCIOptions, type ConceptBoard, type ConceptBoardConstituent, type ConceptBoardKline, type ConceptBoardKlineOptions, type ConceptBoardMinuteKline, type ConceptBoardMinuteKlineOptions, type ConceptBoardMinuteTimeline, type ConceptBoardSpot, type FullQuote, type FundFlow, type FundQuote, type GetAllAShareQuotesOptions, type HKQuote, type HKUSHistoryKline, type HistoryKline, type IndicatorOptions, type IndustryBoard, type IndustryBoardConstituent, type IndustryBoardKline, type IndustryBoardKlineOptions, type IndustryBoardMinuteKline, type IndustryBoardMinuteKlineOptions, type IndustryBoardMinuteTimeline, type IndustryBoardSpot, type KDJOptions, type KlineWithIndicators, type MACDOptions, type MAOptions, type MarketType, type MinuteKline, type MinuteTimeline, type PanelLargeOrder, type RSIOptions, type SearchResult, type SimpleQuote, StockSDK, type TodayTimeline, type TodayTimelineResponse, type USQuote, type WROptions, addIndicators, asyncPool, calcATR, calcBIAS, calcBOLL, calcCCI, calcEMA, calcKDJ, calcMA, calcMACD, calcRSI, calcSMA, calcWMA, calcWR, chunkArray, decodeGBK, StockSDK as default, parseResponse, safeNumber, safeNumberOrNull };
|
|
1192
|
+
export { type ATROptions, type BIASOptions, type BOLLOptions, type CCIOptions, type ConceptBoard, type ConceptBoardConstituent, type ConceptBoardKline, type ConceptBoardKlineOptions, type ConceptBoardMinuteKline, type ConceptBoardMinuteKlineOptions, type ConceptBoardMinuteTimeline, type ConceptBoardSpot, type FullQuote, type FundFlow, type FundQuote, type GetAllAShareQuotesOptions, type HKQuote, type HKUSHistoryKline, type HistoryKline, HttpError, type IndicatorOptions, type IndustryBoard, type IndustryBoardConstituent, type IndustryBoardKline, type IndustryBoardKlineOptions, type IndustryBoardMinuteKline, type IndustryBoardMinuteKlineOptions, type IndustryBoardMinuteTimeline, type IndustryBoardSpot, type KDJOptions, type KlineWithIndicators, type MACDOptions, type MAOptions, type MarketType, type MinuteKline, type MinuteTimeline, type PanelLargeOrder, type RSIOptions, type RequestClientOptions, type RetryOptions, type SearchResult, type SimpleQuote, StockSDK, type TodayTimeline, type TodayTimelineResponse, type USQuote, type WROptions, addIndicators, asyncPool, calcATR, calcBIAS, calcBOLL, calcCCI, calcEMA, calcKDJ, calcMA, calcMACD, calcRSI, calcSMA, calcWMA, calcWR, chunkArray, decodeGBK, StockSDK as default, parseResponse, safeNumber, safeNumberOrNull };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var Ke=Object.defineProperty;var Vt=(t,e)=>{for(var r in e)Ke(t,r,{get:e[r],enumerable:!0})};function z(t){return new TextDecoder("gbk").decode(t)}function V(t){let e=t.split(";").map(s=>s.trim()).filter(Boolean),r=[];for(let s of e){let n=s.indexOf("=");if(n<0)continue;let o=s.slice(0,n).trim();o.startsWith("v_")&&(o=o.slice(2));let i=s.slice(n+1).trim();i.startsWith('"')&&i.endsWith('"')&&(i=i.slice(1,-1));let a=i.split("~");r.push({key:o,fields:a})}return r}function g(t){if(!t||t==="")return 0;let e=parseFloat(t);return Number.isNaN(e)?0:e}function R(t){if(!t||t==="")return null;let e=parseFloat(t);return Number.isNaN(e)?null:e}function u(t){if(!t||t===""||t==="-")return null;let e=parseFloat(t);return Number.isNaN(e)?null:e}var ht="https://qt.gtimg.cn",yt="https://web.ifzq.gtimg.cn/appstock/app/minute/query",Ct="https://assets.linkdiary.cn/shares/zh_a_list.json",Rt="https://assets.linkdiary.cn/shares/us_list.json",St="https://assets.linkdiary.cn/shares/hk_list.json",Gt="https://assets.linkdiary.cn/shares/trade-data-list.txt";var G="https://push2his.eastmoney.com/api/qt/stock/kline/get",bt="https://push2his.eastmoney.com/api/qt/stock/trends2/get",wt="https://33.push2his.eastmoney.com/api/qt/stock/kline/get",Tt="https://63.push2his.eastmoney.com/api/qt/stock/kline/get",Mt="https://17.push2.eastmoney.com/api/qt/clist/get",Kt="https://91.push2.eastmoney.com/api/qt/stock/get",At="https://29.push2.eastmoney.com/api/qt/clist/get",J="https://7.push2his.eastmoney.com/api/qt/stock/kline/get",Pt="https://push2his.eastmoney.com/api/qt/stock/trends2/get",_t="https://79.push2.eastmoney.com/api/qt/clist/get",Lt="https://91.push2.eastmoney.com/api/qt/stock/get",kt="https://29.push2.eastmoney.com/api/qt/clist/get",Z="https://91.push2his.eastmoney.com/api/qt/stock/kline/get",It="https://push2his.eastmoney.com/api/qt/stock/trends2/get",xt=3e4,D=500,Q=500,$=7;var F=class{constructor(e={}){this.baseUrl=e.baseUrl??ht,this.timeout=e.timeout??xt}getTimeout(){return this.timeout}async get(e,r={}){let s=new AbortController,n=setTimeout(()=>s.abort(),this.timeout);try{let o=await fetch(e,{signal:s.signal});if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);switch(r.responseType){case"json":return await o.json();case"arraybuffer":return await o.arrayBuffer();default:return await o.text()}}finally{clearTimeout(n)}}async getTencentQuote(e){let r=`${this.baseUrl}/?q=${encodeURIComponent(e)}`,s=await this.get(r,{responseType:"arraybuffer"}),n=z(s);return V(n)}};var Ae=new Set(["daily","weekly","monthly"]),Pe=new Set(["1","5","15","30","60"]),_e=new Set(["","qfq","hfq"]);function E(t,e){if(!Number.isFinite(t)||!Number.isInteger(t)||t<=0)throw new RangeError(`${e} must be a positive integer`)}function U(t){if(!Ae.has(t))throw new RangeError("period must be one of: daily, weekly, monthly")}function q(t){if(!Pe.has(t))throw new RangeError("period must be one of: 1, 5, 15, 30, 60")}function I(t){if(!_e.has(t))throw new RangeError("adjust must be one of: '', 'qfq', 'hfq'")}function H(t,e){E(e,"chunkSize");let r=[];for(let s=0;s<t.length;s+=e)r.push(t.slice(s,s+e));return r}async function N(t,e){E(e,"concurrency");let r=[],s=[];for(let n of t){let o=Promise.resolve().then(()=>n()).then(i=>{r.push(i)});if(s.push(o),s.length>=e){await Promise.race(s);for(let i=s.length-1;i>=0;i--)await Promise.race([s[i].then(()=>"fulfilled"),Promise.resolve("pending")])==="fulfilled"&&s.splice(i,1)}}return await Promise.all(s),r}function Y(t){return t.startsWith("sh")?"1":t.startsWith("sz")||t.startsWith("bj")?"0":t.startsWith("6")?"1":"0"}var K={};Vt(K,{getAShareCodeList:()=>ee,getAllHKQuotesByCodes:()=>se,getAllQuotesByCodes:()=>oe,getAllUSQuotesByCodes:()=>ie,getFullQuotes:()=>X,getFundFlow:()=>Zt,getFundQuotes:()=>Xt,getHKCodeList:()=>re,getHKQuotes:()=>tt,getPanelLargeOrder:()=>Yt,getSimpleQuotes:()=>Jt,getTodayTimeline:()=>te,getTradingCalendar:()=>ae,getUSCodeList:()=>ne,getUSQuotes:()=>et,parseFullQuote:()=>Ot,parseFundFlow:()=>Et,parseFundQuote:()=>vt,parseHKQuote:()=>qt,parsePanelLargeOrder:()=>Bt,parseSimpleQuote:()=>Ut,parseUSQuote:()=>jt,search:()=>ue});function Ot(t){let e=[];for(let s=0;s<5;s++)e.push({price:g(t[9+s*2]),volume:g(t[10+s*2])});let r=[];for(let s=0;s<5;s++)r.push({price:g(t[19+s*2]),volume:g(t[20+s*2])});return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:g(t[3]),prevClose:g(t[4]),open:g(t[5]),volume:g(t[6]),outerVolume:g(t[7]),innerVolume:g(t[8]),bid:e,ask:r,time:t[30]??"",change:g(t[31]),changePercent:g(t[32]),high:g(t[33]),low:g(t[34]),volume2:g(t[36]),amount:g(t[37]),turnoverRate:R(t[38]),pe:R(t[39]),amplitude:R(t[43]),circulatingMarketCap:R(t[44]),totalMarketCap:R(t[45]),pb:R(t[46]),limitUp:R(t[47]),limitDown:R(t[48]),volumeRatio:R(t[49]),avgPrice:R(t[51]),peStatic:R(t[52]),peDynamic:R(t[53]),high52w:R(t[67]),low52w:R(t[68]),circulatingShares:R(t[72]),totalShares:R(t[73]),raw:t}}function Ut(t){return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:g(t[3]),change:g(t[4]),changePercent:g(t[5]),volume:g(t[6]),amount:g(t[7]),marketCap:R(t[9]),marketType:t[10]??"",raw:t}}function Et(t){return{code:t[0]??"",mainInflow:g(t[1]),mainOutflow:g(t[2]),mainNet:g(t[3]),mainNetRatio:g(t[4]),retailInflow:g(t[5]),retailOutflow:g(t[6]),retailNet:g(t[7]),retailNetRatio:g(t[8]),totalFlow:g(t[9]),name:t[12]??"",date:t[13]??"",raw:t}}function Bt(t){return{buyLargeRatio:g(t[0]),buySmallRatio:g(t[1]),sellLargeRatio:g(t[2]),sellSmallRatio:g(t[3]),raw:t}}function qt(t){return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:g(t[3]),prevClose:g(t[4]),open:g(t[5]),volume:g(t[6]),time:t[30]??"",change:g(t[31]),changePercent:g(t[32]),high:g(t[33]),low:g(t[34]),amount:g(t[37]),lotSize:R(t[40]),circulatingMarketCap:R(t[44]),totalMarketCap:R(t[45]),currency:t[t.length-3]??"",raw:t}}function jt(t){return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:g(t[3]),prevClose:g(t[4]),open:g(t[5]),volume:g(t[6]),time:t[30]??"",change:g(t[31]),changePercent:g(t[32]),high:g(t[33]),low:g(t[34]),amount:g(t[37]),turnoverRate:R(t[38]),pe:R(t[39]),amplitude:R(t[43]),totalMarketCap:R(t[45]),pb:R(t[47]),high52w:R(t[48]),low52w:R(t[49]),raw:t}}function vt(t){return{code:t[0]??"",name:t[1]??"",nav:g(t[5]),accNav:g(t[6]),change:g(t[7]),navDate:t[8]??"",raw:t}}async function X(t,e){return!e||e.length===0?[]:(await t.getTencentQuote(e.join(","))).filter(s=>s.fields&&s.fields.length>0&&s.fields[0]!=="").map(s=>Ot(s.fields))}async function Jt(t,e){if(!e||e.length===0)return[];let r=e.map(n=>`s_${n}`);return(await t.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>Ut(n.fields))}async function Zt(t,e){if(!e||e.length===0)return[];let r=e.map(n=>`ff_${n}`);return(await t.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>Et(n.fields))}async function Yt(t,e){if(!e||e.length===0)return[];let r=e.map(n=>`s_pk${n}`);return(await t.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>Bt(n.fields))}async function tt(t,e){if(!e||e.length===0)return[];let r=e.map(n=>`hk${n}`);return(await t.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>qt(n.fields))}async function et(t,e){if(!e||e.length===0)return[];let r=e.map(n=>`us${n}`);return(await t.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>jt(n.fields))}async function Xt(t,e){if(!e||e.length===0)return[];let r=e.map(n=>`jj${n}`);return(await t.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>vt(n.fields))}async function te(t,e){let r=t.getTimeout(),s=new AbortController,n=setTimeout(()=>s.abort(),r);try{let o=await fetch(`${yt}?code=${e}`,{signal:s.signal});if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);let i=await o.json();if(i.code!==0)throw new Error(i.msg||"API error");let a=i.data?.[e];if(!a)return{code:e,date:"",data:[]};let l=a.data?.data||[],c=a.data?.date||"",f=!1;if(l.length>0){let p=l[0].split(" "),m=parseFloat(p[1])||0,h=parseInt(p[2],10)||0,y=parseFloat(p[3])||0;h>0&&m>0&&y/h>m*50&&(f=!0)}let d=l.map(p=>{let m=p.split(" "),h=m[0],y=`${h.slice(0,2)}:${h.slice(2,4)}`,C=parseInt(m[2],10)||0,S=parseFloat(m[3])||0,b=f?C*100:C,M=b>0?S/b:0;return{time:y,price:parseFloat(m[1])||0,volume:b,amount:S,avgPrice:Math.round(M*100)/100}});return{code:e,date:c,data:d}}finally{clearTimeout(n)}}async function ee(t,e=!0){let r=t.getTimeout(),s=new AbortController,n=setTimeout(()=>s.abort(),r);try{let o=await fetch(Ct,{signal:s.signal});if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);let a=(await o.json()).list||[];return e?a:a.map(l=>l.replace(/^(sh|sz|bj)/,""))}finally{clearTimeout(n)}}async function ne(t,e=!0){let r=t.getTimeout(),s=new AbortController,n=setTimeout(()=>s.abort(),r);try{let o=await fetch(Rt,{signal:s.signal});if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);let a=(await o.json()).list||[];return e?a:a.map(l=>l.replace(/^\d{3}\./,""))}finally{clearTimeout(n)}}async function re(t){let e=t.getTimeout(),r=new AbortController,s=setTimeout(()=>r.abort(),e);try{let n=await fetch(St,{signal:r.signal});if(!n.ok)throw new Error(`HTTP error! status: ${n.status}`);return(await n.json()).list||[]}finally{clearTimeout(s)}}async function oe(t,e,r={}){let{batchSize:s=D,concurrency:n=$,onProgress:o}=r;E(s,"batchSize"),E(n,"concurrency");let i=Math.min(s,Q),a=H(e,i),l=a.length,c=0,f=a.map(p=>async()=>{let m=await X(t,p);return c++,o&&o(c,l),m});return(await N(f,n)).flat()}async function se(t,e,r={}){let{batchSize:s=D,concurrency:n=$,onProgress:o}=r;E(s,"batchSize"),E(n,"concurrency");let i=Math.min(s,Q),a=H(e,i),l=a.length,c=0,f=a.map(p=>async()=>{let m=await tt(t,p);return c++,o&&o(c,l),m});return(await N(f,n)).flat()}async function ie(t,e,r={}){let{batchSize:s=D,concurrency:n=$,onProgress:o}=r;E(s,"batchSize"),E(n,"concurrency");let i=Math.min(s,Q),a=H(e,i),l=a.length,c=0,f=a.map(p=>async()=>{let m=await et(t,p);return c++,o&&o(c,l),m});return(await N(f,n)).flat()}async function ae(t){let e=await t.get(Gt);return!e||e.trim()===""?[]:e.trim().split(",").map(r=>r.trim()).filter(r=>r.length>0)}var le="https://smartbox.gtimg.cn/s3/";function Le(t){return t.replace(/\\u([0-9a-fA-F]{4})/g,(e,r)=>String.fromCharCode(parseInt(r,16)))}function ke(t){return!t||t==="N"?[]:t.split("^").filter(Boolean).map(r=>{let s=r.split("~"),n=s[0]||"",o=s[1]||"",i=Le(s[2]||""),a=s[4]||"";return{code:n+o,name:i,market:n,type:a}})}function Ie(t){return new Promise((e,r)=>{let s=`${le}?v=2&t=all&q=${encodeURIComponent(t)}`;window.v_hint="";let n=document.createElement("script");n.src=s,n.charset="utf-8",n.onload=()=>{let o=window.v_hint||"";document.body.removeChild(n),e(o)},n.onerror=()=>{document.body.removeChild(n),r(new Error("Network error calling Smartbox"))},document.body.appendChild(n)})}async function xe(t,e){let r=`${le}?v=2&t=all&q=${encodeURIComponent(e)}`,n=(await t.get(r)).match(/v_hint="([^"]*)"/);return n?n[1]:""}function Oe(){return typeof window<"u"&&typeof document<"u"}async function ue(t,e){if(!e||!e.trim())return[];let r;return Oe()?r=await Ie(e):r=await xe(t,e),ke(r)}var P={};Vt(P,{getConceptConstituents:()=>be,getConceptKline:()=>we,getConceptList:()=>Qt,getConceptMinuteKline:()=>Te,getConceptSpot:()=>Se,getHKHistoryKline:()=>pe,getHistoryKline:()=>ce,getIndustryConstituents:()=>he,getIndustryKline:()=>ye,getIndustryList:()=>Nt,getIndustryMinuteKline:()=>Ce,getIndustrySpot:()=>ge,getMinuteKline:()=>fe,getUSHistoryKline:()=>de});async function ce(t,e,r={}){let{period:s="daily",adjust:n="hfq",startDate:o="19700101",endDate:i="20500101"}=r;U(s),I(n);let a=e.replace(/^(sh|sz|bj)/,""),l={daily:"101",weekly:"102",monthly:"103"},c={"":"0",qfq:"1",hfq:"2"},f=`${Y(e)}.${a}`,d=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f116",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:l[s],fqt:c[n],secid:f,beg:o,end:i}),p=`${G}?${d.toString()}`,h=(await t.get(p,{responseType:"json"}))?.data?.klines;return!Array.isArray(h)||h.length===0?[]:h.map(y=>{let[C,S,b,M,A,_,L,k,x,O,B]=y.split(",");return{date:C,code:a,open:u(S),close:u(b),high:u(M),low:u(A),volume:u(_),amount:u(L),amplitude:u(k),changePercent:u(x),change:u(O),turnoverRate:u(B)}})}async function fe(t,e,r={}){let{period:s="1",adjust:n="hfq",startDate:o="1979-09-01 09:32:00",endDate:i="2222-01-01 09:32:00"}=r;q(s),I(n);let a=e.replace(/^(sh|sz|bj)/,""),l=`${Y(e)}.${a}`;if(s==="1"){let c=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13",fields2:"f51,f52,f53,f54,f55,f56,f57,f58",ut:"7eea3edcaed734bea9cbfc24409ed989",ndays:"5",iscr:"0",secid:l}),f=`${bt}?${c.toString()}`,p=(await t.get(f,{responseType:"json"}))?.data?.trends;if(!Array.isArray(p)||p.length===0)return[];let m=o.replace("T"," ").slice(0,16),h=i.replace("T"," ").slice(0,16);return p.map(y=>{let[C,S,b,M,A,_,L,k]=y.split(",");return{time:C,open:u(S),close:u(b),high:u(M),low:u(A),volume:u(_),amount:u(L),avgPrice:u(k)}}).filter(y=>y.time>=m&&y.time<=h)}else{let c={"":"0",qfq:"1",hfq:"2"},f=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:s,fqt:c[n],secid:l,beg:"0",end:"20500000"}),d=`${G}?${f.toString()}`,m=(await t.get(d,{responseType:"json"}))?.data?.klines;if(!Array.isArray(m)||m.length===0)return[];let h=o.replace("T"," ").slice(0,16),y=i.replace("T"," ").slice(0,16);return m.map(C=>{let[S,b,M,A,_,L,k,x,O,B,gt]=C.split(",");return{time:S,open:u(b),close:u(M),high:u(A),low:u(_),changePercent:u(O),change:u(B),volume:u(L),amount:u(k),amplitude:u(x),turnoverRate:u(gt)}}).filter(C=>C.time>=h&&C.time<=y)}}async function pe(t,e,r={}){let{period:s="daily",adjust:n="hfq",startDate:o="19700101",endDate:i="20500101"}=r;U(s),I(n);let a=e.replace(/^hk/i,"").padStart(5,"0"),l={daily:"101",weekly:"102",monthly:"103"},c={"":"0",qfq:"1",hfq:"2"},f=`116.${a}`,d=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:l[s],fqt:c[n],secid:f,beg:o,end:i,lmt:"1000000"}),p=`${wt}?${d.toString()}`,m=await t.get(p,{responseType:"json"}),h=m?.data?.klines,y=m?.data?.name||"";return!Array.isArray(h)||h.length===0?[]:h.map(C=>{let[S,b,M,A,_,L,k,x,O,B,gt]=C.split(",");return{date:S,code:a,name:y,open:u(b),close:u(M),high:u(A),low:u(_),volume:u(L),amount:u(k),amplitude:u(x),changePercent:u(O),change:u(B),turnoverRate:u(gt)}})}async function de(t,e,r={}){let{period:s="daily",adjust:n="hfq",startDate:o="19700101",endDate:i="20500101"}=r;U(s),I(n);let a={daily:"101",weekly:"102",monthly:"103"},l={"":"0",qfq:"1",hfq:"2"},c=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:a[s],fqt:l[n],secid:e,beg:o,end:i,lmt:"1000000"}),f=`${Tt}?${c.toString()}`,d=await t.get(f,{responseType:"json"}),p=d?.data?.klines,m=d?.data?.code||e.split(".")[1]||e,h=d?.data?.name||"";return!Array.isArray(p)||p.length===0?[]:p.map(y=>{let[C,S,b,M,A,_,L,k,x,O,B]=y.split(",");return{date:C,code:m,name:h,open:u(S),close:u(b),high:u(M),low:u(A),volume:u(_),amount:u(L),amplitude:u(k),changePercent:u(x),change:u(O),turnoverRate:u(B)}})}var Ht=null;async function nt(t,e){if(e.startsWith("BK"))return e;if(!Ht){let s=await Nt(t);Ht=new Map(s.map(n=>[n.name,n.code]))}let r=Ht.get(e);if(!r)throw new Error(`\u672A\u627E\u5230\u884C\u4E1A\u677F\u5757: ${e}`);return r}function w(t){if(t==null)return null;let e=String(t);return u(e)}async function me(t,e,r,s,n=100,o){let i=[],a=1,l=0;do{let c=new URLSearchParams({...r,pn:String(a),pz:String(n),fields:s}),f=`${e}?${c.toString()}`,p=(await t.get(f,{responseType:"json"}))?.data;if(!p||!Array.isArray(p.diff))break;a===1&&(l=p.total??0);let m=p.diff.map((h,y)=>o(h,i.length+y+1));i.push(...m),a++}while(i.length<l);return i}async function Nt(t){let s=await me(t,Mt,{po:"1",np:"1",ut:"bd1d9ddb04089700cf9c27f6f7426281",fltt:"2",invt:"2",fid:"f3",fs:"m:90 t:2 f:!50"},"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f26,f22,f33,f11,f62,f128,f136,f115,f152,f124,f107,f104,f105,f140,f141,f207,f208,f209,f222",100,(n,o)=>({rank:o,name:String(n.f14??""),code:String(n.f12??""),price:w(n.f2),change:w(n.f4),changePercent:w(n.f3),totalMarketCap:w(n.f20),turnoverRate:w(n.f8),riseCount:w(n.f104),fallCount:w(n.f105),leadingStock:n.f128?String(n.f128):null,leadingStockChangePercent:w(n.f136)}));return s.sort((n,o)=>(o.changePercent??0)-(n.changePercent??0)),s.forEach((n,o)=>{n.rank=o+1}),s}async function ge(t,e){let r=await nt(t,e),s=new URLSearchParams({fields:"f43,f44,f45,f46,f47,f48,f170,f171,f168,f169",mpi:"1000",invt:"2",fltt:"1",secid:`90.${r}`}),n=`${Kt}?${s.toString()}`,i=(await t.get(n,{responseType:"json"}))?.data;return i?[{key:"f43",name:"\u6700\u65B0",divide:!0},{key:"f44",name:"\u6700\u9AD8",divide:!0},{key:"f45",name:"\u6700\u4F4E",divide:!0},{key:"f46",name:"\u5F00\u76D8",divide:!0},{key:"f47",name:"\u6210\u4EA4\u91CF",divide:!1},{key:"f48",name:"\u6210\u4EA4\u989D",divide:!1},{key:"f170",name:"\u6DA8\u8DCC\u5E45",divide:!0},{key:"f171",name:"\u632F\u5E45",divide:!0},{key:"f168",name:"\u6362\u624B\u7387",divide:!0},{key:"f169",name:"\u6DA8\u8DCC\u989D",divide:!0}].map(({key:l,name:c,divide:f})=>{let d=i[l],p=null;return typeof d=="number"&&!isNaN(d)&&(p=f?d/100:d),{item:c,value:p}}):[]}async function he(t,e){let s={po:"1",np:"1",ut:"bd1d9ddb04089700cf9c27f6f7426281",fltt:"2",invt:"2",fid:"f3",fs:`b:${await nt(t,e)} f:!50`};return me(t,At,s,"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152,f45",100,(o,i)=>({rank:i,code:String(o.f12??""),name:String(o.f14??""),price:w(o.f2),changePercent:w(o.f3),change:w(o.f4),volume:w(o.f5),amount:w(o.f6),amplitude:w(o.f7),high:w(o.f15),low:w(o.f16),open:w(o.f17),prevClose:w(o.f18),turnoverRate:w(o.f8),pe:w(o.f9),pb:w(o.f23)}))}async function ye(t,e,r={}){let{period:s="daily",adjust:n="",startDate:o="19700101",endDate:i="20500101"}=r;U(s),I(n);let a=await nt(t,e),l={daily:"101",weekly:"102",monthly:"103"},c={"":"0",qfq:"1",hfq:"2"},f=new URLSearchParams({secid:`90.${a}`,fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",klt:l[s],fqt:c[n],beg:o,end:i,smplmt:"10000",lmt:"1000000"}),d=`${J}?${f.toString()}`,m=(await t.get(d,{responseType:"json"}))?.data?.klines;return!Array.isArray(m)||m.length===0?[]:m.map(h=>{let[y,C,S,b,M,A,_,L,k,x,O]=h.split(",");return{date:y,open:u(C),close:u(S),high:u(b),low:u(M),changePercent:u(k),change:u(x),volume:u(A),amount:u(_),amplitude:u(L),turnoverRate:u(O)}})}async function Ce(t,e,r={}){let{period:s="5"}=r;q(s);let n=await nt(t,e);if(s==="1"){let o=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13",fields2:"f51,f52,f53,f54,f55,f56,f57,f58",iscr:"0",ndays:"1",secid:`90.${n}`}),i=`${Pt}?${o.toString()}`,l=(await t.get(i,{responseType:"json"}))?.data?.trends;return!Array.isArray(l)||l.length===0?[]:l.map(c=>{let[f,d,p,m,h,y,C,S]=c.split(",");return{time:f,open:u(d),close:u(p),high:u(m),low:u(h),volume:u(y),amount:u(C),price:u(S)}})}else{let o=new URLSearchParams({secid:`90.${n}`,fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",klt:s,fqt:"1",beg:"0",end:"20500101",smplmt:"10000",lmt:"1000000"}),i=`${J}?${o.toString()}`,l=(await t.get(i,{responseType:"json"}))?.data?.klines;return!Array.isArray(l)||l.length===0?[]:l.map(c=>{let[f,d,p,m,h,y,C,S,b,M,A]=c.split(",");return{time:f,open:u(d),close:u(p),high:u(m),low:u(h),changePercent:u(b),change:u(M),volume:u(y),amount:u(C),amplitude:u(S),turnoverRate:u(A)}})}}var Dt=null;function T(t){if(t==null)return null;let e=String(t);return u(e)}async function rt(t,e){if(e.startsWith("BK"))return e;if(!Dt){let s=await Qt(t);Dt=new Map(s.map(n=>[n.name,n.code]))}let r=Dt.get(e);if(!r)throw new Error(`\u672A\u627E\u5230\u6982\u5FF5\u677F\u5757: ${e}`);return r}async function Re(t,e,r,s,n=100,o){let i=[],a=1,l=0;do{let c=new URLSearchParams({...r,pn:String(a),pz:String(n),fields:s}),f=`${e}?${c.toString()}`,p=(await t.get(f,{responseType:"json"}))?.data;if(!p||!Array.isArray(p.diff))break;a===1&&(l=p.total??0);let m=p.diff.map((h,y)=>o(h,i.length+y+1));i.push(...m),a++}while(i.length<l);return i}async function Qt(t){let s=await Re(t,_t,{po:"1",np:"1",ut:"bd1d9ddb04089700cf9c27f6f7426281",fltt:"2",invt:"2",fid:"f12",fs:"m:90 t:3 f:!50"},"f2,f3,f4,f8,f12,f14,f15,f16,f17,f18,f20,f21,f24,f25,f22,f33,f11,f62,f128,f124,f107,f104,f105,f136",100,(n,o)=>({rank:o,name:String(n.f14??""),code:String(n.f12??""),price:T(n.f2),change:T(n.f4),changePercent:T(n.f3),totalMarketCap:T(n.f20),turnoverRate:T(n.f8),riseCount:T(n.f104),fallCount:T(n.f105),leadingStock:n.f128?String(n.f128):null,leadingStockChangePercent:T(n.f136)}));return s.sort((n,o)=>(o.changePercent??0)-(n.changePercent??0)),s.forEach((n,o)=>{n.rank=o+1}),s}async function Se(t,e){let r=await rt(t,e),s=new URLSearchParams({fields:"f43,f44,f45,f46,f47,f48,f170,f171,f168,f169",mpi:"1000",invt:"2",fltt:"1",secid:`90.${r}`}),n=`${Lt}?${s.toString()}`,i=(await t.get(n,{responseType:"json"}))?.data;return i?[{key:"f43",name:"\u6700\u65B0",divide:!0},{key:"f44",name:"\u6700\u9AD8",divide:!0},{key:"f45",name:"\u6700\u4F4E",divide:!0},{key:"f46",name:"\u5F00\u76D8",divide:!0},{key:"f47",name:"\u6210\u4EA4\u91CF",divide:!1},{key:"f48",name:"\u6210\u4EA4\u989D",divide:!1},{key:"f170",name:"\u6DA8\u8DCC\u5E45",divide:!0},{key:"f171",name:"\u632F\u5E45",divide:!0},{key:"f168",name:"\u6362\u624B\u7387",divide:!0},{key:"f169",name:"\u6DA8\u8DCC\u989D",divide:!0}].map(({key:l,name:c,divide:f})=>{let d=i[l],p=null;return typeof d=="number"&&!isNaN(d)&&(p=f?d/100:d),{item:c,value:p}}):[]}async function be(t,e){let s={po:"1",np:"1",ut:"bd1d9ddb04089700cf9c27f6f7426281",fltt:"2",invt:"2",fid:"f12",fs:`b:${await rt(t,e)} f:!50`};return Re(t,kt,s,"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152,f45",100,(o,i)=>({rank:i,code:String(o.f12??""),name:String(o.f14??""),price:T(o.f2),changePercent:T(o.f3),change:T(o.f4),volume:T(o.f5),amount:T(o.f6),amplitude:T(o.f7),high:T(o.f15),low:T(o.f16),open:T(o.f17),prevClose:T(o.f18),turnoverRate:T(o.f8),pe:T(o.f9),pb:T(o.f23)}))}async function we(t,e,r={}){let{period:s="daily",adjust:n="",startDate:o="19700101",endDate:i="20500101"}=r;U(s),I(n);let a=await rt(t,e),l={daily:"101",weekly:"102",monthly:"103"},c={"":"0",qfq:"1",hfq:"2"},f=new URLSearchParams({secid:`90.${a}`,fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",klt:l[s],fqt:c[n],beg:o,end:i,smplmt:"10000",lmt:"1000000"}),d=`${Z}?${f.toString()}`,m=(await t.get(d,{responseType:"json"}))?.data?.klines;return!Array.isArray(m)||m.length===0?[]:m.map(h=>{let[y,C,S,b,M,A,_,L,k,x,O]=h.split(",");return{date:y,open:u(C),close:u(S),high:u(b),low:u(M),changePercent:u(k),change:u(x),volume:u(A),amount:u(_),amplitude:u(L),turnoverRate:u(O)}})}async function Te(t,e,r={}){let{period:s="5"}=r;q(s);let n=await rt(t,e);if(s==="1"){let o=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13",fields2:"f51,f52,f53,f54,f55,f56,f57,f58",iscr:"0",ndays:"1",secid:`90.${n}`}),i=`${It}?${o.toString()}`,l=(await t.get(i,{responseType:"json"}))?.data?.trends;return!Array.isArray(l)||l.length===0?[]:l.map(c=>{let[f,d,p,m,h,y,C,S]=c.split(",");return{time:f,open:u(d),close:u(p),high:u(m),low:u(h),volume:u(y),amount:u(C),price:u(S)}})}else{let o=new URLSearchParams({secid:`90.${n}`,fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",klt:s,fqt:"1",beg:"0",end:"20500101",smplmt:"10000",lmt:"1000000"}),i=`${Z}?${o.toString()}`,l=(await t.get(i,{responseType:"json"}))?.data?.klines;return!Array.isArray(l)||l.length===0?[]:l.map(c=>{let[f,d,p,m,h,y,C,S,b,M,A]=c.split(",");return{time:f,open:u(d),close:u(p),high:u(m),low:u(h),changePercent:u(b),change:u(M),volume:u(y),amount:u(C),amplitude:u(S),turnoverRate:u(A)}})}}function W(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function j(t,e){let r=[];for(let s=0;s<t.length;s++){if(s<e-1){r.push(null);continue}let n=0,o=0;for(let i=s-e+1;i<=s;i++)t[i]!==null&&(n+=t[i],o++);r.push(o===e?W(n/e):null)}return r}function v(t,e){let r=[],s=2/(e+1),n=null,o=!1;for(let i=0;i<t.length;i++){if(i<e-1){r.push(null);continue}if(!o){let l=0,c=0;for(let f=i-e+1;f<=i;f++)t[f]!==null&&(l+=t[f],c++);c===e&&(n=l/e,o=!0),r.push(n!==null?W(n):null);continue}let a=t[i];a===null?r.push(n!==null?W(n):null):(n=s*a+(1-s)*n,r.push(W(n)))}return r}function $t(t,e){let r=[],s=Array.from({length:e},(o,i)=>i+1),n=s.reduce((o,i)=>o+i,0);for(let o=0;o<t.length;o++){if(o<e-1){r.push(null);continue}let i=0,a=!0;for(let l=0;l<e;l++){let c=t[o-e+1+l];if(c===null){a=!1;break}i+=c*s[l]}r.push(a?W(i/n):null)}return r}function ot(t,e={}){let{periods:r=[5,10,20,30,60,120,250],type:s="sma"}=e,n=s==="ema"?v:s==="wma"?$t:j,o={};for(let i of r)o[`ma${i}`]=n(t,i);return t.map((i,a)=>{let l={};for(let c of r)l[`ma${c}`]=o[`ma${c}`][a];return l})}function Me(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function st(t,e={}){let{short:r=12,long:s=26,signal:n=9}=e,o=v(t,r),i=v(t,s),a=t.map((c,f)=>o[f]===null||i[f]===null?null:o[f]-i[f]),l=v(a,n);return t.map((c,f)=>({dif:a[f]!==null?Me(a[f]):null,dea:l[f],macd:a[f]!==null&&l[f]!==null?Me((a[f]-l[f])*2):null}))}function Ft(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function Ue(t,e,r){let s=[];for(let n=0;n<t.length;n++){if(n<e-1||r[n]===null){s.push(null);continue}let o=0,i=0;for(let a=n-e+1;a<=n;a++)t[a]!==null&&r[n]!==null&&(o+=Math.pow(t[a]-r[n],2),i++);s.push(i===e?Math.sqrt(o/e):null)}return s}function it(t,e={}){let{period:r=20,stdDev:s=2}=e,n=j(t,r),o=Ue(t,r,n);return t.map((i,a)=>{if(n[a]===null||o[a]===null)return{mid:null,upper:null,lower:null,bandwidth:null};let l=n[a]+s*o[a],c=n[a]-s*o[a],f=n[a]!==0?Ft((l-c)/n[a]*100):null;return{mid:n[a],upper:Ft(l),lower:Ft(c),bandwidth:f}})}function Wt(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function at(t,e={}){let{period:r=9,kPeriod:s=3,dPeriod:n=3}=e,o=[],i=50,a=50;for(let l=0;l<t.length;l++){if(l<r-1){o.push({k:null,d:null,j:null});continue}let c=-1/0,f=1/0,d=!0;for(let y=l-r+1;y<=l;y++){if(t[y].high===null||t[y].low===null){d=!1;break}c=Math.max(c,t[y].high),f=Math.min(f,t[y].low)}let p=t[l].close;if(!d||p===null||c===f){o.push({k:null,d:null,j:null});continue}let m=(p-f)/(c-f)*100;i=(s-1)/s*i+1/s*m,a=(n-1)/n*a+1/n*i;let h=3*i-2*a;o.push({k:Wt(i),d:Wt(a),j:Wt(h)})}return o}function Ee(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function lt(t,e={}){let{periods:r=[6,12,24]}=e,s=[null];for(let o=1;o<t.length;o++)t[o]===null||t[o-1]===null?s.push(null):s.push(t[o]-t[o-1]);let n={};for(let o of r){let i=[],a=0,l=0;for(let c=0;c<t.length;c++){if(c<o){i.push(null),s[c]!==null&&(s[c]>0?a+=s[c]:l+=Math.abs(s[c]));continue}if(c===o)a=a/o,l=l/o;else{let f=s[c]??0,d=f>0?f:0,p=f<0?Math.abs(f):0;a=(a*(o-1)+d)/o,l=(l*(o-1)+p)/o}if(l===0)i.push(100);else if(a===0)i.push(0);else{let f=a/l;i.push(Ee(100-100/(1+f)))}}n[`rsi${o}`]=i}return t.map((o,i)=>{let a={};for(let l of r)a[`rsi${l}`]=n[`rsi${l}`][i];return a})}function Be(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function ut(t,e={}){let{periods:r=[6,10]}=e,s={};for(let n of r){let o=[];for(let i=0;i<t.length;i++){if(i<n-1){o.push(null);continue}let a=-1/0,l=1/0,c=!0;for(let p=i-n+1;p<=i;p++){if(t[p].high===null||t[p].low===null){c=!1;break}a=Math.max(a,t[p].high),l=Math.min(l,t[p].low)}let f=t[i].close;if(!c||f===null||a===l){o.push(null);continue}let d=(a-f)/(a-l)*100;o.push(Be(d))}s[`wr${n}`]=o}return t.map((n,o)=>{let i={};for(let a of r)i[`wr${a}`]=s[`wr${a}`][o];return i})}function qe(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function ct(t,e={}){let{periods:r=[6,12,24]}=e,s={};for(let n of r){let o=j(t,n),i=[];for(let a=0;a<t.length;a++)if(t[a]===null||o[a]===null||o[a]===0)i.push(null);else{let l=(t[a]-o[a])/o[a]*100;i.push(qe(l))}s[`bias${n}`]=i}return t.map((n,o)=>{let i={};for(let a of r)i[`bias${a}`]=s[`bias${a}`][o];return i})}function je(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function ft(t,e={}){let{period:r=14}=e,s=[],n=t.map(o=>o.high===null||o.low===null||o.close===null?null:(o.high+o.low+o.close)/3);for(let o=0;o<t.length;o++){if(o<r-1){s.push({cci:null});continue}let i=0,a=0;for(let d=o-r+1;d<=o;d++)n[d]!==null&&(i+=n[d],a++);if(a!==r||n[o]===null){s.push({cci:null});continue}let l=i/r,c=0;for(let d=o-r+1;d<=o;d++)c+=Math.abs(n[d]-l);let f=c/r;if(f===0)s.push({cci:0});else{let d=(n[o]-l)/(.015*f);s.push({cci:je(d)})}}return s}function zt(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function pt(t,e={}){let{period:r=14}=e,s=[],n=[];for(let i=0;i<t.length;i++){let{high:a,low:l,close:c}=t[i];if(a===null||l===null||c===null){n.push(null);continue}if(i===0)n.push(a-l);else{let f=t[i-1].close;if(f===null)n.push(a-l);else{let d=a-l,p=Math.abs(a-f),m=Math.abs(l-f);n.push(Math.max(d,p,m))}}}let o=null;for(let i=0;i<t.length;i++){if(i<r-1){s.push({tr:n[i]!==null?zt(n[i]):null,atr:null});continue}if(i===r-1){let a=0,l=0;for(let c=0;c<r;c++)n[c]!==null&&(a+=n[c],l++);l===r&&(o=a/r)}else o!==null&&n[i]!==null&&(o=(o*(r-1)+n[i])/r);s.push({tr:n[i]!==null?zt(n[i]):null,atr:o!==null?zt(o):null})}return s}function dt(t,e={}){if(t.length===0)return[];let r=t.map(m=>m.close),s=t.map(m=>({open:m.open,high:m.high,low:m.low,close:m.close,volume:m.volume})),n=e.ma?ot(r,typeof e.ma=="object"?e.ma:{}):null,o=e.macd?st(r,typeof e.macd=="object"?e.macd:{}):null,i=e.boll?it(r,typeof e.boll=="object"?e.boll:{}):null,a=e.kdj?at(s,typeof e.kdj=="object"?e.kdj:{}):null,l=e.rsi?lt(r,typeof e.rsi=="object"?e.rsi:{}):null,c=e.wr?ut(s,typeof e.wr=="object"?e.wr:{}):null,f=e.bias?ct(r,typeof e.bias=="object"?e.bias:{}):null,d=e.cci?ft(s,typeof e.cci=="object"?e.cci:{}):null,p=e.atr?pt(s,typeof e.atr=="object"?e.atr:{}):null;return t.map((m,h)=>({...m,...n&&{ma:n[h]},...o&&{macd:o[h]},...i&&{boll:i[h]},...a&&{kdj:a[h]},...l&&{rsi:l[h]},...c&&{wr:c[h]},...f&&{bias:f[h]},...d&&{cci:d[h]},...p&&{atr:p[h]}}))}var mt=class{constructor(e={}){this.client=new F(e)}getFullQuotes(e){return K.getFullQuotes(this.client,e)}getSimpleQuotes(e){return K.getSimpleQuotes(this.client,e)}getHKQuotes(e){return K.getHKQuotes(this.client,e)}getUSQuotes(e){return K.getUSQuotes(this.client,e)}getFundQuotes(e){return K.getFundQuotes(this.client,e)}getFundFlow(e){return K.getFundFlow(this.client,e)}getPanelLargeOrder(e){return K.getPanelLargeOrder(this.client,e)}getTodayTimeline(e){return K.getTodayTimeline(this.client,e)}getIndustryList(){return P.getIndustryList(this.client)}getIndustrySpot(e){return P.getIndustrySpot(this.client,e)}getIndustryConstituents(e){return P.getIndustryConstituents(this.client,e)}getIndustryKline(e,r){return P.getIndustryKline(this.client,e,r)}getIndustryMinuteKline(e,r){return P.getIndustryMinuteKline(this.client,e,r)}getConceptList(){return P.getConceptList(this.client)}getConceptSpot(e){return P.getConceptSpot(this.client,e)}getConceptConstituents(e){return P.getConceptConstituents(this.client,e)}getConceptKline(e,r){return P.getConceptKline(this.client,e,r)}getConceptMinuteKline(e,r){return P.getConceptMinuteKline(this.client,e,r)}getHistoryKline(e,r){return P.getHistoryKline(this.client,e,r)}getMinuteKline(e,r){return P.getMinuteKline(this.client,e,r)}getHKHistoryKline(e,r){return P.getHKHistoryKline(this.client,e,r)}getUSHistoryKline(e,r){return P.getUSHistoryKline(this.client,e,r)}search(e){return K.search(this.client,e)}getAShareCodeList(e=!0){return K.getAShareCodeList(this.client,e)}getUSCodeList(e=!0){return K.getUSCodeList(this.client,e)}getHKCodeList(){return K.getHKCodeList(this.client)}async getAllAShareQuotes(e={}){let r=await this.getAShareCodeList();return this.getAllQuotesByCodes(r,e)}async getAllHKShareQuotes(e={}){let r=await this.getHKCodeList();return K.getAllHKQuotesByCodes(this.client,r,e)}async getAllUSShareQuotes(e={}){let r=await this.getUSCodeList(!1);return K.getAllUSQuotesByCodes(this.client,r,e)}getAllQuotesByCodes(e,r={}){return K.getAllQuotesByCodes(this.client,e,r)}async batchRaw(e){return this.client.getTencentQuote(e)}getTradingCalendar(){return K.getTradingCalendar(this.client)}detectMarket(e){return/^\d{3}\.[A-Z]+$/i.test(e)?"US":/^\d{5}$/.test(e)?"HK":"A"}safeMax(e,r=0){return!e||e.length===0?r:Math.max(...e)}calcRequiredLookback(e){let r=0,s=!1;if(e.ma){let o=typeof e.ma=="object"?e.ma:{},i=o.periods??[5,10,20,30,60,120,250],a=o.type??"sma";r=Math.max(r,this.safeMax(i,20)),a==="ema"&&(s=!0)}if(e.macd){let o=typeof e.macd=="object"?e.macd:{},i=o.long??26,a=o.signal??9;r=Math.max(r,i*3+a),s=!0}if(e.boll){let o=typeof e.boll=="object"&&e.boll.period?e.boll.period:20;r=Math.max(r,o)}if(e.kdj){let o=typeof e.kdj=="object"&&e.kdj.period?e.kdj.period:9;r=Math.max(r,o)}if(e.rsi){let o=typeof e.rsi=="object"&&e.rsi.periods?e.rsi.periods:[6,12,24];r=Math.max(r,this.safeMax(o,14)+1)}if(e.wr){let o=typeof e.wr=="object"&&e.wr.periods?e.wr.periods:[6,10];r=Math.max(r,this.safeMax(o,10))}if(e.bias){let o=typeof e.bias=="object"&&e.bias.periods?e.bias.periods:[6,12,24];r=Math.max(r,this.safeMax(o,12))}if(e.cci){let o=typeof e.cci=="object"&&e.cci.period?e.cci.period:14;r=Math.max(r,o)}if(e.atr){let o=typeof e.atr=="object"&&e.atr.period?e.atr.period:14;r=Math.max(r,o)}return Math.ceil(r*(s?1.5:1.2))}calcActualStartDate(e,r,s=1.5){let n=Math.ceil(r*s),o=new Date(parseInt(e.slice(0,4)),parseInt(e.slice(4,6))-1,parseInt(e.slice(6,8)));o.setDate(o.getDate()-n);let i=o.getFullYear(),a=String(o.getMonth()+1).padStart(2,"0"),l=String(o.getDate()).padStart(2,"0");return`${i}${a}${l}`}dateToTimestamp(e){let r=e.includes("-")?e:`${e.slice(0,4)}-${e.slice(4,6)}-${e.slice(6,8)}`;return new Date(r).getTime()}async getKlineWithIndicators(e,r={}){let{startDate:s,endDate:n,indicators:o={}}=r,i=r.market??this.detectMarket(e),a=this.calcRequiredLookback(o),c={A:1.5,HK:1.46,US:1.45}[i],f=s?this.calcActualStartDate(s,a,c):void 0,d={period:r.period,adjust:r.adjust,startDate:f,endDate:r.endDate},p;switch(i){case"HK":p=await this.getHKHistoryKline(e,d);break;case"US":p=await this.getUSHistoryKline(e,d);break;default:p=await this.getHistoryKline(e,d)}if(s&&p.length<a)switch(i){case"HK":p=await this.getHKHistoryKline(e,{...d,startDate:void 0});break;case"US":p=await this.getUSHistoryKline(e,{...d,startDate:void 0});break;default:p=await this.getHistoryKline(e,{...d,startDate:void 0})}let m=dt(p,o);if(s){let h=this.dateToTimestamp(s),y=n?this.dateToTimestamp(n):1/0;return m.filter(C=>{let S=this.dateToTimestamp(C.date);return S>=h&&S<=y})}return m}},ve=mt;export{mt as StockSDK,dt as addIndicators,N as asyncPool,pt as calcATR,ct as calcBIAS,it as calcBOLL,ft as calcCCI,v as calcEMA,at as calcKDJ,ot as calcMA,st as calcMACD,lt as calcRSI,j as calcSMA,$t as calcWMA,ut as calcWR,H as chunkArray,z as decodeGBK,ve as default,V as parseResponse,g as safeNumber,R as safeNumberOrNull};
|
|
1
|
+
var vt=Object.defineProperty;var ct=(t,e)=>{for(var n in e)vt(t,n,{get:e[n],enumerable:!0})};function V(t){return new TextDecoder("gbk").decode(t)}function Y(t){let e=t.split(";").map(s=>s.trim()).filter(Boolean),n=[];for(let s of e){let r=s.indexOf("=");if(r<0)continue;let o=s.slice(0,r).trim();o.startsWith("v_")&&(o=o.slice(2));let i=s.slice(r+1).trim();i.startsWith('"')&&i.endsWith('"')&&(i=i.slice(1,-1));let a=i.split("~");n.push({key:o,fields:a})}return n}function f(t){if(!t||t==="")return 0;let e=parseFloat(t);return Number.isNaN(e)?0:e}function y(t){if(!t||t==="")return null;let e=parseFloat(t);return Number.isNaN(e)?null:e}function g(t){if(!t||t===""||t==="-")return null;let e=parseFloat(t);return Number.isNaN(e)?null:e}function R(t){return t==null?null:g(String(t))}var _e="https://qt.gtimg.cn",xe="https://web.ifzq.gtimg.cn/appstock/app/minute/query",Le="https://assets.linkdiary.cn/shares/zh_a_list.json",Oe="https://assets.linkdiary.cn/shares/us_list.json",we="https://assets.linkdiary.cn/shares/hk_list.json",pt="https://assets.linkdiary.cn/shares/trade-data-list.txt";var J="https://push2his.eastmoney.com/api/qt/stock/kline/get",Ie="https://push2his.eastmoney.com/api/qt/stock/trends2/get",Ee="https://33.push2his.eastmoney.com/api/qt/stock/kline/get",Ue="https://63.push2his.eastmoney.com/api/qt/stock/kline/get",Be="https://17.push2.eastmoney.com/api/qt/clist/get",Pe="https://91.push2.eastmoney.com/api/qt/stock/get",ke="https://29.push2.eastmoney.com/api/qt/clist/get",De="https://7.push2his.eastmoney.com/api/qt/stock/kline/get",qe="https://push2his.eastmoney.com/api/qt/stock/trends2/get",He="https://79.push2.eastmoney.com/api/qt/clist/get",Ne="https://91.push2.eastmoney.com/api/qt/stock/get",ve="https://29.push2.eastmoney.com/api/qt/clist/get",je="https://91.push2his.eastmoney.com/api/qt/stock/kline/get",Qe="https://push2his.eastmoney.com/api/qt/stock/trends2/get",Fe=3e4,v=500,j=500,Q=7,$e=3,We=1e3,ze=3e4,Ge=2,Ve=[408,429,500,502,503,504];var k=class extends Error{constructor(n,s,r,o){let i=s?` ${s}`:"",a=r?`, url: ${r}`:"",l=o?`, provider: ${o}`:"";super(`HTTP error! status: ${n}${i}${a}${l}`);this.status=n;this.statusText=s;this.url=r;this.provider=o;this.name="HttpError"}},F=class{constructor(e={}){this.baseUrl=e.baseUrl??_e,this.timeout=e.timeout??Fe,this.retryOptions=this.resolveRetryOptions(e.retry),this.headers={...e.headers??{}},e.userAgent&&(Object.keys(this.headers).some(s=>s.toLowerCase()==="user-agent")||(this.headers["User-Agent"]=e.userAgent))}resolveRetryOptions(e){return{maxRetries:e?.maxRetries??$e,baseDelay:e?.baseDelay??We,maxDelay:e?.maxDelay??ze,backoffMultiplier:e?.backoffMultiplier??Ge,retryableStatusCodes:e?.retryableStatusCodes??Ve,retryOnNetworkError:e?.retryOnNetworkError??!0,retryOnTimeout:e?.retryOnTimeout??!0,onRetry:e?.onRetry}}inferProvider(e){try{let n=new URL(e).hostname;if(n.includes("eastmoney.com"))return"eastmoney";if(n.includes("gtimg.cn"))return"tencent";if(n.includes("linkdiary.cn"))return"linkdiary"}catch{return}}getTimeout(){return this.timeout}calculateDelay(e){return Math.min(this.retryOptions.baseDelay*Math.pow(this.retryOptions.backoffMultiplier,e),this.retryOptions.maxDelay)+Math.random()*100}sleep(e){return new Promise(n=>setTimeout(n,e))}shouldRetry(e,n){return n>=this.retryOptions.maxRetries?!1:e instanceof DOMException&&e.name==="AbortError"?this.retryOptions.retryOnTimeout:e instanceof TypeError?this.retryOptions.retryOnNetworkError:e instanceof k?this.retryOptions.retryableStatusCodes.includes(e.status):!1}async executeWithRetry(e,n=0){try{return await e()}catch(s){if(this.shouldRetry(s,n)){let r=this.calculateDelay(n);return this.retryOptions.onRetry&&s instanceof Error&&this.retryOptions.onRetry(n+1,s,r),await this.sleep(r),this.executeWithRetry(e,n+1)}throw s}}async get(e,n={}){return this.executeWithRetry(async()=>{let s=new AbortController,r=setTimeout(()=>s.abort(),this.timeout),o=this.inferProvider(e);try{let i=await fetch(e,{signal:s.signal,headers:{...this.headers}});if(!i.ok)throw new k(i.status,i.statusText,e,o);switch(n.responseType){case"json":return await i.json();case"arraybuffer":return await i.arrayBuffer();default:return await i.text()}}catch(i){throw i instanceof Error&&(i.url=e,i.provider=o),i}finally{clearTimeout(r)}})}async getTencentQuote(e){let n=`${this.baseUrl}/?q=${encodeURIComponent(e)}`,s=await this.get(n,{responseType:"arraybuffer"}),r=V(s);return Y(r)}};var jt=new Set(["daily","weekly","monthly"]),Qt=new Set(["1","5","15","30","60"]),Ft=new Set(["","qfq","hfq"]);function K(t,e){if(!Number.isFinite(t)||!Number.isInteger(t)||t<=0)throw new RangeError(`${e} must be a positive integer`)}function x(t){if(!jt.has(t))throw new RangeError("period must be one of: daily, weekly, monthly")}function $(t){if(!Qt.has(t))throw new RangeError("period must be one of: 1, 5, 15, 30, 60")}function M(t){if(!Ft.has(t))throw new RangeError("adjust must be one of: '', 'qfq', 'hfq'")}function D(t,e){K(e,"chunkSize");let n=[];for(let s=0;s<t.length;s+=e)n.push(t.slice(s,s+e));return n}async function q(t,e){K(e,"concurrency");let n=[],s=[];for(let r of t){let o=Promise.resolve().then(()=>r()).then(i=>{n.push(i)});if(s.push(o),s.length>=e){await Promise.race(s);for(let i=s.length-1;i>=0;i--)await Promise.race([s[i].then(()=>"fulfilled"),Promise.resolve("pending")])==="fulfilled"&&s.splice(i,1)}}return await Promise.all(s),n}function X(t){return t.startsWith("sh")?"1":t.startsWith("sz")||t.startsWith("bj")?"0":t.startsWith("6")?"1":"0"}function L(t){return{daily:"101",weekly:"102",monthly:"103"}[t]}function A(t){return{"":"0",qfq:"1",hfq:"2"}[t]}var b={};ct(b,{getAShareCodeList:()=>yt,getAllHKQuotesByCodes:()=>St,getAllQuotesByCodes:()=>bt,getAllUSQuotesByCodes:()=>Tt,getFullQuotes:()=>Z,getFundFlow:()=>dt,getFundQuotes:()=>gt,getHKCodeList:()=>Rt,getHKQuotes:()=>ee,getPanelLargeOrder:()=>mt,getSimpleQuotes:()=>ft,getTodayTimeline:()=>ht,getTradingCalendar:()=>Kt,getUSCodeList:()=>Ct,getUSQuotes:()=>te,parseFullQuote:()=>Ye,parseFundFlow:()=>Xe,parseFundQuote:()=>nt,parseHKQuote:()=>et,parsePanelLargeOrder:()=>Ze,parseSimpleQuote:()=>Je,parseUSQuote:()=>tt,search:()=>At});function Ye(t){let e=[];for(let s=0;s<5;s++)e.push({price:f(t[9+s*2]),volume:f(t[10+s*2])});let n=[];for(let s=0;s<5;s++)n.push({price:f(t[19+s*2]),volume:f(t[20+s*2])});return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:f(t[3]),prevClose:f(t[4]),open:f(t[5]),volume:f(t[6]),outerVolume:f(t[7]),innerVolume:f(t[8]),bid:e,ask:n,time:t[30]??"",change:f(t[31]),changePercent:f(t[32]),high:f(t[33]),low:f(t[34]),volume2:f(t[36]),amount:f(t[37]),turnoverRate:y(t[38]),pe:y(t[39]),amplitude:y(t[43]),circulatingMarketCap:y(t[44]),totalMarketCap:y(t[45]),pb:y(t[46]),limitUp:y(t[47]),limitDown:y(t[48]),volumeRatio:y(t[49]),avgPrice:y(t[51]),peStatic:y(t[52]),peDynamic:y(t[53]),high52w:y(t[67]),low52w:y(t[68]),circulatingShares:y(t[72]),totalShares:y(t[73]),raw:t}}function Je(t){return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:f(t[3]),change:f(t[4]),changePercent:f(t[5]),volume:f(t[6]),amount:f(t[7]),marketCap:y(t[9]),marketType:t[10]??"",raw:t}}function Xe(t){return{code:t[0]??"",mainInflow:f(t[1]),mainOutflow:f(t[2]),mainNet:f(t[3]),mainNetRatio:f(t[4]),retailInflow:f(t[5]),retailOutflow:f(t[6]),retailNet:f(t[7]),retailNetRatio:f(t[8]),totalFlow:f(t[9]),name:t[12]??"",date:t[13]??"",raw:t}}function Ze(t){return{buyLargeRatio:f(t[0]),buySmallRatio:f(t[1]),sellLargeRatio:f(t[2]),sellSmallRatio:f(t[3]),raw:t}}function et(t){return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:f(t[3]),prevClose:f(t[4]),open:f(t[5]),volume:f(t[6]),time:t[30]??"",change:f(t[31]),changePercent:f(t[32]),high:f(t[33]),low:f(t[34]),amount:f(t[37]),lotSize:y(t[40]),circulatingMarketCap:y(t[44]),totalMarketCap:y(t[45]),currency:t[t.length-3]??"",raw:t}}function tt(t){return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:f(t[3]),prevClose:f(t[4]),open:f(t[5]),volume:f(t[6]),time:t[30]??"",change:f(t[31]),changePercent:f(t[32]),high:f(t[33]),low:f(t[34]),amount:f(t[37]),turnoverRate:y(t[38]),pe:y(t[39]),amplitude:y(t[43]),totalMarketCap:y(t[45]),pb:y(t[47]),high52w:y(t[48]),low52w:y(t[49]),raw:t}}function nt(t){return{code:t[0]??"",name:t[1]??"",nav:f(t[5]),accNav:f(t[6]),change:f(t[7]),navDate:t[8]??"",raw:t}}async function Z(t,e){return!e||e.length===0?[]:(await t.getTencentQuote(e.join(","))).filter(s=>s.fields&&s.fields.length>0&&s.fields[0]!=="").map(s=>Ye(s.fields))}async function ft(t,e){if(!e||e.length===0)return[];let n=e.map(r=>`s_${r}`);return(await t.getTencentQuote(n.join(","))).filter(r=>r.fields&&r.fields.length>0&&r.fields[0]!=="").map(r=>Je(r.fields))}async function dt(t,e){if(!e||e.length===0)return[];let n=e.map(r=>`ff_${r}`);return(await t.getTencentQuote(n.join(","))).filter(r=>r.fields&&r.fields.length>0&&r.fields[0]!=="").map(r=>Xe(r.fields))}async function mt(t,e){if(!e||e.length===0)return[];let n=e.map(r=>`s_pk${r}`);return(await t.getTencentQuote(n.join(","))).filter(r=>r.fields&&r.fields.length>0&&r.fields[0]!=="").map(r=>Ze(r.fields))}async function ee(t,e){if(!e||e.length===0)return[];let n=e.map(r=>`hk${r}`);return(await t.getTencentQuote(n.join(","))).filter(r=>r.fields&&r.fields.length>0&&r.fields[0]!=="").map(r=>et(r.fields))}async function te(t,e){if(!e||e.length===0)return[];let n=e.map(r=>`us${r}`);return(await t.getTencentQuote(n.join(","))).filter(r=>r.fields&&r.fields.length>0&&r.fields[0]!=="").map(r=>tt(r.fields))}async function gt(t,e){if(!e||e.length===0)return[];let n=e.map(r=>`jj${r}`);return(await t.getTencentQuote(n.join(","))).filter(r=>r.fields&&r.fields.length>0&&r.fields[0]!=="").map(r=>nt(r.fields))}async function ht(t,e){let n=t.getTimeout(),s=new AbortController,r=setTimeout(()=>s.abort(),n);try{let o=await fetch(`${xe}?code=${e}`,{signal:s.signal});if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);let i=await o.json();if(i.code!==0)throw new Error(i.msg||"API error");let a=i.data?.[e];if(!a)return{code:e,date:"",data:[]};let l=a.data?.data||[],u=a.data?.date||"",c=!1;if(l.length>0){let d=l[0].split(" "),m=parseFloat(d[1])||0,h=parseInt(d[2],10)||0,C=parseFloat(d[3])||0;h>0&&m>0&&C/h>m*50&&(c=!0)}let p=l.map(d=>{let m=d.split(" "),h=m[0],C=`${h.slice(0,2)}:${h.slice(2,4)}`,T=parseInt(m[2],10)||0,I=parseFloat(m[3])||0,_=c?T*100:T,N=_>0?I/_:0;return{time:C,price:parseFloat(m[1])||0,volume:_,amount:I,avgPrice:Math.round(N*100)/100}});return{code:e,date:u,data:p}}finally{clearTimeout(r)}}var ne=null,W=null,re=null,z=null,oe=null;async function yt(t,e=!0){if(ne)return e?ne.slice():(W||(W=ne.map(r=>r.replace(/^(sh|sz|bj)/,""))),W.slice());let s=(await t.get(Le,{responseType:"json"}))?.list||[];return ne=s,W=s.map(r=>r.replace(/^(sh|sz|bj)/,"")),e?s.slice():W.slice()}async function Ct(t,e=!0){if(re)return e?re.slice():(z||(z=re.map(r=>r.replace(/^\d{3}\./,""))),z.slice());let s=(await t.get(Oe,{responseType:"json"}))?.list||[];return re=s,z=s.map(r=>r.replace(/^\d{3}\./,"")),e?s.slice():z.slice()}async function Rt(t){return oe||(oe=(await t.get(we,{responseType:"json"}))?.list||[]),oe.slice()}async function bt(t,e,n={}){let{batchSize:s=v,concurrency:r=Q,onProgress:o}=n;K(s,"batchSize"),K(r,"concurrency");let i=Math.min(s,j),a=D(e,i),l=a.length,u=0,c=a.map(d=>async()=>{let m=await Z(t,d);return u++,o&&o(u,l),m});return(await q(c,r)).flat()}async function St(t,e,n={}){let{batchSize:s=v,concurrency:r=Q,onProgress:o}=n;K(s,"batchSize"),K(r,"concurrency");let i=Math.min(s,j),a=D(e,i),l=a.length,u=0,c=a.map(d=>async()=>{let m=await ee(t,d);return u++,o&&o(u,l),m});return(await q(c,r)).flat()}async function Tt(t,e,n={}){let{batchSize:s=v,concurrency:r=Q,onProgress:o}=n;K(s,"batchSize"),K(r,"concurrency");let i=Math.min(s,j),a=D(e,i),l=a.length,u=0,c=a.map(d=>async()=>{let m=await te(t,d);return u++,o&&o(u,l),m});return(await q(c,r)).flat()}var H=null;async function Kt(t){if(H)return H.slice();let e=await t.get(pt);return!e||e.trim()===""?(H=[],H.slice()):(H=e.trim().split(",").map(n=>n.trim()).filter(n=>n.length>0),H.slice())}var Mt="https://smartbox.gtimg.cn/s3/";function $t(t){return t.replace(/\\u([0-9a-fA-F]{4})/g,(e,n)=>String.fromCharCode(parseInt(n,16)))}function Wt(t){return!t||t==="N"?[]:t.split("^").filter(Boolean).map(n=>{let s=n.split("~"),r=s[0]||"",o=s[1]||"",i=$t(s[2]||""),a=s[4]||"";return{code:r+o,name:i,market:r,type:a}})}function zt(t){return new Promise((e,n)=>{let s=`${Mt}?v=2&t=all&q=${encodeURIComponent(t)}`;window.v_hint="";let r=document.createElement("script");r.src=s,r.charset="utf-8",r.onload=()=>{let o=window.v_hint||"";document.body.removeChild(r),e(o)},r.onerror=()=>{document.body.removeChild(r),n(new Error("Network error calling Smartbox"))},document.body.appendChild(r)})}async function Gt(t,e){let n=`${Mt}?v=2&t=all&q=${encodeURIComponent(e)}`,r=(await t.get(n)).match(/v_hint="([^"]*)"/);return r?r[1]:""}function Vt(){return typeof window<"u"&&typeof document<"u"}async function At(t,e){if(!e||!e.trim())return[];let n;return Vt()?n=await zt(e):n=await Gt(t,e),Wt(n)}var S={};ct(S,{getConceptConstituents:()=>Pt,getConceptKline:()=>kt,getConceptList:()=>st,getConceptMinuteKline:()=>Dt,getConceptSpot:()=>Bt,getHKHistoryKline:()=>Lt,getHistoryKline:()=>_t,getIndustryConstituents:()=>It,getIndustryKline:()=>Et,getIndustryList:()=>ot,getIndustryMinuteKline:()=>Ut,getIndustrySpot:()=>wt,getMinuteKline:()=>xt,getUSHistoryKline:()=>Ot});async function rt(t,e,n,s,r=100,o){let i=[],a=1,l=0;do{let u=new URLSearchParams({...n,pn:String(a),pz:String(r),fields:s}),c=`${e}?${u.toString()}`,d=(await t.get(c,{responseType:"json"}))?.data;if(!d||!Array.isArray(d.diff))break;a===1&&(l=d.total??0);let m=d.diff.map((h,C)=>o(h,i.length+C+1));i.push(...m),a++}while(i.length<l);return i}function O(t){let[e,n,s,r,o,i,a,l,u,c,p]=t.split(",");return{date:e,open:g(n),close:g(s),high:g(r),low:g(o),volume:g(i),amount:g(a),amplitude:g(l),changePercent:g(u),change:g(c),turnoverRate:g(p)}}async function w(t,e,n){let s=`${e}?${n.toString()}`,r=await t.get(s,{responseType:"json"});return{klines:r?.data?.klines||[],name:r?.data?.name,code:r?.data?.code}}async function _t(t,e,n={}){let{period:s="daily",adjust:r="hfq",startDate:o="19700101",endDate:i="20500101"}=n;x(s),M(r);let a=e.replace(/^(sh|sz|bj)/,""),l=`${X(e)}.${a}`,u=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f116",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:L(s),fqt:A(r),secid:l,beg:o,end:i}),c=J,{klines:p}=await w(t,c,u);return p.length===0?[]:p.map(d=>({...O(d),code:a}))}async function xt(t,e,n={}){let{period:s="1",adjust:r="hfq",startDate:o="1979-09-01 09:32:00",endDate:i="2222-01-01 09:32:00"}=n;$(s),M(r);let a=e.replace(/^(sh|sz|bj)/,""),l=`${X(e)}.${a}`;if(s==="1"){let u=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13",fields2:"f51,f52,f53,f54,f55,f56,f57,f58",ut:"7eea3edcaed734bea9cbfc24409ed989",ndays:"5",iscr:"0",secid:l}),c=`${Ie}?${u.toString()}`,d=(await t.get(c,{responseType:"json"}))?.data?.trends;if(!Array.isArray(d)||d.length===0)return[];let m=o.replace("T"," ").slice(0,16),h=i.replace("T"," ").slice(0,16);return d.map(C=>{let[T,I,_,N,Me,Ae,Ht,Nt]=C.split(",");return{time:T,open:g(I),close:g(_),high:g(N),low:g(Me),volume:g(Ae),amount:g(Ht),avgPrice:g(Nt)}}).filter(C=>C.time>=m&&C.time<=h)}else{let u=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:s,fqt:A(r||""),secid:l,beg:"0",end:"20500000"}),c=J,{klines:p}=await w(t,c,u);if(p.length===0)return[];let d=o.replace("T"," ").slice(0,16),m=i.replace("T"," ").slice(0,16);return p.map(h=>{let C=O(h);return{...C,time:C.date}}).filter(h=>h.time>=d&&h.time<=m)}}async function Lt(t,e,n={}){let{period:s="daily",adjust:r="hfq",startDate:o="19700101",endDate:i="20500101"}=n;x(s),M(r);let a=e.replace(/^hk/i,"").padStart(5,"0"),l=`116.${a}`,u=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:L(s),fqt:A(r),secid:l,beg:o,end:i,lmt:"1000000"}),c=Ee,{klines:p,name:d}=await w(t,c,u);return p.length===0?[]:p.map(m=>({...O(m),code:a,name:d||""}))}async function Ot(t,e,n={}){let{period:s="daily",adjust:r="hfq",startDate:o="19700101",endDate:i="20500101"}=n;x(s),M(r);let a=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:L(s),fqt:A(r),secid:e,beg:o,end:i,lmt:"1000000"}),l=Ue,{klines:u,name:c,code:p}=await w(t,l,a),d=p||e.split(".")[1]||e,m=c||"";return u.length===0?[]:u.map(h=>({...O(h),code:d,name:m}))}function se(t){let e=null;return{async getCode(n,s,r){if(s.startsWith("BK"))return s;if(!e){let i=await r(n);e=new Map(i.map(a=>[a.name,a.code]))}let o=e.get(s);if(!o)throw new Error(`${t.errorPrefix}: ${s}`);return o}}}async function ie(t,e){let n={po:"1",np:"1",ut:"bd1d9ddb04089700cf9c27f6f7426281",fltt:"2",invt:"2",fid:e.type==="concept"?"f12":"f3",fs:e.fsFilter},s=e.type==="concept"?"f2,f3,f4,f8,f12,f14,f15,f16,f17,f18,f20,f21,f24,f25,f22,f33,f11,f62,f128,f124,f107,f104,f105,f136":"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f26,f22,f33,f11,f62,f128,f136,f115,f152,f124,f107,f104,f105,f140,f141,f207,f208,f209,f222",r=await rt(t,e.listUrl,n,s,100,(o,i)=>({rank:i,name:String(o.f14??""),code:String(o.f12??""),price:R(o.f2),change:R(o.f4),changePercent:R(o.f3),totalMarketCap:R(o.f20),turnoverRate:R(o.f8),riseCount:R(o.f104),fallCount:R(o.f105),leadingStock:o.f128?String(o.f128):null,leadingStockChangePercent:R(o.f136)}));return r.sort((o,i)=>(i.changePercent??0)-(o.changePercent??0)),r.forEach((o,i)=>{o.rank=i+1}),r}async function ae(t,e,n){let s=new URLSearchParams({fields:"f43,f44,f45,f46,f47,f48,f170,f171,f168,f169",mpi:"1000",invt:"2",fltt:"1",secid:`90.${e}`}),r=`${n}?${s.toString()}`,i=(await t.get(r,{responseType:"json"}))?.data;return i?[{key:"f43",name:"\u6700\u65B0",divide:!0},{key:"f44",name:"\u6700\u9AD8",divide:!0},{key:"f45",name:"\u6700\u4F4E",divide:!0},{key:"f46",name:"\u5F00\u76D8",divide:!0},{key:"f47",name:"\u6210\u4EA4\u91CF",divide:!1},{key:"f48",name:"\u6210\u4EA4\u989D",divide:!1},{key:"f170",name:"\u6DA8\u8DCC\u5E45",divide:!0},{key:"f171",name:"\u632F\u5E45",divide:!0},{key:"f168",name:"\u6362\u624B\u7387",divide:!0},{key:"f169",name:"\u6DA8\u8DCC\u989D",divide:!0}].map(({key:l,name:u,divide:c})=>{let p=i[l],d=null;return typeof p=="number"&&!isNaN(p)&&(d=c?p/100:p),{item:u,value:d}}):[]}async function le(t,e,n){let s={po:"1",np:"1",ut:"bd1d9ddb04089700cf9c27f6f7426281",fltt:"2",invt:"2",fid:"f3",fs:`b:${e} f:!50`};return rt(t,n,s,"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152,f45",100,(o,i)=>({rank:i,code:String(o.f12??""),name:String(o.f14??""),price:R(o.f2),changePercent:R(o.f3),change:R(o.f4),volume:R(o.f5),amount:R(o.f6),amplitude:R(o.f7),high:R(o.f15),low:R(o.f16),open:R(o.f17),prevClose:R(o.f18),turnoverRate:R(o.f8),pe:R(o.f9),pb:R(o.f23)}))}async function ue(t,e,n,s={}){let{period:r="daily",adjust:o="",startDate:i="19700101",endDate:a="20500101"}=s;x(r),M(o);let l=new URLSearchParams({secid:`90.${e}`,fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",klt:L(r),fqt:A(o),beg:i,end:a,smplmt:"10000",lmt:"1000000"}),{klines:u}=await w(t,n,l);return u.length===0?[]:u.map(c=>O(c))}async function ce(t,e,n,s,r={}){let{period:o="5"}=r;if($(o),o==="1"){let i=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13",fields2:"f51,f52,f53,f54,f55,f56,f57,f58",iscr:"0",ndays:"1",secid:`90.${e}`}),a=`${s}?${i.toString()}`,u=(await t.get(a,{responseType:"json"}))?.data?.trends;return!Array.isArray(u)||u.length===0?[]:u.map(c=>{let[p,d,m,h,C,T,I,_]=c.split(",");return{time:p,open:g(d),close:g(m),high:g(h),low:g(C),volume:g(T),amount:g(I),price:g(_)}})}else{let i=new URLSearchParams({secid:`90.${e}`,fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",klt:o,fqt:"1",beg:"0",end:"20500101",smplmt:"10000",lmt:"1000000"}),a=`${n}?${i.toString()}`,u=(await t.get(a,{responseType:"json"}))?.data?.klines;return!Array.isArray(u)||u.length===0?[]:u.map(c=>{let[p,d,m,h,C,T,I,_,N,Me,Ae]=c.split(",");return{time:p,open:g(d),close:g(m),high:g(h),low:g(C),changePercent:g(N),change:g(Me),volume:g(T),amount:g(I),amplitude:g(_),turnoverRate:g(Ae)}})}}var E={type:"industry",fsFilter:"m:90 t:2 f:!50",listUrl:Be,spotUrl:Pe,consUrl:ke,klineUrl:De,trendsUrl:qe,errorPrefix:"\u672A\u627E\u5230\u884C\u4E1A\u677F\u5757"},Yt=se(E);async function pe(t,e){return Yt.getCode(t,e,ot)}async function ot(t){return ie(t,E)}async function wt(t,e){let n=await pe(t,e);return ae(t,n,E.spotUrl)}async function It(t,e){let n=await pe(t,e);return le(t,n,E.consUrl)}async function Et(t,e,n={}){let s=await pe(t,e);return ue(t,s,E.klineUrl,n)}async function Ut(t,e,n={}){let s=await pe(t,e);return ce(t,s,E.klineUrl,E.trendsUrl,n)}var U={type:"concept",fsFilter:"m:90 t:3 f:!50",listUrl:He,spotUrl:Ne,consUrl:ve,klineUrl:je,trendsUrl:Qe,errorPrefix:"\u672A\u627E\u5230\u6982\u5FF5\u677F\u5757"},Jt=se(U);async function fe(t,e){return Jt.getCode(t,e,st)}async function st(t){return ie(t,U)}async function Bt(t,e){let n=await fe(t,e);return ae(t,n,U.spotUrl)}async function Pt(t,e){let n=await fe(t,e);return le(t,n,U.consUrl)}async function kt(t,e,n={}){let s=await fe(t,e);return ue(t,s,U.klineUrl,n)}async function Dt(t,e,n={}){let s=await fe(t,e);return ce(t,s,U.klineUrl,U.trendsUrl,n)}function G(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function B(t,e){let n=[];for(let s=0;s<t.length;s++){if(s<e-1){n.push(null);continue}let r=0,o=0;for(let i=s-e+1;i<=s;i++)t[i]!==null&&(r+=t[i],o++);n.push(o===e?G(r/e):null)}return n}function P(t,e){let n=[],s=2/(e+1),r=null,o=!1;for(let i=0;i<t.length;i++){if(i<e-1){n.push(null);continue}if(!o){let l=0,u=0;for(let c=i-e+1;c<=i;c++)t[c]!==null&&(l+=t[c],u++);u===e&&(r=l/e,o=!0),n.push(r!==null?G(r):null);continue}let a=t[i];a===null?n.push(r!==null?G(r):null):(r=s*a+(1-s)*r,n.push(G(r)))}return n}function it(t,e){let n=[],s=Array.from({length:e},(o,i)=>i+1),r=s.reduce((o,i)=>o+i,0);for(let o=0;o<t.length;o++){if(o<e-1){n.push(null);continue}let i=0,a=!0;for(let l=0;l<e;l++){let u=t[o-e+1+l];if(u===null){a=!1;break}i+=u*s[l]}n.push(a?G(i/r):null)}return n}function de(t,e={}){let{periods:n=[5,10,20,30,60,120,250],type:s="sma"}=e,r=s==="ema"?P:s==="wma"?it:B,o={};for(let i of n)o[`ma${i}`]=r(t,i);return t.map((i,a)=>{let l={};for(let u of n)l[`ma${u}`]=o[`ma${u}`][a];return l})}function qt(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function me(t,e={}){let{short:n=12,long:s=26,signal:r=9}=e,o=P(t,n),i=P(t,s),a=t.map((u,c)=>o[c]===null||i[c]===null?null:o[c]-i[c]),l=P(a,r);return t.map((u,c)=>({dif:a[c]!==null?qt(a[c]):null,dea:l[c],macd:a[c]!==null&&l[c]!==null?qt((a[c]-l[c])*2):null}))}function at(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function Xt(t,e,n){let s=[];for(let r=0;r<t.length;r++){if(r<e-1||n[r]===null){s.push(null);continue}let o=0,i=0;for(let a=r-e+1;a<=r;a++)t[a]!==null&&n[r]!==null&&(o+=Math.pow(t[a]-n[r],2),i++);s.push(i===e?Math.sqrt(o/e):null)}return s}function ge(t,e={}){let{period:n=20,stdDev:s=2}=e,r=B(t,n),o=Xt(t,n,r);return t.map((i,a)=>{if(r[a]===null||o[a]===null)return{mid:null,upper:null,lower:null,bandwidth:null};let l=r[a]+s*o[a],u=r[a]-s*o[a],c=r[a]!==0?at((l-u)/r[a]*100):null;return{mid:r[a],upper:at(l),lower:at(u),bandwidth:c}})}function lt(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function he(t,e={}){let{period:n=9,kPeriod:s=3,dPeriod:r=3}=e,o=[],i=50,a=50;for(let l=0;l<t.length;l++){if(l<n-1){o.push({k:null,d:null,j:null});continue}let u=-1/0,c=1/0,p=!0;for(let C=l-n+1;C<=l;C++){if(t[C].high===null||t[C].low===null){p=!1;break}u=Math.max(u,t[C].high),c=Math.min(c,t[C].low)}let d=t[l].close;if(!p||d===null||u===c){o.push({k:null,d:null,j:null});continue}let m=(d-c)/(u-c)*100;i=(s-1)/s*i+1/s*m,a=(r-1)/r*a+1/r*i;let h=3*i-2*a;o.push({k:lt(i),d:lt(a),j:lt(h)})}return o}function Zt(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function ye(t,e={}){let{periods:n=[6,12,24]}=e,s=[null];for(let o=1;o<t.length;o++)t[o]===null||t[o-1]===null?s.push(null):s.push(t[o]-t[o-1]);let r={};for(let o of n){let i=[],a=0,l=0;for(let u=0;u<t.length;u++){if(u<o){i.push(null),s[u]!==null&&(s[u]>0?a+=s[u]:l+=Math.abs(s[u]));continue}if(u===o)a=a/o,l=l/o;else{let c=s[u]??0,p=c>0?c:0,d=c<0?Math.abs(c):0;a=(a*(o-1)+p)/o,l=(l*(o-1)+d)/o}if(l===0)i.push(100);else if(a===0)i.push(0);else{let c=a/l;i.push(Zt(100-100/(1+c)))}}r[`rsi${o}`]=i}return t.map((o,i)=>{let a={};for(let l of n)a[`rsi${l}`]=r[`rsi${l}`][i];return a})}function en(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function Ce(t,e={}){let{periods:n=[6,10]}=e,s={};for(let r of n){let o=[];for(let i=0;i<t.length;i++){if(i<r-1){o.push(null);continue}let a=-1/0,l=1/0,u=!0;for(let d=i-r+1;d<=i;d++){if(t[d].high===null||t[d].low===null){u=!1;break}a=Math.max(a,t[d].high),l=Math.min(l,t[d].low)}let c=t[i].close;if(!u||c===null||a===l){o.push(null);continue}let p=(a-c)/(a-l)*100;o.push(en(p))}s[`wr${r}`]=o}return t.map((r,o)=>{let i={};for(let a of n)i[`wr${a}`]=s[`wr${a}`][o];return i})}function tn(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function Re(t,e={}){let{periods:n=[6,12,24]}=e,s={};for(let r of n){let o=B(t,r),i=[];for(let a=0;a<t.length;a++)if(t[a]===null||o[a]===null||o[a]===0)i.push(null);else{let l=(t[a]-o[a])/o[a]*100;i.push(tn(l))}s[`bias${r}`]=i}return t.map((r,o)=>{let i={};for(let a of n)i[`bias${a}`]=s[`bias${a}`][o];return i})}function nn(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function be(t,e={}){let{period:n=14}=e,s=[],r=t.map(o=>o.high===null||o.low===null||o.close===null?null:(o.high+o.low+o.close)/3);for(let o=0;o<t.length;o++){if(o<n-1){s.push({cci:null});continue}let i=0,a=0;for(let p=o-n+1;p<=o;p++)r[p]!==null&&(i+=r[p],a++);if(a!==n||r[o]===null){s.push({cci:null});continue}let l=i/n,u=0;for(let p=o-n+1;p<=o;p++)u+=Math.abs(r[p]-l);let c=u/n;if(c===0)s.push({cci:0});else{let p=(r[o]-l)/(.015*c);s.push({cci:nn(p)})}}return s}function ut(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function Se(t,e={}){let{period:n=14}=e,s=[],r=[];for(let i=0;i<t.length;i++){let{high:a,low:l,close:u}=t[i];if(a===null||l===null||u===null){r.push(null);continue}if(i===0)r.push(a-l);else{let c=t[i-1].close;if(c===null)r.push(a-l);else{let p=a-l,d=Math.abs(a-c),m=Math.abs(l-c);r.push(Math.max(p,d,m))}}}let o=null;for(let i=0;i<t.length;i++){if(i<n-1){s.push({tr:r[i]!==null?ut(r[i]):null,atr:null});continue}if(i===n-1){let a=0,l=0;for(let u=0;u<n;u++)r[u]!==null&&(a+=r[u],l++);l===n&&(o=a/n)}else o!==null&&r[i]!==null&&(o=(o*(n-1)+r[i])/n);s.push({tr:r[i]!==null?ut(r[i]):null,atr:o!==null?ut(o):null})}return s}function Te(t,e={}){if(t.length===0)return[];let n=t.map(m=>m.close),s=t.map(m=>({open:m.open,high:m.high,low:m.low,close:m.close,volume:m.volume})),r=e.ma?de(n,typeof e.ma=="object"?e.ma:{}):null,o=e.macd?me(n,typeof e.macd=="object"?e.macd:{}):null,i=e.boll?ge(n,typeof e.boll=="object"?e.boll:{}):null,a=e.kdj?he(s,typeof e.kdj=="object"?e.kdj:{}):null,l=e.rsi?ye(n,typeof e.rsi=="object"?e.rsi:{}):null,u=e.wr?Ce(s,typeof e.wr=="object"?e.wr:{}):null,c=e.bias?Re(n,typeof e.bias=="object"?e.bias:{}):null,p=e.cci?be(s,typeof e.cci=="object"?e.cci:{}):null,d=e.atr?Se(s,typeof e.atr=="object"?e.atr:{}):null;return t.map((m,h)=>({...m,...r&&{ma:r[h]},...o&&{macd:o[h]},...i&&{boll:i[h]},...a&&{kdj:a[h]},...l&&{rsi:l[h]},...u&&{wr:u[h]},...c&&{bias:c[h]},...p&&{cci:p[h]},...d&&{atr:d[h]}}))}var Ke=class{constructor(e={}){this.client=new F(e)}getFullQuotes(e){return b.getFullQuotes(this.client,e)}getSimpleQuotes(e){return b.getSimpleQuotes(this.client,e)}getHKQuotes(e){return b.getHKQuotes(this.client,e)}getUSQuotes(e){return b.getUSQuotes(this.client,e)}getFundQuotes(e){return b.getFundQuotes(this.client,e)}getFundFlow(e){return b.getFundFlow(this.client,e)}getPanelLargeOrder(e){return b.getPanelLargeOrder(this.client,e)}getTodayTimeline(e){return b.getTodayTimeline(this.client,e)}getIndustryList(){return S.getIndustryList(this.client)}getIndustrySpot(e){return S.getIndustrySpot(this.client,e)}getIndustryConstituents(e){return S.getIndustryConstituents(this.client,e)}getIndustryKline(e,n){return S.getIndustryKline(this.client,e,n)}getIndustryMinuteKline(e,n){return S.getIndustryMinuteKline(this.client,e,n)}getConceptList(){return S.getConceptList(this.client)}getConceptSpot(e){return S.getConceptSpot(this.client,e)}getConceptConstituents(e){return S.getConceptConstituents(this.client,e)}getConceptKline(e,n){return S.getConceptKline(this.client,e,n)}getConceptMinuteKline(e,n){return S.getConceptMinuteKline(this.client,e,n)}getHistoryKline(e,n){return S.getHistoryKline(this.client,e,n)}getMinuteKline(e,n){return S.getMinuteKline(this.client,e,n)}getHKHistoryKline(e,n){return S.getHKHistoryKline(this.client,e,n)}getUSHistoryKline(e,n){return S.getUSHistoryKline(this.client,e,n)}search(e){return b.search(this.client,e)}getAShareCodeList(e=!0){return b.getAShareCodeList(this.client,e)}getUSCodeList(e=!0){return b.getUSCodeList(this.client,e)}getHKCodeList(){return b.getHKCodeList(this.client)}async getAllAShareQuotes(e={}){let n=await this.getAShareCodeList();return this.getAllQuotesByCodes(n,e)}async getAllHKShareQuotes(e={}){let n=await this.getHKCodeList();return b.getAllHKQuotesByCodes(this.client,n,e)}async getAllUSShareQuotes(e={}){let n=await this.getUSCodeList(!1);return b.getAllUSQuotesByCodes(this.client,n,e)}getAllQuotesByCodes(e,n={}){return b.getAllQuotesByCodes(this.client,e,n)}async batchRaw(e){return this.client.getTencentQuote(e)}getTradingCalendar(){return b.getTradingCalendar(this.client)}detectMarket(e){return/^\d{3}\.[A-Z]+$/i.test(e)?"US":/^\d{5}$/.test(e)?"HK":"A"}safeMax(e,n=0){return!e||e.length===0?n:Math.max(...e)}calcRequiredLookback(e){let n=0,s=!1;if(e.ma){let o=typeof e.ma=="object"?e.ma:{},i=o.periods??[5,10,20,30,60,120,250],a=o.type??"sma";n=Math.max(n,this.safeMax(i,20)),a==="ema"&&(s=!0)}if(e.macd){let o=typeof e.macd=="object"?e.macd:{},i=o.long??26,a=o.signal??9;n=Math.max(n,i*3+a),s=!0}if(e.boll){let o=typeof e.boll=="object"&&e.boll.period?e.boll.period:20;n=Math.max(n,o)}if(e.kdj){let o=typeof e.kdj=="object"&&e.kdj.period?e.kdj.period:9;n=Math.max(n,o)}if(e.rsi){let o=typeof e.rsi=="object"&&e.rsi.periods?e.rsi.periods:[6,12,24];n=Math.max(n,this.safeMax(o,14)+1)}if(e.wr){let o=typeof e.wr=="object"&&e.wr.periods?e.wr.periods:[6,10];n=Math.max(n,this.safeMax(o,10))}if(e.bias){let o=typeof e.bias=="object"&&e.bias.periods?e.bias.periods:[6,12,24];n=Math.max(n,this.safeMax(o,12))}if(e.cci){let o=typeof e.cci=="object"&&e.cci.period?e.cci.period:14;n=Math.max(n,o)}if(e.atr){let o=typeof e.atr=="object"&&e.atr.period?e.atr.period:14;n=Math.max(n,o)}return Math.ceil(n*(s?1.5:1.2))}calcActualStartDate(e,n,s=1.5){let r=Math.ceil(n*s),o=new Date(parseInt(e.slice(0,4)),parseInt(e.slice(4,6))-1,parseInt(e.slice(6,8)));o.setDate(o.getDate()-r);let i=o.getFullYear(),a=String(o.getMonth()+1).padStart(2,"0"),l=String(o.getDate()).padStart(2,"0");return`${i}${a}${l}`}calcActualStartDateByCalendar(e,n,s){if(!s||s.length===0)return;let r=this.normalizeDate(e),o=s.findIndex(a=>a>=r);o===-1&&(o=s.length-1);let i=Math.max(0,o-n);return this.toCompactDate(s[i])}normalizeDate(e){return e.includes("-")?e:e.length===8?`${e.slice(0,4)}-${e.slice(4,6)}-${e.slice(6,8)}`:e}toCompactDate(e){return e.replace(/-/g,"")}dateToTimestamp(e){let n=e.includes("-")?e:`${e.slice(0,4)}-${e.slice(4,6)}-${e.slice(6,8)}`;return new Date(n).getTime()}async getKlineWithIndicators(e,n={}){let{startDate:s,endDate:r,indicators:o={}}=n,i=n.market??this.detectMarket(e),a=this.calcRequiredLookback(o),l={A:1.5,HK:1.46,US:1.45},u;if(s)if(i==="A")try{let m=await b.getTradingCalendar(this.client);u=this.calcActualStartDateByCalendar(s,a,m)??this.calcActualStartDate(s,a,l[i])}catch{u=this.calcActualStartDate(s,a,l[i])}else u=this.calcActualStartDate(s,a,l[i]);let c={period:n.period,adjust:n.adjust,startDate:u,endDate:n.endDate},p;switch(i){case"HK":p=await this.getHKHistoryKline(e,c);break;case"US":p=await this.getUSHistoryKline(e,c);break;default:p=await this.getHistoryKline(e,c)}if(s&&p.length<a)switch(i){case"HK":p=await this.getHKHistoryKline(e,{...c,startDate:void 0});break;case"US":p=await this.getUSHistoryKline(e,{...c,startDate:void 0});break;default:p=await this.getHistoryKline(e,{...c,startDate:void 0})}let d=Te(p,o);if(s){let m=this.dateToTimestamp(s),h=r?this.dateToTimestamp(r):1/0;return d.filter(C=>{let T=this.dateToTimestamp(C.date);return T>=m&&T<=h})}return d}},rn=Ke;export{k as HttpError,Ke as StockSDK,Te as addIndicators,q as asyncPool,Se as calcATR,Re as calcBIAS,ge as calcBOLL,be as calcCCI,P as calcEMA,he as calcKDJ,de as calcMA,me as calcMACD,ye as calcRSI,B as calcSMA,it as calcWMA,Ce as calcWR,D as chunkArray,V as decodeGBK,rn as default,Y as parseResponse,f as safeNumber,y as safeNumberOrNull};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "stock-sdk",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.cjs",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -24,12 +24,16 @@
|
|
|
24
24
|
"scripts": {
|
|
25
25
|
"build": "tsup",
|
|
26
26
|
"test": "vitest run",
|
|
27
|
+
"test:unit": "vitest run",
|
|
28
|
+
"test:integration": "RUN_INTEGRATION=1 vitest run",
|
|
27
29
|
"dev": "vitepress dev website",
|
|
28
30
|
"preview": "vitepress preview website",
|
|
29
31
|
"build:docs": "DOCS_BASE=/ vitepress build website",
|
|
30
32
|
"build:pages": "DOCS_BASE=/stock-sdk/ vitepress build website"
|
|
31
33
|
},
|
|
32
34
|
"keywords": [
|
|
35
|
+
"JavaScript",
|
|
36
|
+
"TypeScript",
|
|
33
37
|
"stock",
|
|
34
38
|
"sdk",
|
|
35
39
|
"browser",
|
|
@@ -55,9 +59,13 @@
|
|
|
55
59
|
"node": ">=18.0.0"
|
|
56
60
|
},
|
|
57
61
|
"devDependencies": {
|
|
62
|
+
"@grafana/faro-rollup-plugin": "^0.7.1",
|
|
63
|
+
"@grafana/faro-web-sdk": "^2.1.0",
|
|
64
|
+
"@grafana/faro-web-tracing": "^2.1.0",
|
|
58
65
|
"@iconify/vue": "^5.0.0",
|
|
59
66
|
"@types/node": "^24.10.2",
|
|
60
67
|
"@vitest/coverage-v8": "^4.0.16",
|
|
68
|
+
"msw": "^2.10.4",
|
|
61
69
|
"tsup": "^8.3.5",
|
|
62
70
|
"typescript": "^5.9.3",
|
|
63
71
|
"vitepress": "^1.6.4",
|