stock-sdk 1.4.0 → 1.4.2

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 CHANGED
@@ -165,6 +165,7 @@ console.log(`共获取 ${allQuotes.length} 只股票`);
165
165
  |------|------|
166
166
  | `getFundFlow` | 资金流向 |
167
167
  | `getPanelLargeOrder` | 盘口大单占比 |
168
+ | `getTradingCalendar` | A 股交易日历 |
168
169
 
169
170
  ### 批量查询
170
171
 
@@ -178,6 +179,12 @@ console.log(`共获取 ${allQuotes.length} 只股票`);
178
179
  | `getAllUSShareQuotes` | 获取全市场美股行情 |
179
180
  | `getAllQuotesByCodes` | 批量获取指定股票行情 |
180
181
 
182
+ ### 搜索
183
+
184
+ | 方法 | 说明 |
185
+ |------|------|
186
+ | `search` | 搜索股票代码/名称/拼音 |
187
+
181
188
  ---
182
189
 
183
190
  ## 许可证
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var yt=Object.defineProperty;var Me=Object.getOwnPropertyDescriptor;var Te=Object.getOwnPropertyNames;var Ke=Object.prototype.hasOwnProperty;var Ct=(t,e)=>{for(var o in e)yt(t,o,{get:e[o],enumerable:!0})},Ae=(t,e,o,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Te(e))!Ke.call(t,n)&&n!==o&&yt(t,n,{get:()=>e[n],enumerable:!(s=Me(e,n))||s.enumerable});return t};var Pe=t=>Ae(yt({},"__esModule",{value:!0}),t);var Ee={};Ct(Ee,{StockSDK:()=>st,addIndicators:()=>ot,asyncPool:()=>N,calcATR:()=>rt,calcBIAS:()=>et,calcBOLL:()=>Z,calcCCI:()=>nt,calcEMA:()=>j,calcKDJ:()=>Y,calcMA:()=>G,calcMACD:()=>J,calcRSI:()=>X,calcSMA:()=>E,calcWMA:()=>gt,calcWR:()=>tt,chunkArray:()=>v,decodeGBK:()=>D,default:()=>we,parseResponse:()=>Q,safeNumber:()=>g,safeNumberOrNull:()=>C});module.exports=Pe(Ee);function D(t){return new TextDecoder("gbk").decode(t)}function Q(t){let e=t.split(";").map(s=>s.trim()).filter(Boolean),o=[];for(let s of e){let n=s.indexOf("=");if(n<0)continue;let r=s.slice(0,n).trim();r.startsWith("v_")&&(r=r.slice(2));let i=s.slice(n+1).trim();i.startsWith('"')&&i.endsWith('"')&&(i=i.slice(1,-1));let a=i.split("~");o.push({key:r,fields:a})}return o}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",Mt="https://assets.linkdiary.cn/shares/hk_list.json";var it="https://push2his.eastmoney.com/api/qt/stock/kline/get",Tt="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",kt="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",_t="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",Bt=3e4,$=500,F=500,W=7;var z=class{constructor(e={}){this.baseUrl=e.baseUrl??Rt,this.timeout=e.timeout??Bt}getTimeout(){return this.timeout}async get(e,o={}){let s=new AbortController,n=setTimeout(()=>s.abort(),this.timeout);try{let r=await fetch(e,{signal:s.signal});if(!r.ok)throw new Error(`HTTP error! status: ${r.status}`);switch(o.responseType){case"json":return await r.json();case"arraybuffer":return await r.arrayBuffer();default:return await r.text()}}finally{clearTimeout(n)}}async getTencentQuote(e){let o=`${this.baseUrl}/?q=${encodeURIComponent(e)}`,s=await this.get(o,{responseType:"arraybuffer"}),n=D(s);return Q(n)}};var ke=new Set(["daily","weekly","monthly"]),Le=new Set(["1","5","15","30","60"]),_e=new Set(["","qfq","hfq"]);function B(t,e){if(!Number.isFinite(t)||!Number.isInteger(t)||t<=0)throw new RangeError(`${e} must be a positive integer`)}function U(t){if(!ke.has(t))throw new RangeError("period must be one of: daily, weekly, monthly")}function H(t){if(!Le.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 v(t,e){B(e,"chunkSize");let o=[];for(let s=0;s<t.length;s+=e)o.push(t.slice(s,s+e));return o}async function N(t,e){B(e,"concurrency");let o=[],s=[];for(let n of t){let r=Promise.resolve().then(()=>n()).then(i=>{o.push(i)});if(s.push(r),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),o}function ut(t){return t.startsWith("sh")?"1":t.startsWith("sz")||t.startsWith("bj")?"0":t.startsWith("6")?"1":"0"}var A={};Ct(A,{getAShareCodeList:()=>ee,getAllHKQuotesByCodes:()=>se,getAllQuotesByCodes:()=>oe,getAllUSQuotesByCodes:()=>ie,getFullQuotes:()=>ct,getFundFlow:()=>Zt,getFundQuotes:()=>Xt,getHKCodeList:()=>re,getHKQuotes:()=>ft,getPanelLargeOrder:()=>Yt,getSimpleQuotes:()=>Jt,getTodayTimeline:()=>te,getUSCodeList:()=>ne,getUSQuotes:()=>pt,parseFullQuote:()=>Et,parseFundFlow:()=>qt,parseFundQuote:()=>Dt,parseHKQuote:()=>vt,parsePanelLargeOrder:()=>Ht,parseSimpleQuote:()=>jt,parseUSQuote:()=>Nt});function Et(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 o=[];for(let s=0;s<5;s++)o.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:o,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 jt(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 qt(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 Ht(t){return{buyLargeRatio:g(t[0]),buySmallRatio:g(t[1]),sellLargeRatio:g(t[2]),sellSmallRatio:g(t[3]),raw:t}}function vt(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=>Et(s.fields))}async function Jt(t,e){if(!e||e.length===0)return[];let o=e.map(n=>`s_${n}`);return(await t.getTencentQuote(o.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>jt(n.fields))}async function Zt(t,e){if(!e||e.length===0)return[];let o=e.map(n=>`ff_${n}`);return(await t.getTencentQuote(o.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 o=e.map(n=>`s_pk${n}`);return(await t.getTencentQuote(o.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>Ht(n.fields))}async function ft(t,e){if(!e||e.length===0)return[];let o=e.map(n=>`hk${n}`);return(await t.getTencentQuote(o.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>vt(n.fields))}async function pt(t,e){if(!e||e.length===0)return[];let o=e.map(n=>`us${n}`);return(await t.getTencentQuote(o.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>Nt(n.fields))}async function Xt(t,e){if(!e||e.length===0)return[];let o=e.map(n=>`jj${n}`);return(await t.getTencentQuote(o.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>Dt(n.fields))}async function te(t,e){let o=t.getTimeout(),s=new AbortController,n=setTimeout(()=>s.abort(),o);try{let r=await fetch(`${St}?code=${e}`,{signal:s.signal});if(!r.ok)throw new Error(`HTTP error! status: ${r.status}`);let i=await r.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,T=b>0?S/b:0;return{time:y,price:parseFloat(m[1])||0,volume:b,amount:S,avgPrice:Math.round(T*100)/100}});return{code:e,date:c,data:d}}finally{clearTimeout(n)}}async function ee(t,e=!0){let o=t.getTimeout(),s=new AbortController,n=setTimeout(()=>s.abort(),o);try{let r=await fetch(bt,{signal:s.signal});if(!r.ok)throw new Error(`HTTP error! status: ${r.status}`);let a=(await r.json()).list||[];return e?a:a.map(l=>l.replace(/^(sh|sz|bj)/,""))}finally{clearTimeout(n)}}async function ne(t,e=!0){let o=t.getTimeout(),s=new AbortController,n=setTimeout(()=>s.abort(),o);try{let r=await fetch(wt,{signal:s.signal});if(!r.ok)throw new Error(`HTTP error! status: ${r.status}`);let a=(await r.json()).list||[];return e?a:a.map(l=>l.replace(/^\d{3}\./,""))}finally{clearTimeout(n)}}async function re(t){let e=t.getTimeout(),o=new AbortController,s=setTimeout(()=>o.abort(),e);try{let n=await fetch(Mt,{signal:o.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,o={}){let{batchSize:s=$,concurrency:n=W,onProgress:r}=o;B(s,"batchSize"),B(n,"concurrency");let i=Math.min(s,F),a=v(e,i),l=a.length,c=0,f=a.map(p=>async()=>{let m=await ct(t,p);return c++,r&&r(c,l),m});return(await N(f,n)).flat()}async function se(t,e,o={}){let{batchSize:s=$,concurrency:n=W,onProgress:r}=o;B(s,"batchSize"),B(n,"concurrency");let i=Math.min(s,F),a=v(e,i),l=a.length,c=0,f=a.map(p=>async()=>{let m=await ft(t,p);return c++,r&&r(c,l),m});return(await N(f,n)).flat()}async function ie(t,e,o={}){let{batchSize:s=$,concurrency:n=W,onProgress:r}=o;B(s,"batchSize"),B(n,"concurrency");let i=Math.min(s,F),a=v(e,i),l=a.length,c=0,f=a.map(p=>async()=>{let m=await pt(t,p);return c++,r&&r(c,l),m});return(await N(f,n)).flat()}var P={};Ct(P,{getConceptConstituents:()=>Ce,getConceptKline:()=>Re,getConceptList:()=>Wt,getConceptMinuteKline:()=>Se,getConceptSpot:()=>ye,getHKHistoryKline:()=>ue,getHistoryKline:()=>ae,getIndustryConstituents:()=>de,getIndustryKline:()=>me,getIndustryList:()=>$t,getIndustryMinuteKline:()=>ge,getIndustrySpot:()=>pe,getMinuteKline:()=>le,getUSHistoryKline:()=>ce});async function ae(t,e,o={}){let{period:s="daily",adjust:n="hfq",startDate:r="19700101",endDate:i="20500101"}=o;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:r,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,T,K,k,L,_,x,O,q]=y.split(",");return{date:R,code:a,open:u(S),close:u(b),high:u(T),low:u(K),volume:u(k),amount:u(L),amplitude:u(_),changePercent:u(x),change:u(O),turnoverRate:u(q)}})}async function le(t,e,o={}){let{period:s="1",adjust:n="hfq",startDate:r="1979-09-01 09:32:00",endDate:i="2222-01-01 09:32:00"}=o;H(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=`${Tt}?${c.toString()}`,p=(await t.get(f,{responseType:"json"}))?.data?.trends;if(!Array.isArray(p)||p.length===0)return[];let m=r.replace("T"," ").slice(0,16),h=i.replace("T"," ").slice(0,16);return p.map(y=>{let[R,S,b,T,K,k,L,_]=y.split(",");return{time:R,open:u(S),close:u(b),high:u(T),low:u(K),volume:u(k),amount:u(L),avgPrice:u(_)}}).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=r.replace("T"," ").slice(0,16),y=i.replace("T"," ").slice(0,16);return m.map(R=>{let[S,b,T,K,k,L,_,x,O,q,ht]=R.split(",");return{time:S,open:u(b),close:u(T),high:u(K),low:u(k),changePercent:u(O),change:u(q),volume:u(L),amount:u(_),amplitude:u(x),turnoverRate:u(ht)}}).filter(R=>R.time>=h&&R.time<=y)}}async function ue(t,e,o={}){let{period:s="daily",adjust:n="hfq",startDate:r="19700101",endDate:i="20500101"}=o;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:r,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,T,K,k,L,_,x,O,q,ht]=R.split(",");return{date:S,code:a,name:y,open:u(b),close:u(T),high:u(K),low:u(k),volume:u(L),amount:u(_),amplitude:u(x),changePercent:u(O),change:u(q),turnoverRate:u(ht)}})}async function ce(t,e,o={}){let{period:s="daily",adjust:n="hfq",startDate:r="19700101",endDate:i="20500101"}=o;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:r,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,T,K,k,L,_,x,O,q]=y.split(",");return{date:R,code:m,name:h,open:u(S),close:u(b),high:u(T),low:u(K),volume:u(k),amount:u(L),amplitude:u(_),changePercent:u(x),change:u(O),turnoverRate:u(q)}})}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 o=Qt.get(e);if(!o)throw new Error(`\u672A\u627E\u5230\u884C\u4E1A\u677F\u5757: ${e}`);return o}function w(t){if(t==null)return null;let e=String(t);return u(e)}async function fe(t,e,o,s,n=100,r){let i=[],a=1,l=0;do{let c=new URLSearchParams({...o,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)=>r(h,i.length+y+1));i.push(...m),a++}while(i.length<l);return i}async function $t(t){let s=await fe(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,r)=>({rank:r,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,r)=>(r.changePercent??0)-(n.changePercent??0)),s.forEach((n,r)=>{n.rank=r+1}),s}async function pe(t,e){let o=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.${o}`}),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 de(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 fe(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,(r,i)=>({rank:i,code:String(r.f12??""),name:String(r.f14??""),price:w(r.f2),changePercent:w(r.f3),change:w(r.f4),volume:w(r.f5),amount:w(r.f6),amplitude:w(r.f7),high:w(r.f15),low:w(r.f16),open:w(r.f17),prevClose:w(r.f18),turnoverRate:w(r.f8),pe:w(r.f9),pb:w(r.f23)}))}async function me(t,e,o={}){let{period:s="daily",adjust:n="",startDate:r="19700101",endDate:i="20500101"}=o;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:r,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,T,K,k,L,_,x,O]=h.split(",");return{date:y,open:u(R),close:u(S),high:u(b),low:u(T),changePercent:u(_),change:u(x),volume:u(K),amount:u(k),amplitude:u(L),turnoverRate:u(O)}})}async function ge(t,e,o={}){let{period:s="5"}=o;H(s);let n=await dt(t,e);if(s==="1"){let r=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=`${_t}?${r.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 r=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}?${r.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,T,K]=c.split(",");return{time:f,open:u(d),close:u(p),high:u(m),low:u(h),changePercent:u(b),change:u(T),volume:u(y),amount:u(R),amplitude:u(S),turnoverRate:u(K)}})}}var Ft=null;function M(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 o=Ft.get(e);if(!o)throw new Error(`\u672A\u627E\u5230\u6982\u5FF5\u677F\u5757: ${e}`);return o}async function he(t,e,o,s,n=100,r){let i=[],a=1,l=0;do{let c=new URLSearchParams({...o,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)=>r(h,i.length+y+1));i.push(...m),a++}while(i.length<l);return i}async function Wt(t){let s=await he(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,r)=>({rank:r,name:String(n.f14??""),code:String(n.f12??""),price:M(n.f2),change:M(n.f4),changePercent:M(n.f3),totalMarketCap:M(n.f20),turnoverRate:M(n.f8),riseCount:M(n.f104),fallCount:M(n.f105),leadingStock:n.f128?String(n.f128):null,leadingStockChangePercent:M(n.f136)}));return s.sort((n,r)=>(r.changePercent??0)-(n.changePercent??0)),s.forEach((n,r)=>{n.rank=r+1}),s}async function ye(t,e){let o=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.${o}`}),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 Ce(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 he(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,(r,i)=>({rank:i,code:String(r.f12??""),name:String(r.f14??""),price:M(r.f2),changePercent:M(r.f3),change:M(r.f4),volume:M(r.f5),amount:M(r.f6),amplitude:M(r.f7),high:M(r.f15),low:M(r.f16),open:M(r.f17),prevClose:M(r.f18),turnoverRate:M(r.f8),pe:M(r.f9),pb:M(r.f23)}))}async function Re(t,e,o={}){let{period:s="daily",adjust:n="",startDate:r="19700101",endDate:i="20500101"}=o;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:r,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,T,K,k,L,_,x,O]=h.split(",");return{date:y,open:u(R),close:u(S),high:u(b),low:u(T),changePercent:u(_),change:u(x),volume:u(K),amount:u(k),amplitude:u(L),turnoverRate:u(O)}})}async function Se(t,e,o={}){let{period:s="5"}=o;H(s);let n=await mt(t,e);if(s==="1"){let r=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}?${r.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 r=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}?${r.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,T,K]=c.split(",");return{time:f,open:u(d),close:u(p),high:u(m),low:u(h),changePercent:u(b),change:u(T),volume:u(y),amount:u(R),amplitude:u(S),turnoverRate:u(K)}})}}function V(t,e=2){let o=Math.pow(10,e);return Math.round(t*o)/o}function E(t,e){let o=[];for(let s=0;s<t.length;s++){if(s<e-1){o.push(null);continue}let n=0,r=0;for(let i=s-e+1;i<=s;i++)t[i]!==null&&(n+=t[i],r++);o.push(r===e?V(n/e):null)}return o}function j(t,e){let o=[],s=2/(e+1),n=null,r=!1;for(let i=0;i<t.length;i++){if(i<e-1){o.push(null);continue}if(!r){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,r=!0),o.push(n!==null?V(n):null);continue}let a=t[i];a===null?o.push(n!==null?V(n):null):(n=s*a+(1-s)*n,o.push(V(n)))}return o}function gt(t,e){let o=[],s=Array.from({length:e},(r,i)=>i+1),n=s.reduce((r,i)=>r+i,0);for(let r=0;r<t.length;r++){if(r<e-1){o.push(null);continue}let i=0,a=!0;for(let l=0;l<e;l++){let c=t[r-e+1+l];if(c===null){a=!1;break}i+=c*s[l]}o.push(a?V(i/n):null)}return o}function G(t,e={}){let{periods:o=[5,10,20,30,60,120,250],type:s="sma"}=e,n=s==="ema"?j:s==="wma"?gt:E,r={};for(let i of o)r[`ma${i}`]=n(t,i);return t.map((i,a)=>{let l={};for(let c of o)l[`ma${c}`]=r[`ma${c}`][a];return l})}function be(t,e=2){let o=Math.pow(10,e);return Math.round(t*o)/o}function J(t,e={}){let{short:o=12,long:s=26,signal:n=9}=e,r=j(t,o),i=j(t,s),a=t.map((c,f)=>r[f]===null||i[f]===null?null:r[f]-i[f]),l=j(a,n);return t.map((c,f)=>({dif:a[f]!==null?be(a[f]):null,dea:l[f],macd:a[f]!==null&&l[f]!==null?be((a[f]-l[f])*2):null}))}function zt(t,e=2){let o=Math.pow(10,e);return Math.round(t*o)/o}function Ie(t,e,o){let s=[];for(let n=0;n<t.length;n++){if(n<e-1||o[n]===null){s.push(null);continue}let r=0,i=0;for(let a=n-e+1;a<=n;a++)t[a]!==null&&o[n]!==null&&(r+=Math.pow(t[a]-o[n],2),i++);s.push(i===e?Math.sqrt(r/e):null)}return s}function Z(t,e={}){let{period:o=20,stdDev:s=2}=e,n=E(t,o),r=Ie(t,o,n);return t.map((i,a)=>{if(n[a]===null||r[a]===null)return{mid:null,upper:null,lower:null,bandwidth:null};let l=n[a]+s*r[a],c=n[a]-s*r[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 o=Math.pow(10,e);return Math.round(t*o)/o}function Y(t,e={}){let{period:o=9,kPeriod:s=3,dPeriod:n=3}=e,r=[],i=50,a=50;for(let l=0;l<t.length;l++){if(l<o-1){r.push({k:null,d:null,j:null});continue}let c=-1/0,f=1/0,d=!0;for(let y=l-o+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){r.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;r.push({k:Vt(i),d:Vt(a),j:Vt(h)})}return r}function xe(t,e=2){let o=Math.pow(10,e);return Math.round(t*o)/o}function X(t,e={}){let{periods:o=[6,12,24]}=e,s=[null];for(let r=1;r<t.length;r++)t[r]===null||t[r-1]===null?s.push(null):s.push(t[r]-t[r-1]);let n={};for(let r of o){let i=[],a=0,l=0;for(let c=0;c<t.length;c++){if(c<r){i.push(null),s[c]!==null&&(s[c]>0?a+=s[c]:l+=Math.abs(s[c]));continue}if(c===r)a=a/r,l=l/r;else{let f=s[c]??0,d=f>0?f:0,p=f<0?Math.abs(f):0;a=(a*(r-1)+d)/r,l=(l*(r-1)+p)/r}if(l===0)i.push(100);else if(a===0)i.push(0);else{let f=a/l;i.push(xe(100-100/(1+f)))}}n[`rsi${r}`]=i}return t.map((r,i)=>{let a={};for(let l of o)a[`rsi${l}`]=n[`rsi${l}`][i];return a})}function Oe(t,e=2){let o=Math.pow(10,e);return Math.round(t*o)/o}function tt(t,e={}){let{periods:o=[6,10]}=e,s={};for(let n of o){let r=[];for(let i=0;i<t.length;i++){if(i<n-1){r.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){r.push(null);continue}let d=(a-f)/(a-l)*100;r.push(Oe(d))}s[`wr${n}`]=r}return t.map((n,r)=>{let i={};for(let a of o)i[`wr${a}`]=s[`wr${a}`][r];return i})}function Ue(t,e=2){let o=Math.pow(10,e);return Math.round(t*o)/o}function et(t,e={}){let{periods:o=[6,12,24]}=e,s={};for(let n of o){let r=E(t,n),i=[];for(let a=0;a<t.length;a++)if(t[a]===null||r[a]===null||r[a]===0)i.push(null);else{let l=(t[a]-r[a])/r[a]*100;i.push(Ue(l))}s[`bias${n}`]=i}return t.map((n,r)=>{let i={};for(let a of o)i[`bias${a}`]=s[`bias${a}`][r];return i})}function Be(t,e=2){let o=Math.pow(10,e);return Math.round(t*o)/o}function nt(t,e={}){let{period:o=14}=e,s=[],n=t.map(r=>r.high===null||r.low===null||r.close===null?null:(r.high+r.low+r.close)/3);for(let r=0;r<t.length;r++){if(r<o-1){s.push({cci:null});continue}let i=0,a=0;for(let d=r-o+1;d<=r;d++)n[d]!==null&&(i+=n[d],a++);if(a!==o||n[r]===null){s.push({cci:null});continue}let l=i/o,c=0;for(let d=r-o+1;d<=r;d++)c+=Math.abs(n[d]-l);let f=c/o;if(f===0)s.push({cci:0});else{let d=(n[r]-l)/(.015*f);s.push({cci:Be(d)})}}return s}function Gt(t,e=2){let o=Math.pow(10,e);return Math.round(t*o)/o}function rt(t,e={}){let{period:o=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 r=null;for(let i=0;i<t.length;i++){if(i<o-1){s.push({tr:n[i]!==null?Gt(n[i]):null,atr:null});continue}if(i===o-1){let a=0,l=0;for(let c=0;c<o;c++)n[c]!==null&&(a+=n[c],l++);l===o&&(r=a/o)}else r!==null&&n[i]!==null&&(r=(r*(o-1)+n[i])/o);s.push({tr:n[i]!==null?Gt(n[i]):null,atr:r!==null?Gt(r):null})}return s}function ot(t,e={}){if(t.length===0)return[];let o=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(o,typeof e.ma=="object"?e.ma:{}):null,r=e.macd?J(o,typeof e.macd=="object"?e.macd:{}):null,i=e.boll?Z(o,typeof e.boll=="object"?e.boll:{}):null,a=e.kdj?Y(s,typeof e.kdj=="object"?e.kdj:{}):null,l=e.rsi?X(o,typeof e.rsi=="object"?e.rsi:{}):null,c=e.wr?tt(s,typeof e.wr=="object"?e.wr:{}):null,f=e.bias?et(o,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]},...r&&{macd:r[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 A.getFullQuotes(this.client,e)}getSimpleQuotes(e){return A.getSimpleQuotes(this.client,e)}getHKQuotes(e){return A.getHKQuotes(this.client,e)}getUSQuotes(e){return A.getUSQuotes(this.client,e)}getFundQuotes(e){return A.getFundQuotes(this.client,e)}getFundFlow(e){return A.getFundFlow(this.client,e)}getPanelLargeOrder(e){return A.getPanelLargeOrder(this.client,e)}getTodayTimeline(e){return A.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,o){return P.getIndustryKline(this.client,e,o)}getIndustryMinuteKline(e,o){return P.getIndustryMinuteKline(this.client,e,o)}getConceptList(){return P.getConceptList(this.client)}getConceptSpot(e){return P.getConceptSpot(this.client,e)}getConceptConstituents(e){return P.getConceptConstituents(this.client,e)}getConceptKline(e,o){return P.getConceptKline(this.client,e,o)}getConceptMinuteKline(e,o){return P.getConceptMinuteKline(this.client,e,o)}getHistoryKline(e,o){return P.getHistoryKline(this.client,e,o)}getMinuteKline(e,o){return P.getMinuteKline(this.client,e,o)}getHKHistoryKline(e,o){return P.getHKHistoryKline(this.client,e,o)}getUSHistoryKline(e,o){return P.getUSHistoryKline(this.client,e,o)}getAShareCodeList(e=!0){return A.getAShareCodeList(this.client,e)}getUSCodeList(e=!0){return A.getUSCodeList(this.client,e)}getHKCodeList(){return A.getHKCodeList(this.client)}async getAllAShareQuotes(e={}){let o=await this.getAShareCodeList();return this.getAllQuotesByCodes(o,e)}async getAllHKShareQuotes(e={}){let o=await this.getHKCodeList();return A.getAllHKQuotesByCodes(this.client,o,e)}async getAllUSShareQuotes(e={}){let o=await this.getUSCodeList(!1);return A.getAllUSQuotesByCodes(this.client,o,e)}getAllQuotesByCodes(e,o={}){return A.getAllQuotesByCodes(this.client,e,o)}async batchRaw(e){return this.client.getTencentQuote(e)}detectMarket(e){return/^\d{3}\.[A-Z]+$/i.test(e)?"US":/^\d{5}$/.test(e)?"HK":"A"}safeMax(e,o=0){return!e||e.length===0?o:Math.max(...e)}calcRequiredLookback(e){let o=0,s=!1;if(e.ma){let r=typeof e.ma=="object"?e.ma:{},i=r.periods??[5,10,20,30,60,120,250],a=r.type??"sma";o=Math.max(o,this.safeMax(i,20)),a==="ema"&&(s=!0)}if(e.macd){let r=typeof e.macd=="object"?e.macd:{},i=r.long??26,a=r.signal??9;o=Math.max(o,i*3+a),s=!0}if(e.boll){let r=typeof e.boll=="object"&&e.boll.period?e.boll.period:20;o=Math.max(o,r)}if(e.kdj){let r=typeof e.kdj=="object"&&e.kdj.period?e.kdj.period:9;o=Math.max(o,r)}if(e.rsi){let r=typeof e.rsi=="object"&&e.rsi.periods?e.rsi.periods:[6,12,24];o=Math.max(o,this.safeMax(r,14)+1)}if(e.wr){let r=typeof e.wr=="object"&&e.wr.periods?e.wr.periods:[6,10];o=Math.max(o,this.safeMax(r,10))}if(e.bias){let r=typeof e.bias=="object"&&e.bias.periods?e.bias.periods:[6,12,24];o=Math.max(o,this.safeMax(r,12))}if(e.cci){let r=typeof e.cci=="object"&&e.cci.period?e.cci.period:14;o=Math.max(o,r)}if(e.atr){let r=typeof e.atr=="object"&&e.atr.period?e.atr.period:14;o=Math.max(o,r)}return Math.ceil(o*(s?1.5:1.2))}calcActualStartDate(e,o,s=1.5){let n=Math.ceil(o*s),r=new Date(parseInt(e.slice(0,4)),parseInt(e.slice(4,6))-1,parseInt(e.slice(6,8)));r.setDate(r.getDate()-n);let i=r.getFullYear(),a=String(r.getMonth()+1).padStart(2,"0"),l=String(r.getDate()).padStart(2,"0");return`${i}${a}${l}`}dateToTimestamp(e){let o=e.includes("-")?e:`${e.slice(0,4)}-${e.slice(4,6)}-${e.slice(6,8)}`;return new Date(o).getTime()}async getKlineWithIndicators(e,o={}){let{startDate:s,endDate:n,indicators:r={}}=o,i=o.market??this.detectMarket(e),a=this.calcRequiredLookback(r),c={A:1.5,HK:1.46,US:1.45}[i],f=s?this.calcActualStartDate(s,a,c):void 0,d={period:o.period,adjust:o.adjust,startDate:f,endDate:o.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,r);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}},we=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 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});
package/dist/index.d.cts CHANGED
@@ -573,6 +573,19 @@ type ConceptBoardMinuteTimeline = IndustryBoardMinuteTimeline;
573
573
  * 概念板块分钟 K 线(结构同行业板块)
574
574
  */
575
575
  type ConceptBoardMinuteKline = IndustryBoardMinuteKline;
576
+ /**
577
+ * 股票搜索结果
578
+ */
579
+ interface SearchResult {
580
+ /** 股票代码(完整,如 sh600519) */
581
+ code: string;
582
+ /** 股票名称 */
583
+ name: string;
584
+ /** 市场标识 (sh/sz/hk/us) */
585
+ market: string;
586
+ /** 资产类别 (GP-A/GP/KJ 等) */
587
+ type: string;
588
+ }
576
589
 
577
590
  /**
578
591
  * 腾讯财经 - 批量操作
@@ -590,6 +603,18 @@ interface GetAllAShareQuotesOptions {
590
603
  onProgress?: (completed: number, total: number) => void;
591
604
  }
592
605
 
606
+ /**
607
+ * 腾讯 Smartbox 搜索接口
608
+ * 支持浏览器(JSONP)和 Node.js(fetch)双端
609
+ */
610
+
611
+ /** 全局变量声明(浏览器环境)*/
612
+ declare global {
613
+ interface Window {
614
+ v_hint?: string;
615
+ }
616
+ }
617
+
593
618
  /**
594
619
  * 东方财富 - A 股 K 线
595
620
  */
@@ -1024,6 +1049,11 @@ declare class StockSDK {
1024
1049
  * 获取美股历史 K 线(日/周/月)
1025
1050
  */
1026
1051
  getUSHistoryKline(symbol: string, options?: USKlineOptions): Promise<HKUSHistoryKline[]>;
1052
+ /**
1053
+ * 搜索股票
1054
+ * @param keyword 关键词(股票代码、名称、拼音)
1055
+ */
1056
+ search(keyword: string): Promise<SearchResult[]>;
1027
1057
  /**
1028
1058
  * 从远程获取 A 股代码列表
1029
1059
  * @param includeExchange 是否包含交易所前缀(如 sh、sz、bj),默认 true
@@ -1062,6 +1092,11 @@ declare class StockSDK {
1062
1092
  key: string;
1063
1093
  fields: string[];
1064
1094
  }[]>;
1095
+ /**
1096
+ * 获取 A 股交易日历
1097
+ * @returns 交易日期字符串数组,格式如 ['1990-12-19', '1990-12-20', ...]
1098
+ */
1099
+ getTradingCalendar(): Promise<string[]>;
1065
1100
  /**
1066
1101
  * 市场类型识别
1067
1102
  */
@@ -1101,4 +1136,4 @@ declare class StockSDK {
1101
1136
  }): Promise<KlineWithIndicators<HistoryKline | HKUSHistoryKline>[]>;
1102
1137
  }
1103
1138
 
1104
- 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 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 };
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 };
package/dist/index.d.ts CHANGED
@@ -573,6 +573,19 @@ type ConceptBoardMinuteTimeline = IndustryBoardMinuteTimeline;
573
573
  * 概念板块分钟 K 线(结构同行业板块)
574
574
  */
575
575
  type ConceptBoardMinuteKline = IndustryBoardMinuteKline;
576
+ /**
577
+ * 股票搜索结果
578
+ */
579
+ interface SearchResult {
580
+ /** 股票代码(完整,如 sh600519) */
581
+ code: string;
582
+ /** 股票名称 */
583
+ name: string;
584
+ /** 市场标识 (sh/sz/hk/us) */
585
+ market: string;
586
+ /** 资产类别 (GP-A/GP/KJ 等) */
587
+ type: string;
588
+ }
576
589
 
577
590
  /**
578
591
  * 腾讯财经 - 批量操作
@@ -590,6 +603,18 @@ interface GetAllAShareQuotesOptions {
590
603
  onProgress?: (completed: number, total: number) => void;
591
604
  }
592
605
 
606
+ /**
607
+ * 腾讯 Smartbox 搜索接口
608
+ * 支持浏览器(JSONP)和 Node.js(fetch)双端
609
+ */
610
+
611
+ /** 全局变量声明(浏览器环境)*/
612
+ declare global {
613
+ interface Window {
614
+ v_hint?: string;
615
+ }
616
+ }
617
+
593
618
  /**
594
619
  * 东方财富 - A 股 K 线
595
620
  */
@@ -1024,6 +1049,11 @@ declare class StockSDK {
1024
1049
  * 获取美股历史 K 线(日/周/月)
1025
1050
  */
1026
1051
  getUSHistoryKline(symbol: string, options?: USKlineOptions): Promise<HKUSHistoryKline[]>;
1052
+ /**
1053
+ * 搜索股票
1054
+ * @param keyword 关键词(股票代码、名称、拼音)
1055
+ */
1056
+ search(keyword: string): Promise<SearchResult[]>;
1027
1057
  /**
1028
1058
  * 从远程获取 A 股代码列表
1029
1059
  * @param includeExchange 是否包含交易所前缀(如 sh、sz、bj),默认 true
@@ -1062,6 +1092,11 @@ declare class StockSDK {
1062
1092
  key: string;
1063
1093
  fields: string[];
1064
1094
  }[]>;
1095
+ /**
1096
+ * 获取 A 股交易日历
1097
+ * @returns 交易日期字符串数组,格式如 ['1990-12-19', '1990-12-20', ...]
1098
+ */
1099
+ getTradingCalendar(): Promise<string[]>;
1065
1100
  /**
1066
1101
  * 市场类型识别
1067
1102
  */
@@ -1101,4 +1136,4 @@ declare class StockSDK {
1101
1136
  }): Promise<KlineWithIndicators<HistoryKline | HKUSHistoryKline>[]>;
1102
1137
  }
1103
1138
 
1104
- 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 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 };
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 };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- var be=Object.defineProperty;var Vt=(t,e)=>{for(var o in e)be(t,o,{get:e[o],enumerable:!0})};function z(t){return new TextDecoder("gbk").decode(t)}function V(t){let e=t.split(";").map(s=>s.trim()).filter(Boolean),o=[];for(let s of e){let n=s.indexOf("=");if(n<0)continue;let r=s.slice(0,n).trim();r.startsWith("v_")&&(r=r.slice(2));let i=s.slice(n+1).trim();i.startsWith('"')&&i.endsWith('"')&&(i=i.slice(1,-1));let a=i.split("~");o.push({key:r,fields:a})}return o}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";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",Mt="https://63.push2his.eastmoney.com/api/qt/stock/kline/get",Tt="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",kt="https://79.push2.eastmoney.com/api/qt/clist/get",Lt="https://91.push2.eastmoney.com/api/qt/stock/get",_t="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,o={}){let s=new AbortController,n=setTimeout(()=>s.abort(),this.timeout);try{let r=await fetch(e,{signal:s.signal});if(!r.ok)throw new Error(`HTTP error! status: ${r.status}`);switch(o.responseType){case"json":return await r.json();case"arraybuffer":return await r.arrayBuffer();default:return await r.text()}}finally{clearTimeout(n)}}async getTencentQuote(e){let o=`${this.baseUrl}/?q=${encodeURIComponent(e)}`,s=await this.get(o,{responseType:"arraybuffer"}),n=z(s);return V(n)}};var we=new Set(["daily","weekly","monthly"]),Me=new Set(["1","5","15","30","60"]),Te=new Set(["","qfq","hfq"]);function B(t,e){if(!Number.isFinite(t)||!Number.isInteger(t)||t<=0)throw new RangeError(`${e} must be a positive integer`)}function U(t){if(!we.has(t))throw new RangeError("period must be one of: daily, weekly, monthly")}function j(t){if(!Me.has(t))throw new RangeError("period must be one of: 1, 5, 15, 30, 60")}function I(t){if(!Te.has(t))throw new RangeError("adjust must be one of: '', 'qfq', 'hfq'")}function v(t,e){B(e,"chunkSize");let o=[];for(let s=0;s<t.length;s+=e)o.push(t.slice(s,s+e));return o}async function N(t,e){B(e,"concurrency");let o=[],s=[];for(let n of t){let r=Promise.resolve().then(()=>n()).then(i=>{o.push(i)});if(s.push(r),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),o}function Y(t){return t.startsWith("sh")?"1":t.startsWith("sz")||t.startsWith("bj")?"0":t.startsWith("6")?"1":"0"}var A={};Vt(A,{getAShareCodeList:()=>te,getAllHKQuotesByCodes:()=>oe,getAllQuotesByCodes:()=>re,getAllUSQuotesByCodes:()=>se,getFullQuotes:()=>X,getFundFlow:()=>Jt,getFundQuotes:()=>Yt,getHKCodeList:()=>ne,getHKQuotes:()=>tt,getPanelLargeOrder:()=>Zt,getSimpleQuotes:()=>Gt,getTodayTimeline:()=>Xt,getUSCodeList:()=>ee,getUSQuotes:()=>et,parseFullQuote:()=>Ot,parseFundFlow:()=>Bt,parseFundQuote:()=>Ht,parseHKQuote:()=>jt,parsePanelLargeOrder:()=>Et,parseSimpleQuote:()=>Ut,parseUSQuote:()=>qt});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 o=[];for(let s=0;s<5;s++)o.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:o,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 Bt(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 Et(t){return{buyLargeRatio:g(t[0]),buySmallRatio:g(t[1]),sellLargeRatio:g(t[2]),sellSmallRatio:g(t[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]),lotSize:R(t[40]),circulatingMarketCap:R(t[44]),totalMarketCap:R(t[45]),currency:t[t.length-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]),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 Ht(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 Gt(t,e){if(!e||e.length===0)return[];let o=e.map(n=>`s_${n}`);return(await t.getTencentQuote(o.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>Ut(n.fields))}async function Jt(t,e){if(!e||e.length===0)return[];let o=e.map(n=>`ff_${n}`);return(await t.getTencentQuote(o.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>Bt(n.fields))}async function Zt(t,e){if(!e||e.length===0)return[];let o=e.map(n=>`s_pk${n}`);return(await t.getTencentQuote(o.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>Et(n.fields))}async function tt(t,e){if(!e||e.length===0)return[];let o=e.map(n=>`hk${n}`);return(await t.getTencentQuote(o.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>jt(n.fields))}async function et(t,e){if(!e||e.length===0)return[];let o=e.map(n=>`us${n}`);return(await t.getTencentQuote(o.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 o=e.map(n=>`jj${n}`);return(await t.getTencentQuote(o.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>Ht(n.fields))}async function Xt(t,e){let o=t.getTimeout(),s=new AbortController,n=setTimeout(()=>s.abort(),o);try{let r=await fetch(`${yt}?code=${e}`,{signal:s.signal});if(!r.ok)throw new Error(`HTTP error! status: ${r.status}`);let i=await r.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,T=b>0?S/b:0;return{time:y,price:parseFloat(m[1])||0,volume:b,amount:S,avgPrice:Math.round(T*100)/100}});return{code:e,date:c,data:d}}finally{clearTimeout(n)}}async function te(t,e=!0){let o=t.getTimeout(),s=new AbortController,n=setTimeout(()=>s.abort(),o);try{let r=await fetch(Ct,{signal:s.signal});if(!r.ok)throw new Error(`HTTP error! status: ${r.status}`);let a=(await r.json()).list||[];return e?a:a.map(l=>l.replace(/^(sh|sz|bj)/,""))}finally{clearTimeout(n)}}async function ee(t,e=!0){let o=t.getTimeout(),s=new AbortController,n=setTimeout(()=>s.abort(),o);try{let r=await fetch(Rt,{signal:s.signal});if(!r.ok)throw new Error(`HTTP error! status: ${r.status}`);let a=(await r.json()).list||[];return e?a:a.map(l=>l.replace(/^\d{3}\./,""))}finally{clearTimeout(n)}}async function ne(t){let e=t.getTimeout(),o=new AbortController,s=setTimeout(()=>o.abort(),e);try{let n=await fetch(St,{signal:o.signal});if(!n.ok)throw new Error(`HTTP error! status: ${n.status}`);return(await n.json()).list||[]}finally{clearTimeout(s)}}async function re(t,e,o={}){let{batchSize:s=D,concurrency:n=$,onProgress:r}=o;B(s,"batchSize"),B(n,"concurrency");let i=Math.min(s,Q),a=v(e,i),l=a.length,c=0,f=a.map(p=>async()=>{let m=await X(t,p);return c++,r&&r(c,l),m});return(await N(f,n)).flat()}async function oe(t,e,o={}){let{batchSize:s=D,concurrency:n=$,onProgress:r}=o;B(s,"batchSize"),B(n,"concurrency");let i=Math.min(s,Q),a=v(e,i),l=a.length,c=0,f=a.map(p=>async()=>{let m=await tt(t,p);return c++,r&&r(c,l),m});return(await N(f,n)).flat()}async function se(t,e,o={}){let{batchSize:s=D,concurrency:n=$,onProgress:r}=o;B(s,"batchSize"),B(n,"concurrency");let i=Math.min(s,Q),a=v(e,i),l=a.length,c=0,f=a.map(p=>async()=>{let m=await et(t,p);return c++,r&&r(c,l),m});return(await N(f,n)).flat()}var P={};Vt(P,{getConceptConstituents:()=>ye,getConceptKline:()=>Ce,getConceptList:()=>Qt,getConceptMinuteKline:()=>Re,getConceptSpot:()=>he,getHKHistoryKline:()=>le,getHistoryKline:()=>ie,getIndustryConstituents:()=>pe,getIndustryKline:()=>de,getIndustryList:()=>Nt,getIndustryMinuteKline:()=>me,getIndustrySpot:()=>fe,getMinuteKline:()=>ae,getUSHistoryKline:()=>ue});async function ie(t,e,o={}){let{period:s="daily",adjust:n="hfq",startDate:r="19700101",endDate:i="20500101"}=o;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:r,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,T,K,k,L,_,x,O,E]=y.split(",");return{date:C,code:a,open:u(S),close:u(b),high:u(T),low:u(K),volume:u(k),amount:u(L),amplitude:u(_),changePercent:u(x),change:u(O),turnoverRate:u(E)}})}async function ae(t,e,o={}){let{period:s="1",adjust:n="hfq",startDate:r="1979-09-01 09:32:00",endDate:i="2222-01-01 09:32:00"}=o;j(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=r.replace("T"," ").slice(0,16),h=i.replace("T"," ").slice(0,16);return p.map(y=>{let[C,S,b,T,K,k,L,_]=y.split(",");return{time:C,open:u(S),close:u(b),high:u(T),low:u(K),volume:u(k),amount:u(L),avgPrice:u(_)}}).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=r.replace("T"," ").slice(0,16),y=i.replace("T"," ").slice(0,16);return m.map(C=>{let[S,b,T,K,k,L,_,x,O,E,gt]=C.split(",");return{time:S,open:u(b),close:u(T),high:u(K),low:u(k),changePercent:u(O),change:u(E),volume:u(L),amount:u(_),amplitude:u(x),turnoverRate:u(gt)}}).filter(C=>C.time>=h&&C.time<=y)}}async function le(t,e,o={}){let{period:s="daily",adjust:n="hfq",startDate:r="19700101",endDate:i="20500101"}=o;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:r,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,T,K,k,L,_,x,O,E,gt]=C.split(",");return{date:S,code:a,name:y,open:u(b),close:u(T),high:u(K),low:u(k),volume:u(L),amount:u(_),amplitude:u(x),changePercent:u(O),change:u(E),turnoverRate:u(gt)}})}async function ue(t,e,o={}){let{period:s="daily",adjust:n="hfq",startDate:r="19700101",endDate:i="20500101"}=o;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:r,end:i,lmt:"1000000"}),f=`${Mt}?${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,T,K,k,L,_,x,O,E]=y.split(",");return{date:C,code:m,name:h,open:u(S),close:u(b),high:u(T),low:u(K),volume:u(k),amount:u(L),amplitude:u(_),changePercent:u(x),change:u(O),turnoverRate:u(E)}})}var vt=null;async function nt(t,e){if(e.startsWith("BK"))return e;if(!vt){let s=await Nt(t);vt=new Map(s.map(n=>[n.name,n.code]))}let o=vt.get(e);if(!o)throw new Error(`\u672A\u627E\u5230\u884C\u4E1A\u677F\u5757: ${e}`);return o}function w(t){if(t==null)return null;let e=String(t);return u(e)}async function ce(t,e,o,s,n=100,r){let i=[],a=1,l=0;do{let c=new URLSearchParams({...o,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)=>r(h,i.length+y+1));i.push(...m),a++}while(i.length<l);return i}async function Nt(t){let s=await ce(t,Tt,{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,r)=>({rank:r,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,r)=>(r.changePercent??0)-(n.changePercent??0)),s.forEach((n,r)=>{n.rank=r+1}),s}async function fe(t,e){let o=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.${o}`}),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 pe(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 ce(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,(r,i)=>({rank:i,code:String(r.f12??""),name:String(r.f14??""),price:w(r.f2),changePercent:w(r.f3),change:w(r.f4),volume:w(r.f5),amount:w(r.f6),amplitude:w(r.f7),high:w(r.f15),low:w(r.f16),open:w(r.f17),prevClose:w(r.f18),turnoverRate:w(r.f8),pe:w(r.f9),pb:w(r.f23)}))}async function de(t,e,o={}){let{period:s="daily",adjust:n="",startDate:r="19700101",endDate:i="20500101"}=o;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:r,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,T,K,k,L,_,x,O]=h.split(",");return{date:y,open:u(C),close:u(S),high:u(b),low:u(T),changePercent:u(_),change:u(x),volume:u(K),amount:u(k),amplitude:u(L),turnoverRate:u(O)}})}async function me(t,e,o={}){let{period:s="5"}=o;j(s);let n=await nt(t,e);if(s==="1"){let r=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}?${r.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 r=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}?${r.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,T,K]=c.split(",");return{time:f,open:u(d),close:u(p),high:u(m),low:u(h),changePercent:u(b),change:u(T),volume:u(y),amount:u(C),amplitude:u(S),turnoverRate:u(K)}})}}var Dt=null;function M(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 o=Dt.get(e);if(!o)throw new Error(`\u672A\u627E\u5230\u6982\u5FF5\u677F\u5757: ${e}`);return o}async function ge(t,e,o,s,n=100,r){let i=[],a=1,l=0;do{let c=new URLSearchParams({...o,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)=>r(h,i.length+y+1));i.push(...m),a++}while(i.length<l);return i}async function Qt(t){let s=await ge(t,kt,{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,r)=>({rank:r,name:String(n.f14??""),code:String(n.f12??""),price:M(n.f2),change:M(n.f4),changePercent:M(n.f3),totalMarketCap:M(n.f20),turnoverRate:M(n.f8),riseCount:M(n.f104),fallCount:M(n.f105),leadingStock:n.f128?String(n.f128):null,leadingStockChangePercent:M(n.f136)}));return s.sort((n,r)=>(r.changePercent??0)-(n.changePercent??0)),s.forEach((n,r)=>{n.rank=r+1}),s}async function he(t,e){let o=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.${o}`}),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 ye(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 ge(t,_t,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,(r,i)=>({rank:i,code:String(r.f12??""),name:String(r.f14??""),price:M(r.f2),changePercent:M(r.f3),change:M(r.f4),volume:M(r.f5),amount:M(r.f6),amplitude:M(r.f7),high:M(r.f15),low:M(r.f16),open:M(r.f17),prevClose:M(r.f18),turnoverRate:M(r.f8),pe:M(r.f9),pb:M(r.f23)}))}async function Ce(t,e,o={}){let{period:s="daily",adjust:n="",startDate:r="19700101",endDate:i="20500101"}=o;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:r,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,T,K,k,L,_,x,O]=h.split(",");return{date:y,open:u(C),close:u(S),high:u(b),low:u(T),changePercent:u(_),change:u(x),volume:u(K),amount:u(k),amplitude:u(L),turnoverRate:u(O)}})}async function Re(t,e,o={}){let{period:s="5"}=o;j(s);let n=await rt(t,e);if(s==="1"){let r=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}?${r.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 r=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}?${r.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,T,K]=c.split(",");return{time:f,open:u(d),close:u(p),high:u(m),low:u(h),changePercent:u(b),change:u(T),volume:u(y),amount:u(C),amplitude:u(S),turnoverRate:u(K)}})}}function W(t,e=2){let o=Math.pow(10,e);return Math.round(t*o)/o}function q(t,e){let o=[];for(let s=0;s<t.length;s++){if(s<e-1){o.push(null);continue}let n=0,r=0;for(let i=s-e+1;i<=s;i++)t[i]!==null&&(n+=t[i],r++);o.push(r===e?W(n/e):null)}return o}function H(t,e){let o=[],s=2/(e+1),n=null,r=!1;for(let i=0;i<t.length;i++){if(i<e-1){o.push(null);continue}if(!r){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,r=!0),o.push(n!==null?W(n):null);continue}let a=t[i];a===null?o.push(n!==null?W(n):null):(n=s*a+(1-s)*n,o.push(W(n)))}return o}function $t(t,e){let o=[],s=Array.from({length:e},(r,i)=>i+1),n=s.reduce((r,i)=>r+i,0);for(let r=0;r<t.length;r++){if(r<e-1){o.push(null);continue}let i=0,a=!0;for(let l=0;l<e;l++){let c=t[r-e+1+l];if(c===null){a=!1;break}i+=c*s[l]}o.push(a?W(i/n):null)}return o}function ot(t,e={}){let{periods:o=[5,10,20,30,60,120,250],type:s="sma"}=e,n=s==="ema"?H:s==="wma"?$t:q,r={};for(let i of o)r[`ma${i}`]=n(t,i);return t.map((i,a)=>{let l={};for(let c of o)l[`ma${c}`]=r[`ma${c}`][a];return l})}function Se(t,e=2){let o=Math.pow(10,e);return Math.round(t*o)/o}function st(t,e={}){let{short:o=12,long:s=26,signal:n=9}=e,r=H(t,o),i=H(t,s),a=t.map((c,f)=>r[f]===null||i[f]===null?null:r[f]-i[f]),l=H(a,n);return t.map((c,f)=>({dif:a[f]!==null?Se(a[f]):null,dea:l[f],macd:a[f]!==null&&l[f]!==null?Se((a[f]-l[f])*2):null}))}function Ft(t,e=2){let o=Math.pow(10,e);return Math.round(t*o)/o}function Ke(t,e,o){let s=[];for(let n=0;n<t.length;n++){if(n<e-1||o[n]===null){s.push(null);continue}let r=0,i=0;for(let a=n-e+1;a<=n;a++)t[a]!==null&&o[n]!==null&&(r+=Math.pow(t[a]-o[n],2),i++);s.push(i===e?Math.sqrt(r/e):null)}return s}function it(t,e={}){let{period:o=20,stdDev:s=2}=e,n=q(t,o),r=Ke(t,o,n);return t.map((i,a)=>{if(n[a]===null||r[a]===null)return{mid:null,upper:null,lower:null,bandwidth:null};let l=n[a]+s*r[a],c=n[a]-s*r[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 o=Math.pow(10,e);return Math.round(t*o)/o}function at(t,e={}){let{period:o=9,kPeriod:s=3,dPeriod:n=3}=e,r=[],i=50,a=50;for(let l=0;l<t.length;l++){if(l<o-1){r.push({k:null,d:null,j:null});continue}let c=-1/0,f=1/0,d=!0;for(let y=l-o+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){r.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;r.push({k:Wt(i),d:Wt(a),j:Wt(h)})}return r}function Ae(t,e=2){let o=Math.pow(10,e);return Math.round(t*o)/o}function lt(t,e={}){let{periods:o=[6,12,24]}=e,s=[null];for(let r=1;r<t.length;r++)t[r]===null||t[r-1]===null?s.push(null):s.push(t[r]-t[r-1]);let n={};for(let r of o){let i=[],a=0,l=0;for(let c=0;c<t.length;c++){if(c<r){i.push(null),s[c]!==null&&(s[c]>0?a+=s[c]:l+=Math.abs(s[c]));continue}if(c===r)a=a/r,l=l/r;else{let f=s[c]??0,d=f>0?f:0,p=f<0?Math.abs(f):0;a=(a*(r-1)+d)/r,l=(l*(r-1)+p)/r}if(l===0)i.push(100);else if(a===0)i.push(0);else{let f=a/l;i.push(Ae(100-100/(1+f)))}}n[`rsi${r}`]=i}return t.map((r,i)=>{let a={};for(let l of o)a[`rsi${l}`]=n[`rsi${l}`][i];return a})}function Pe(t,e=2){let o=Math.pow(10,e);return Math.round(t*o)/o}function ut(t,e={}){let{periods:o=[6,10]}=e,s={};for(let n of o){let r=[];for(let i=0;i<t.length;i++){if(i<n-1){r.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){r.push(null);continue}let d=(a-f)/(a-l)*100;r.push(Pe(d))}s[`wr${n}`]=r}return t.map((n,r)=>{let i={};for(let a of o)i[`wr${a}`]=s[`wr${a}`][r];return i})}function ke(t,e=2){let o=Math.pow(10,e);return Math.round(t*o)/o}function ct(t,e={}){let{periods:o=[6,12,24]}=e,s={};for(let n of o){let r=q(t,n),i=[];for(let a=0;a<t.length;a++)if(t[a]===null||r[a]===null||r[a]===0)i.push(null);else{let l=(t[a]-r[a])/r[a]*100;i.push(ke(l))}s[`bias${n}`]=i}return t.map((n,r)=>{let i={};for(let a of o)i[`bias${a}`]=s[`bias${a}`][r];return i})}function Le(t,e=2){let o=Math.pow(10,e);return Math.round(t*o)/o}function ft(t,e={}){let{period:o=14}=e,s=[],n=t.map(r=>r.high===null||r.low===null||r.close===null?null:(r.high+r.low+r.close)/3);for(let r=0;r<t.length;r++){if(r<o-1){s.push({cci:null});continue}let i=0,a=0;for(let d=r-o+1;d<=r;d++)n[d]!==null&&(i+=n[d],a++);if(a!==o||n[r]===null){s.push({cci:null});continue}let l=i/o,c=0;for(let d=r-o+1;d<=r;d++)c+=Math.abs(n[d]-l);let f=c/o;if(f===0)s.push({cci:0});else{let d=(n[r]-l)/(.015*f);s.push({cci:Le(d)})}}return s}function zt(t,e=2){let o=Math.pow(10,e);return Math.round(t*o)/o}function pt(t,e={}){let{period:o=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 r=null;for(let i=0;i<t.length;i++){if(i<o-1){s.push({tr:n[i]!==null?zt(n[i]):null,atr:null});continue}if(i===o-1){let a=0,l=0;for(let c=0;c<o;c++)n[c]!==null&&(a+=n[c],l++);l===o&&(r=a/o)}else r!==null&&n[i]!==null&&(r=(r*(o-1)+n[i])/o);s.push({tr:n[i]!==null?zt(n[i]):null,atr:r!==null?zt(r):null})}return s}function dt(t,e={}){if(t.length===0)return[];let o=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(o,typeof e.ma=="object"?e.ma:{}):null,r=e.macd?st(o,typeof e.macd=="object"?e.macd:{}):null,i=e.boll?it(o,typeof e.boll=="object"?e.boll:{}):null,a=e.kdj?at(s,typeof e.kdj=="object"?e.kdj:{}):null,l=e.rsi?lt(o,typeof e.rsi=="object"?e.rsi:{}):null,c=e.wr?ut(s,typeof e.wr=="object"?e.wr:{}):null,f=e.bias?ct(o,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]},...r&&{macd:r[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 A.getFullQuotes(this.client,e)}getSimpleQuotes(e){return A.getSimpleQuotes(this.client,e)}getHKQuotes(e){return A.getHKQuotes(this.client,e)}getUSQuotes(e){return A.getUSQuotes(this.client,e)}getFundQuotes(e){return A.getFundQuotes(this.client,e)}getFundFlow(e){return A.getFundFlow(this.client,e)}getPanelLargeOrder(e){return A.getPanelLargeOrder(this.client,e)}getTodayTimeline(e){return A.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,o){return P.getIndustryKline(this.client,e,o)}getIndustryMinuteKline(e,o){return P.getIndustryMinuteKline(this.client,e,o)}getConceptList(){return P.getConceptList(this.client)}getConceptSpot(e){return P.getConceptSpot(this.client,e)}getConceptConstituents(e){return P.getConceptConstituents(this.client,e)}getConceptKline(e,o){return P.getConceptKline(this.client,e,o)}getConceptMinuteKline(e,o){return P.getConceptMinuteKline(this.client,e,o)}getHistoryKline(e,o){return P.getHistoryKline(this.client,e,o)}getMinuteKline(e,o){return P.getMinuteKline(this.client,e,o)}getHKHistoryKline(e,o){return P.getHKHistoryKline(this.client,e,o)}getUSHistoryKline(e,o){return P.getUSHistoryKline(this.client,e,o)}getAShareCodeList(e=!0){return A.getAShareCodeList(this.client,e)}getUSCodeList(e=!0){return A.getUSCodeList(this.client,e)}getHKCodeList(){return A.getHKCodeList(this.client)}async getAllAShareQuotes(e={}){let o=await this.getAShareCodeList();return this.getAllQuotesByCodes(o,e)}async getAllHKShareQuotes(e={}){let o=await this.getHKCodeList();return A.getAllHKQuotesByCodes(this.client,o,e)}async getAllUSShareQuotes(e={}){let o=await this.getUSCodeList(!1);return A.getAllUSQuotesByCodes(this.client,o,e)}getAllQuotesByCodes(e,o={}){return A.getAllQuotesByCodes(this.client,e,o)}async batchRaw(e){return this.client.getTencentQuote(e)}detectMarket(e){return/^\d{3}\.[A-Z]+$/i.test(e)?"US":/^\d{5}$/.test(e)?"HK":"A"}safeMax(e,o=0){return!e||e.length===0?o:Math.max(...e)}calcRequiredLookback(e){let o=0,s=!1;if(e.ma){let r=typeof e.ma=="object"?e.ma:{},i=r.periods??[5,10,20,30,60,120,250],a=r.type??"sma";o=Math.max(o,this.safeMax(i,20)),a==="ema"&&(s=!0)}if(e.macd){let r=typeof e.macd=="object"?e.macd:{},i=r.long??26,a=r.signal??9;o=Math.max(o,i*3+a),s=!0}if(e.boll){let r=typeof e.boll=="object"&&e.boll.period?e.boll.period:20;o=Math.max(o,r)}if(e.kdj){let r=typeof e.kdj=="object"&&e.kdj.period?e.kdj.period:9;o=Math.max(o,r)}if(e.rsi){let r=typeof e.rsi=="object"&&e.rsi.periods?e.rsi.periods:[6,12,24];o=Math.max(o,this.safeMax(r,14)+1)}if(e.wr){let r=typeof e.wr=="object"&&e.wr.periods?e.wr.periods:[6,10];o=Math.max(o,this.safeMax(r,10))}if(e.bias){let r=typeof e.bias=="object"&&e.bias.periods?e.bias.periods:[6,12,24];o=Math.max(o,this.safeMax(r,12))}if(e.cci){let r=typeof e.cci=="object"&&e.cci.period?e.cci.period:14;o=Math.max(o,r)}if(e.atr){let r=typeof e.atr=="object"&&e.atr.period?e.atr.period:14;o=Math.max(o,r)}return Math.ceil(o*(s?1.5:1.2))}calcActualStartDate(e,o,s=1.5){let n=Math.ceil(o*s),r=new Date(parseInt(e.slice(0,4)),parseInt(e.slice(4,6))-1,parseInt(e.slice(6,8)));r.setDate(r.getDate()-n);let i=r.getFullYear(),a=String(r.getMonth()+1).padStart(2,"0"),l=String(r.getDate()).padStart(2,"0");return`${i}${a}${l}`}dateToTimestamp(e){let o=e.includes("-")?e:`${e.slice(0,4)}-${e.slice(4,6)}-${e.slice(6,8)}`;return new Date(o).getTime()}async getKlineWithIndicators(e,o={}){let{startDate:s,endDate:n,indicators:r={}}=o,i=o.market??this.detectMarket(e),a=this.calcRequiredLookback(r),c={A:1.5,HK:1.46,US:1.45}[i],f=s?this.calcActualStartDate(s,a,c):void 0,d={period:o.period,adjust:o.adjust,startDate:f,endDate:o.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,r);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}},_e=mt;export{mt as StockSDK,dt as addIndicators,N as asyncPool,pt as calcATR,ct as calcBIAS,it as calcBOLL,ft as calcCCI,H as calcEMA,at as calcKDJ,ot as calcMA,st as calcMACD,lt as calcRSI,q as calcSMA,$t as calcWMA,ut as calcWR,v as chunkArray,z as decodeGBK,_e as default,V as parseResponse,g as safeNumber,R as safeNumberOrNull};
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};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stock-sdk",
3
- "version": "1.4.0",
3
+ "version": "1.4.2",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.js",