stock-sdk 1.4.1 → 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 +6 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +31 -1
- package/dist/index.d.ts +31 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var yt=Object.defineProperty;var Ke=Object.getOwnPropertyDescriptor;var Ae=Object.getOwnPropertyNames;var Pe=Object.prototype.hasOwnProperty;var Ct=(t,e)=>{for(var r in e)yt(t,r,{get:e[r],enumerable:!0})},Le=(t,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Ae(e))!Pe.call(t,n)&&n!==r&&yt(t,n,{get:()=>e[n],enumerable:!(s=Ke(e,n))||s.enumerable});return t};var _e=t=>Le(yt({},"__esModule",{value:!0}),t);var je={};Ct(je,{StockSDK:()=>st,addIndicators:()=>ot,asyncPool:()=>D,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:()=>v,decodeGBK:()=>N,default:()=>Me,parseResponse:()=>Q,safeNumber:()=>g,safeNumberOrNull:()=>C});module.exports=_e(je);function N(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",Lt="https://91.push2.eastmoney.com/api/qt/stock/get",_t="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=N(s);return Q(n)}};var ke=new Set(["daily","weekly","monthly"]),Ie=new Set(["1","5","15","30","60"]),xe=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(!ke.has(t))throw new RangeError("period must be one of: daily, weekly, monthly")}function H(t){if(!Ie.has(t))throw new RangeError("period must be one of: 1, 5, 15, 30, 60")}function I(t){if(!xe.has(t))throw new RangeError("adjust must be one of: '', 'qfq', 'hfq'")}function v(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 D(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:()=>Nt,parseHKQuote:()=>vt,parsePanelLargeOrder:()=>Ht,parseSimpleQuote:()=>qt,parseUSQuote:()=>Dt});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 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 Dt(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 Nt(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=>Ht(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=>vt(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=>Dt(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=>Nt(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=v(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 D(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=v(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 D(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=v(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 D(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 P={};Ct(P,{getConceptConstituents:()=>Se,getConceptKline:()=>be,getConceptList:()=>Wt,getConceptMinuteKline:()=>we,getConceptSpot:()=>Re,getHKHistoryKline:()=>fe,getHistoryKline:()=>ue,getIndustryConstituents:()=>ge,getIndustryKline:()=>he,getIndustryList:()=>$t,getIndustryMinuteKline:()=>ye,getIndustrySpot:()=>me,getMinuteKline:()=>ce,getUSHistoryKline:()=>pe});async function ue(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(L),amount:u(_),amplitude:u(k),changePercent:u(x),change:u(O),turnoverRate:u(j)}})}async function ce(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;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=`${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(L),amount:u(_),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(L),changePercent:u(O),change:u(j),volume:u(_),amount:u(k),amplitude:u(x),turnoverRate:u(ht)}}).filter(R=>R.time>=h&&R.time<=y)}}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(/^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(L),volume:u(_),amount:u(k),amplitude:u(x),changePercent:u(O),change:u(j),turnoverRate:u(ht)}})}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={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(L),amount:u(_),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 de(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 de(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 me(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=`${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 ge(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 de(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,(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 he(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(L),amplitude:u(_),turnoverRate:u(O)}})}async function ye(t,e,r={}){let{period:s="5"}=r;H(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 Ce(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 Ce(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 Re(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 Se(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 Ce(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 be(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(L),amplitude:u(_),turnoverRate:u(O)}})}async function we(t,e,r={}){let{period:s="5"}=r;H(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 Te(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?Te(a[f]):null,dea:l[f],macd:a[f]!==null&&l[f]!==null?Te((a[f]-l[f])*2):null}))}function zt(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function Oe(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=Oe(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 Ue(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(Ue(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 Ee(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(Ee(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 Be(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(Be(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 qe(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:qe(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)}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}},Me=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
|
|
@@ -1106,4 +1136,4 @@ declare class StockSDK {
|
|
|
1106
1136
|
}): Promise<KlineWithIndicators<HistoryKline | HKUSHistoryKline>[]>;
|
|
1107
1137
|
}
|
|
1108
1138
|
|
|
1109
|
-
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
|
|
@@ -1106,4 +1136,4 @@ declare class StockSDK {
|
|
|
1106
1136
|
}): Promise<KlineWithIndicators<HistoryKline | HKUSHistoryKline>[]>;
|
|
1107
1137
|
}
|
|
1108
1138
|
|
|
1109
|
-
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 Te=Object.defineProperty;var Vt=(t,e)=>{for(var r in e)Te(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",Lt="https://79.push2.eastmoney.com/api/qt/clist/get",_t="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,N=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 Me=new Set(["daily","weekly","monthly"]),Ke=new Set(["1","5","15","30","60"]),Ae=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(!Me.has(t))throw new RangeError("period must be one of: daily, weekly, monthly")}function q(t){if(!Ke.has(t))throw new RangeError("period must be one of: 1, 5, 15, 30, 60")}function I(t){if(!Ae.has(t))throw new RangeError("adjust must be one of: '', 'qfq', 'hfq'")}function v(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 D(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:()=>Ht,parseHKQuote:()=>qt,parsePanelLargeOrder:()=>Bt,parseSimpleQuote:()=>Ut,parseUSQuote:()=>jt});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 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 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=>Ht(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=N,concurrency:n=$,onProgress:o}=r;E(s,"batchSize"),E(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++,o&&o(c,l),m});return(await D(f,n)).flat()}async function se(t,e,r={}){let{batchSize:s=N,concurrency:n=$,onProgress:o}=r;E(s,"batchSize"),E(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++,o&&o(c,l),m});return(await D(f,n)).flat()}async function ie(t,e,r={}){let{batchSize:s=N,concurrency:n=$,onProgress:o}=r;E(s,"batchSize"),E(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++,o&&o(c,l),m});return(await D(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 P={};Vt(P,{getConceptConstituents:()=>Re,getConceptKline:()=>Se,getConceptList:()=>Qt,getConceptMinuteKline:()=>be,getConceptSpot:()=>Ce,getHKHistoryKline:()=>ce,getHistoryKline:()=>le,getIndustryConstituents:()=>me,getIndustryKline:()=>ge,getIndustryList:()=>Dt,getIndustryMinuteKline:()=>he,getIndustrySpot:()=>de,getMinuteKline:()=>ue,getUSHistoryKline:()=>fe});async function le(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(L),amount:u(_),amplitude:u(k),changePercent:u(x),change:u(O),turnoverRate:u(B)}})}async function ue(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(L),amount:u(_),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(L),changePercent:u(O),change:u(B),volume:u(_),amount:u(k),amplitude:u(x),turnoverRate:u(gt)}}).filter(C=>C.time>=h&&C.time<=y)}}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(/^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(L),volume:u(_),amount:u(k),amplitude:u(x),changePercent:u(O),change:u(B),turnoverRate:u(gt)}})}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={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(L),amount:u(_),amplitude:u(k),changePercent:u(x),change:u(O),turnoverRate:u(B)}})}var vt=null;async function nt(t,e){if(e.startsWith("BK"))return e;if(!vt){let s=await Dt(t);vt=new Map(s.map(n=>[n.name,n.code]))}let r=vt.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 pe(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 Dt(t){let s=await pe(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 de(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 me(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 pe(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 ge(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(L),amplitude:u(_),turnoverRate:u(O)}})}async function he(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 Nt=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(!Nt){let s=await Qt(t);Nt=new Map(s.map(n=>[n.name,n.code]))}let r=Nt.get(e);if(!r)throw new Error(`\u672A\u627E\u5230\u6982\u5FF5\u677F\u5757: ${e}`);return r}async function ye(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 ye(t,Lt,{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 Ce(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=`${_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 Re(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 ye(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 Se(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(L),amplitude:u(_),turnoverRate:u(O)}})}async function be(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 H(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"?H: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 we(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=H(t,r),i=H(t,s),a=t.map((c,f)=>o[f]===null||i[f]===null?null:o[f]-i[f]),l=H(a,n);return t.map((c,f)=>({dif:a[f]!==null?we(a[f]):null,dea:l[f],macd:a[f]!==null&&l[f]!==null?we((a[f]-l[f])*2):null}))}function Ft(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function Pe(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=Pe(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 Le(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(Le(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 _e(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(_e(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 ke(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(ke(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 Ie(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:Ie(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)}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}},xe=mt;export{mt as StockSDK,dt as addIndicators,D 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,j as calcSMA,$t as calcWMA,ut as calcWR,v as chunkArray,z as decodeGBK,xe 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};
|