stock-sdk 1.4.2 → 1.4.3

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/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var yt=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var _e=Object.getOwnPropertyNames;var Le=Object.prototype.hasOwnProperty;var Ct=(t,e)=>{for(var r in e)yt(t,r,{get:e[r],enumerable:!0})},ke=(t,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of _e(e))!Le.call(t,n)&&n!==r&&yt(t,n,{get:()=>e[n],enumerable:!(s=Pe(e,n))||s.enumerable});return t};var Ie=t=>ke(yt({},"__esModule",{value:!0}),t);var Fe={};Ct(Fe,{StockSDK:()=>st,addIndicators:()=>ot,asyncPool:()=>N,calcATR:()=>rt,calcBIAS:()=>et,calcBOLL:()=>Z,calcCCI:()=>nt,calcEMA:()=>q,calcKDJ:()=>Y,calcMA:()=>G,calcMACD:()=>J,calcRSI:()=>X,calcSMA:()=>B,calcWMA:()=>gt,calcWR:()=>tt,chunkArray:()=>H,decodeGBK:()=>D,default:()=>Ae,parseResponse:()=>Q,safeNumber:()=>g,safeNumberOrNull:()=>C});module.exports=Ie(Fe);function D(t){return new TextDecoder("gbk").decode(t)}function Q(t){let e=t.split(";").map(s=>s.trim()).filter(Boolean),r=[];for(let s of e){let n=s.indexOf("=");if(n<0)continue;let o=s.slice(0,n).trim();o.startsWith("v_")&&(o=o.slice(2));let i=s.slice(n+1).trim();i.startsWith('"')&&i.endsWith('"')&&(i=i.slice(1,-1));let a=i.split("~");r.push({key:o,fields:a})}return r}function g(t){if(!t||t==="")return 0;let e=parseFloat(t);return Number.isNaN(e)?0:e}function C(t){if(!t||t==="")return null;let e=parseFloat(t);return Number.isNaN(e)?null:e}function u(t){if(!t||t===""||t==="-")return null;let e=parseFloat(t);return Number.isNaN(e)?null:e}var Rt="https://qt.gtimg.cn",St="https://web.ifzq.gtimg.cn/appstock/app/minute/query",bt="https://assets.linkdiary.cn/shares/zh_a_list.json",wt="https://assets.linkdiary.cn/shares/us_list.json",Tt="https://assets.linkdiary.cn/shares/hk_list.json",Jt="https://assets.linkdiary.cn/shares/trade-data-list.txt";var it="https://push2his.eastmoney.com/api/qt/stock/kline/get",Mt="https://push2his.eastmoney.com/api/qt/stock/trends2/get",Kt="https://33.push2his.eastmoney.com/api/qt/stock/kline/get",At="https://63.push2his.eastmoney.com/api/qt/stock/kline/get",Pt="https://17.push2.eastmoney.com/api/qt/clist/get",_t="https://91.push2.eastmoney.com/api/qt/stock/get",Lt="https://29.push2.eastmoney.com/api/qt/clist/get",at="https://7.push2his.eastmoney.com/api/qt/stock/kline/get",kt="https://push2his.eastmoney.com/api/qt/stock/trends2/get",It="https://79.push2.eastmoney.com/api/qt/clist/get",xt="https://91.push2.eastmoney.com/api/qt/stock/get",Ot="https://29.push2.eastmoney.com/api/qt/clist/get",lt="https://91.push2his.eastmoney.com/api/qt/stock/kline/get",Ut="https://push2his.eastmoney.com/api/qt/stock/trends2/get",Et=3e4,$=500,F=500,W=7;var z=class{constructor(e={}){this.baseUrl=e.baseUrl??Rt,this.timeout=e.timeout??Et}getTimeout(){return this.timeout}async get(e,r={}){let s=new AbortController,n=setTimeout(()=>s.abort(),this.timeout);try{let o=await fetch(e,{signal:s.signal});if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);switch(r.responseType){case"json":return await o.json();case"arraybuffer":return await o.arrayBuffer();default:return await o.text()}}finally{clearTimeout(n)}}async getTencentQuote(e){let r=`${this.baseUrl}/?q=${encodeURIComponent(e)}`,s=await this.get(r,{responseType:"arraybuffer"}),n=D(s);return Q(n)}};var xe=new Set(["daily","weekly","monthly"]),Oe=new Set(["1","5","15","30","60"]),Ue=new Set(["","qfq","hfq"]);function E(t,e){if(!Number.isFinite(t)||!Number.isInteger(t)||t<=0)throw new RangeError(`${e} must be a positive integer`)}function U(t){if(!xe.has(t))throw new RangeError("period must be one of: daily, weekly, monthly")}function v(t){if(!Oe.has(t))throw new RangeError("period must be one of: 1, 5, 15, 30, 60")}function I(t){if(!Ue.has(t))throw new RangeError("adjust must be one of: '', 'qfq', 'hfq'")}function H(t,e){E(e,"chunkSize");let r=[];for(let s=0;s<t.length;s+=e)r.push(t.slice(s,s+e));return r}async function N(t,e){E(e,"concurrency");let r=[],s=[];for(let n of t){let o=Promise.resolve().then(()=>n()).then(i=>{r.push(i)});if(s.push(o),s.length>=e){await Promise.race(s);for(let i=s.length-1;i>=0;i--)await Promise.race([s[i].then(()=>"fulfilled"),Promise.resolve("pending")])==="fulfilled"&&s.splice(i,1)}}return await Promise.all(s),r}function ut(t){return t.startsWith("sh")?"1":t.startsWith("sz")||t.startsWith("bj")?"0":t.startsWith("6")?"1":"0"}var K={};Ct(K,{getAShareCodeList:()=>ne,getAllHKQuotesByCodes:()=>ie,getAllQuotesByCodes:()=>se,getAllUSQuotesByCodes:()=>ae,getFullQuotes:()=>ct,getFundFlow:()=>Yt,getFundQuotes:()=>te,getHKCodeList:()=>oe,getHKQuotes:()=>ft,getPanelLargeOrder:()=>Xt,getSimpleQuotes:()=>Zt,getTodayTimeline:()=>ee,getTradingCalendar:()=>le,getUSCodeList:()=>re,getUSQuotes:()=>pt,parseFullQuote:()=>Bt,parseFundFlow:()=>jt,parseFundQuote:()=>Dt,parseHKQuote:()=>Ht,parsePanelLargeOrder:()=>vt,parseSimpleQuote:()=>qt,parseUSQuote:()=>Nt,search:()=>ce});function Bt(t){let e=[];for(let s=0;s<5;s++)e.push({price:g(t[9+s*2]),volume:g(t[10+s*2])});let r=[];for(let s=0;s<5;s++)r.push({price:g(t[19+s*2]),volume:g(t[20+s*2])});return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:g(t[3]),prevClose:g(t[4]),open:g(t[5]),volume:g(t[6]),outerVolume:g(t[7]),innerVolume:g(t[8]),bid:e,ask:r,time:t[30]??"",change:g(t[31]),changePercent:g(t[32]),high:g(t[33]),low:g(t[34]),volume2:g(t[36]),amount:g(t[37]),turnoverRate:C(t[38]),pe:C(t[39]),amplitude:C(t[43]),circulatingMarketCap:C(t[44]),totalMarketCap:C(t[45]),pb:C(t[46]),limitUp:C(t[47]),limitDown:C(t[48]),volumeRatio:C(t[49]),avgPrice:C(t[51]),peStatic:C(t[52]),peDynamic:C(t[53]),high52w:C(t[67]),low52w:C(t[68]),circulatingShares:C(t[72]),totalShares:C(t[73]),raw:t}}function qt(t){return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:g(t[3]),change:g(t[4]),changePercent:g(t[5]),volume:g(t[6]),amount:g(t[7]),marketCap:C(t[9]),marketType:t[10]??"",raw:t}}function jt(t){return{code:t[0]??"",mainInflow:g(t[1]),mainOutflow:g(t[2]),mainNet:g(t[3]),mainNetRatio:g(t[4]),retailInflow:g(t[5]),retailOutflow:g(t[6]),retailNet:g(t[7]),retailNetRatio:g(t[8]),totalFlow:g(t[9]),name:t[12]??"",date:t[13]??"",raw:t}}function vt(t){return{buyLargeRatio:g(t[0]),buySmallRatio:g(t[1]),sellLargeRatio:g(t[2]),sellSmallRatio:g(t[3]),raw:t}}function Ht(t){return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:g(t[3]),prevClose:g(t[4]),open:g(t[5]),volume:g(t[6]),time:t[30]??"",change:g(t[31]),changePercent:g(t[32]),high:g(t[33]),low:g(t[34]),amount:g(t[37]),lotSize:C(t[40]),circulatingMarketCap:C(t[44]),totalMarketCap:C(t[45]),currency:t[t.length-3]??"",raw:t}}function Nt(t){return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:g(t[3]),prevClose:g(t[4]),open:g(t[5]),volume:g(t[6]),time:t[30]??"",change:g(t[31]),changePercent:g(t[32]),high:g(t[33]),low:g(t[34]),amount:g(t[37]),turnoverRate:C(t[38]),pe:C(t[39]),amplitude:C(t[43]),totalMarketCap:C(t[45]),pb:C(t[47]),high52w:C(t[48]),low52w:C(t[49]),raw:t}}function Dt(t){return{code:t[0]??"",name:t[1]??"",nav:g(t[5]),accNav:g(t[6]),change:g(t[7]),navDate:t[8]??"",raw:t}}async function ct(t,e){return!e||e.length===0?[]:(await t.getTencentQuote(e.join(","))).filter(s=>s.fields&&s.fields.length>0&&s.fields[0]!=="").map(s=>Bt(s.fields))}async function Zt(t,e){if(!e||e.length===0)return[];let r=e.map(n=>`s_${n}`);return(await t.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>qt(n.fields))}async function Yt(t,e){if(!e||e.length===0)return[];let r=e.map(n=>`ff_${n}`);return(await t.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>jt(n.fields))}async function Xt(t,e){if(!e||e.length===0)return[];let r=e.map(n=>`s_pk${n}`);return(await t.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>vt(n.fields))}async function ft(t,e){if(!e||e.length===0)return[];let r=e.map(n=>`hk${n}`);return(await t.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>Ht(n.fields))}async function pt(t,e){if(!e||e.length===0)return[];let r=e.map(n=>`us${n}`);return(await t.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>Nt(n.fields))}async function te(t,e){if(!e||e.length===0)return[];let r=e.map(n=>`jj${n}`);return(await t.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>Dt(n.fields))}async function ee(t,e){let r=t.getTimeout(),s=new AbortController,n=setTimeout(()=>s.abort(),r);try{let o=await fetch(`${St}?code=${e}`,{signal:s.signal});if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);let i=await o.json();if(i.code!==0)throw new Error(i.msg||"API error");let a=i.data?.[e];if(!a)return{code:e,date:"",data:[]};let l=a.data?.data||[],c=a.data?.date||"",f=!1;if(l.length>0){let p=l[0].split(" "),m=parseFloat(p[1])||0,h=parseInt(p[2],10)||0,y=parseFloat(p[3])||0;h>0&&m>0&&y/h>m*50&&(f=!0)}let d=l.map(p=>{let m=p.split(" "),h=m[0],y=`${h.slice(0,2)}:${h.slice(2,4)}`,R=parseInt(m[2],10)||0,S=parseFloat(m[3])||0,b=f?R*100:R,M=b>0?S/b:0;return{time:y,price:parseFloat(m[1])||0,volume:b,amount:S,avgPrice:Math.round(M*100)/100}});return{code:e,date:c,data:d}}finally{clearTimeout(n)}}async function ne(t,e=!0){let r=t.getTimeout(),s=new AbortController,n=setTimeout(()=>s.abort(),r);try{let o=await fetch(bt,{signal:s.signal});if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);let a=(await o.json()).list||[];return e?a:a.map(l=>l.replace(/^(sh|sz|bj)/,""))}finally{clearTimeout(n)}}async function re(t,e=!0){let r=t.getTimeout(),s=new AbortController,n=setTimeout(()=>s.abort(),r);try{let o=await fetch(wt,{signal:s.signal});if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);let a=(await o.json()).list||[];return e?a:a.map(l=>l.replace(/^\d{3}\./,""))}finally{clearTimeout(n)}}async function oe(t){let e=t.getTimeout(),r=new AbortController,s=setTimeout(()=>r.abort(),e);try{let n=await fetch(Tt,{signal:r.signal});if(!n.ok)throw new Error(`HTTP error! status: ${n.status}`);return(await n.json()).list||[]}finally{clearTimeout(s)}}async function se(t,e,r={}){let{batchSize:s=$,concurrency:n=W,onProgress:o}=r;E(s,"batchSize"),E(n,"concurrency");let i=Math.min(s,F),a=H(e,i),l=a.length,c=0,f=a.map(p=>async()=>{let m=await ct(t,p);return c++,o&&o(c,l),m});return(await N(f,n)).flat()}async function ie(t,e,r={}){let{batchSize:s=$,concurrency:n=W,onProgress:o}=r;E(s,"batchSize"),E(n,"concurrency");let i=Math.min(s,F),a=H(e,i),l=a.length,c=0,f=a.map(p=>async()=>{let m=await ft(t,p);return c++,o&&o(c,l),m});return(await N(f,n)).flat()}async function ae(t,e,r={}){let{batchSize:s=$,concurrency:n=W,onProgress:o}=r;E(s,"batchSize"),E(n,"concurrency");let i=Math.min(s,F),a=H(e,i),l=a.length,c=0,f=a.map(p=>async()=>{let m=await pt(t,p);return c++,o&&o(c,l),m});return(await N(f,n)).flat()}async function le(t){let e=await t.get(Jt);return!e||e.trim()===""?[]:e.trim().split(",").map(r=>r.trim()).filter(r=>r.length>0)}var ue="https://smartbox.gtimg.cn/s3/";function Ee(t){return t.replace(/\\u([0-9a-fA-F]{4})/g,(e,r)=>String.fromCharCode(parseInt(r,16)))}function Be(t){return!t||t==="N"?[]:t.split("^").filter(Boolean).map(r=>{let s=r.split("~"),n=s[0]||"",o=s[1]||"",i=Ee(s[2]||""),a=s[4]||"";return{code:n+o,name:i,market:n,type:a}})}function qe(t){return new Promise((e,r)=>{let s=`${ue}?v=2&t=all&q=${encodeURIComponent(t)}`;window.v_hint="";let n=document.createElement("script");n.src=s,n.charset="utf-8",n.onload=()=>{let o=window.v_hint||"";document.body.removeChild(n),e(o)},n.onerror=()=>{document.body.removeChild(n),r(new Error("Network error calling Smartbox"))},document.body.appendChild(n)})}async function je(t,e){let r=`${ue}?v=2&t=all&q=${encodeURIComponent(e)}`,n=(await t.get(r)).match(/v_hint="([^"]*)"/);return n?n[1]:""}function ve(){return typeof window<"u"&&typeof document<"u"}async function ce(t,e){if(!e||!e.trim())return[];let r;return ve()?r=await qe(e):r=await je(t,e),Be(r)}var P={};Ct(P,{getConceptConstituents:()=>we,getConceptKline:()=>Te,getConceptList:()=>Wt,getConceptMinuteKline:()=>Me,getConceptSpot:()=>be,getHKHistoryKline:()=>de,getHistoryKline:()=>fe,getIndustryConstituents:()=>ye,getIndustryKline:()=>Ce,getIndustryList:()=>$t,getIndustryMinuteKline:()=>Re,getIndustrySpot:()=>he,getMinuteKline:()=>pe,getUSHistoryKline:()=>me});async function fe(t,e,r={}){let{period:s="daily",adjust:n="hfq",startDate:o="19700101",endDate:i="20500101"}=r;U(s),I(n);let a=e.replace(/^(sh|sz|bj)/,""),l={daily:"101",weekly:"102",monthly:"103"},c={"":"0",qfq:"1",hfq:"2"},f=`${ut(e)}.${a}`,d=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f116",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:l[s],fqt:c[n],secid:f,beg:o,end:i}),p=`${it}?${d.toString()}`,h=(await t.get(p,{responseType:"json"}))?.data?.klines;return!Array.isArray(h)||h.length===0?[]:h.map(y=>{let[R,S,b,M,A,_,L,k,x,O,j]=y.split(",");return{date:R,code:a,open:u(S),close:u(b),high:u(M),low:u(A),volume:u(_),amount:u(L),amplitude:u(k),changePercent:u(x),change:u(O),turnoverRate:u(j)}})}async function pe(t,e,r={}){let{period:s="1",adjust:n="hfq",startDate:o="1979-09-01 09:32:00",endDate:i="2222-01-01 09:32:00"}=r;v(s),I(n);let a=e.replace(/^(sh|sz|bj)/,""),l=`${ut(e)}.${a}`;if(s==="1"){let c=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13",fields2:"f51,f52,f53,f54,f55,f56,f57,f58",ut:"7eea3edcaed734bea9cbfc24409ed989",ndays:"5",iscr:"0",secid:l}),f=`${Mt}?${c.toString()}`,p=(await t.get(f,{responseType:"json"}))?.data?.trends;if(!Array.isArray(p)||p.length===0)return[];let m=o.replace("T"," ").slice(0,16),h=i.replace("T"," ").slice(0,16);return p.map(y=>{let[R,S,b,M,A,_,L,k]=y.split(",");return{time:R,open:u(S),close:u(b),high:u(M),low:u(A),volume:u(_),amount:u(L),avgPrice:u(k)}}).filter(y=>y.time>=m&&y.time<=h)}else{let c={"":"0",qfq:"1",hfq:"2"},f=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:s,fqt:c[n],secid:l,beg:"0",end:"20500000"}),d=`${it}?${f.toString()}`,m=(await t.get(d,{responseType:"json"}))?.data?.klines;if(!Array.isArray(m)||m.length===0)return[];let h=o.replace("T"," ").slice(0,16),y=i.replace("T"," ").slice(0,16);return m.map(R=>{let[S,b,M,A,_,L,k,x,O,j,ht]=R.split(",");return{time:S,open:u(b),close:u(M),high:u(A),low:u(_),changePercent:u(O),change:u(j),volume:u(L),amount:u(k),amplitude:u(x),turnoverRate:u(ht)}}).filter(R=>R.time>=h&&R.time<=y)}}async function de(t,e,r={}){let{period:s="daily",adjust:n="hfq",startDate:o="19700101",endDate:i="20500101"}=r;U(s),I(n);let a=e.replace(/^hk/i,"").padStart(5,"0"),l={daily:"101",weekly:"102",monthly:"103"},c={"":"0",qfq:"1",hfq:"2"},f=`116.${a}`,d=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:l[s],fqt:c[n],secid:f,beg:o,end:i,lmt:"1000000"}),p=`${Kt}?${d.toString()}`,m=await t.get(p,{responseType:"json"}),h=m?.data?.klines,y=m?.data?.name||"";return!Array.isArray(h)||h.length===0?[]:h.map(R=>{let[S,b,M,A,_,L,k,x,O,j,ht]=R.split(",");return{date:S,code:a,name:y,open:u(b),close:u(M),high:u(A),low:u(_),volume:u(L),amount:u(k),amplitude:u(x),changePercent:u(O),change:u(j),turnoverRate:u(ht)}})}async function me(t,e,r={}){let{period:s="daily",adjust:n="hfq",startDate:o="19700101",endDate:i="20500101"}=r;U(s),I(n);let a={daily:"101",weekly:"102",monthly:"103"},l={"":"0",qfq:"1",hfq:"2"},c=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:a[s],fqt:l[n],secid:e,beg:o,end:i,lmt:"1000000"}),f=`${At}?${c.toString()}`,d=await t.get(f,{responseType:"json"}),p=d?.data?.klines,m=d?.data?.code||e.split(".")[1]||e,h=d?.data?.name||"";return!Array.isArray(p)||p.length===0?[]:p.map(y=>{let[R,S,b,M,A,_,L,k,x,O,j]=y.split(",");return{date:R,code:m,name:h,open:u(S),close:u(b),high:u(M),low:u(A),volume:u(_),amount:u(L),amplitude:u(k),changePercent:u(x),change:u(O),turnoverRate:u(j)}})}var Qt=null;async function dt(t,e){if(e.startsWith("BK"))return e;if(!Qt){let s=await $t(t);Qt=new Map(s.map(n=>[n.name,n.code]))}let r=Qt.get(e);if(!r)throw new Error(`\u672A\u627E\u5230\u884C\u4E1A\u677F\u5757: ${e}`);return r}function w(t){if(t==null)return null;let e=String(t);return u(e)}async function ge(t,e,r,s,n=100,o){let i=[],a=1,l=0;do{let c=new URLSearchParams({...r,pn:String(a),pz:String(n),fields:s}),f=`${e}?${c.toString()}`,p=(await t.get(f,{responseType:"json"}))?.data;if(!p||!Array.isArray(p.diff))break;a===1&&(l=p.total??0);let m=p.diff.map((h,y)=>o(h,i.length+y+1));i.push(...m),a++}while(i.length<l);return i}async function $t(t){let s=await ge(t,Pt,{po:"1",np:"1",ut:"bd1d9ddb04089700cf9c27f6f7426281",fltt:"2",invt:"2",fid:"f3",fs:"m:90 t:2 f:!50"},"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f26,f22,f33,f11,f62,f128,f136,f115,f152,f124,f107,f104,f105,f140,f141,f207,f208,f209,f222",100,(n,o)=>({rank:o,name:String(n.f14??""),code:String(n.f12??""),price:w(n.f2),change:w(n.f4),changePercent:w(n.f3),totalMarketCap:w(n.f20),turnoverRate:w(n.f8),riseCount:w(n.f104),fallCount:w(n.f105),leadingStock:n.f128?String(n.f128):null,leadingStockChangePercent:w(n.f136)}));return s.sort((n,o)=>(o.changePercent??0)-(n.changePercent??0)),s.forEach((n,o)=>{n.rank=o+1}),s}async function he(t,e){let r=await dt(t,e),s=new URLSearchParams({fields:"f43,f44,f45,f46,f47,f48,f170,f171,f168,f169",mpi:"1000",invt:"2",fltt:"1",secid:`90.${r}`}),n=`${_t}?${s.toString()}`,i=(await t.get(n,{responseType:"json"}))?.data;return i?[{key:"f43",name:"\u6700\u65B0",divide:!0},{key:"f44",name:"\u6700\u9AD8",divide:!0},{key:"f45",name:"\u6700\u4F4E",divide:!0},{key:"f46",name:"\u5F00\u76D8",divide:!0},{key:"f47",name:"\u6210\u4EA4\u91CF",divide:!1},{key:"f48",name:"\u6210\u4EA4\u989D",divide:!1},{key:"f170",name:"\u6DA8\u8DCC\u5E45",divide:!0},{key:"f171",name:"\u632F\u5E45",divide:!0},{key:"f168",name:"\u6362\u624B\u7387",divide:!0},{key:"f169",name:"\u6DA8\u8DCC\u989D",divide:!0}].map(({key:l,name:c,divide:f})=>{let d=i[l],p=null;return typeof d=="number"&&!isNaN(d)&&(p=f?d/100:d),{item:c,value:p}}):[]}async function ye(t,e){let s={po:"1",np:"1",ut:"bd1d9ddb04089700cf9c27f6f7426281",fltt:"2",invt:"2",fid:"f3",fs:`b:${await dt(t,e)} f:!50`};return ge(t,Lt,s,"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152,f45",100,(o,i)=>({rank:i,code:String(o.f12??""),name:String(o.f14??""),price:w(o.f2),changePercent:w(o.f3),change:w(o.f4),volume:w(o.f5),amount:w(o.f6),amplitude:w(o.f7),high:w(o.f15),low:w(o.f16),open:w(o.f17),prevClose:w(o.f18),turnoverRate:w(o.f8),pe:w(o.f9),pb:w(o.f23)}))}async function Ce(t,e,r={}){let{period:s="daily",adjust:n="",startDate:o="19700101",endDate:i="20500101"}=r;U(s),I(n);let a=await dt(t,e),l={daily:"101",weekly:"102",monthly:"103"},c={"":"0",qfq:"1",hfq:"2"},f=new URLSearchParams({secid:`90.${a}`,fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",klt:l[s],fqt:c[n],beg:o,end:i,smplmt:"10000",lmt:"1000000"}),d=`${at}?${f.toString()}`,m=(await t.get(d,{responseType:"json"}))?.data?.klines;return!Array.isArray(m)||m.length===0?[]:m.map(h=>{let[y,R,S,b,M,A,_,L,k,x,O]=h.split(",");return{date:y,open:u(R),close:u(S),high:u(b),low:u(M),changePercent:u(k),change:u(x),volume:u(A),amount:u(_),amplitude:u(L),turnoverRate:u(O)}})}async function Re(t,e,r={}){let{period:s="5"}=r;v(s);let n=await dt(t,e);if(s==="1"){let o=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13",fields2:"f51,f52,f53,f54,f55,f56,f57,f58",iscr:"0",ndays:"1",secid:`90.${n}`}),i=`${kt}?${o.toString()}`,l=(await t.get(i,{responseType:"json"}))?.data?.trends;return!Array.isArray(l)||l.length===0?[]:l.map(c=>{let[f,d,p,m,h,y,R,S]=c.split(",");return{time:f,open:u(d),close:u(p),high:u(m),low:u(h),volume:u(y),amount:u(R),price:u(S)}})}else{let o=new URLSearchParams({secid:`90.${n}`,fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",klt:s,fqt:"1",beg:"0",end:"20500101",smplmt:"10000",lmt:"1000000"}),i=`${at}?${o.toString()}`,l=(await t.get(i,{responseType:"json"}))?.data?.klines;return!Array.isArray(l)||l.length===0?[]:l.map(c=>{let[f,d,p,m,h,y,R,S,b,M,A]=c.split(",");return{time:f,open:u(d),close:u(p),high:u(m),low:u(h),changePercent:u(b),change:u(M),volume:u(y),amount:u(R),amplitude:u(S),turnoverRate:u(A)}})}}var Ft=null;function T(t){if(t==null)return null;let e=String(t);return u(e)}async function mt(t,e){if(e.startsWith("BK"))return e;if(!Ft){let s=await Wt(t);Ft=new Map(s.map(n=>[n.name,n.code]))}let r=Ft.get(e);if(!r)throw new Error(`\u672A\u627E\u5230\u6982\u5FF5\u677F\u5757: ${e}`);return r}async function Se(t,e,r,s,n=100,o){let i=[],a=1,l=0;do{let c=new URLSearchParams({...r,pn:String(a),pz:String(n),fields:s}),f=`${e}?${c.toString()}`,p=(await t.get(f,{responseType:"json"}))?.data;if(!p||!Array.isArray(p.diff))break;a===1&&(l=p.total??0);let m=p.diff.map((h,y)=>o(h,i.length+y+1));i.push(...m),a++}while(i.length<l);return i}async function Wt(t){let s=await Se(t,It,{po:"1",np:"1",ut:"bd1d9ddb04089700cf9c27f6f7426281",fltt:"2",invt:"2",fid:"f12",fs:"m:90 t:3 f:!50"},"f2,f3,f4,f8,f12,f14,f15,f16,f17,f18,f20,f21,f24,f25,f22,f33,f11,f62,f128,f124,f107,f104,f105,f136",100,(n,o)=>({rank:o,name:String(n.f14??""),code:String(n.f12??""),price:T(n.f2),change:T(n.f4),changePercent:T(n.f3),totalMarketCap:T(n.f20),turnoverRate:T(n.f8),riseCount:T(n.f104),fallCount:T(n.f105),leadingStock:n.f128?String(n.f128):null,leadingStockChangePercent:T(n.f136)}));return s.sort((n,o)=>(o.changePercent??0)-(n.changePercent??0)),s.forEach((n,o)=>{n.rank=o+1}),s}async function be(t,e){let r=await mt(t,e),s=new URLSearchParams({fields:"f43,f44,f45,f46,f47,f48,f170,f171,f168,f169",mpi:"1000",invt:"2",fltt:"1",secid:`90.${r}`}),n=`${xt}?${s.toString()}`,i=(await t.get(n,{responseType:"json"}))?.data;return i?[{key:"f43",name:"\u6700\u65B0",divide:!0},{key:"f44",name:"\u6700\u9AD8",divide:!0},{key:"f45",name:"\u6700\u4F4E",divide:!0},{key:"f46",name:"\u5F00\u76D8",divide:!0},{key:"f47",name:"\u6210\u4EA4\u91CF",divide:!1},{key:"f48",name:"\u6210\u4EA4\u989D",divide:!1},{key:"f170",name:"\u6DA8\u8DCC\u5E45",divide:!0},{key:"f171",name:"\u632F\u5E45",divide:!0},{key:"f168",name:"\u6362\u624B\u7387",divide:!0},{key:"f169",name:"\u6DA8\u8DCC\u989D",divide:!0}].map(({key:l,name:c,divide:f})=>{let d=i[l],p=null;return typeof d=="number"&&!isNaN(d)&&(p=f?d/100:d),{item:c,value:p}}):[]}async function we(t,e){let s={po:"1",np:"1",ut:"bd1d9ddb04089700cf9c27f6f7426281",fltt:"2",invt:"2",fid:"f12",fs:`b:${await mt(t,e)} f:!50`};return Se(t,Ot,s,"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152,f45",100,(o,i)=>({rank:i,code:String(o.f12??""),name:String(o.f14??""),price:T(o.f2),changePercent:T(o.f3),change:T(o.f4),volume:T(o.f5),amount:T(o.f6),amplitude:T(o.f7),high:T(o.f15),low:T(o.f16),open:T(o.f17),prevClose:T(o.f18),turnoverRate:T(o.f8),pe:T(o.f9),pb:T(o.f23)}))}async function Te(t,e,r={}){let{period:s="daily",adjust:n="",startDate:o="19700101",endDate:i="20500101"}=r;U(s),I(n);let a=await mt(t,e),l={daily:"101",weekly:"102",monthly:"103"},c={"":"0",qfq:"1",hfq:"2"},f=new URLSearchParams({secid:`90.${a}`,fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",klt:l[s],fqt:c[n],beg:o,end:i,smplmt:"10000",lmt:"1000000"}),d=`${lt}?${f.toString()}`,m=(await t.get(d,{responseType:"json"}))?.data?.klines;return!Array.isArray(m)||m.length===0?[]:m.map(h=>{let[y,R,S,b,M,A,_,L,k,x,O]=h.split(",");return{date:y,open:u(R),close:u(S),high:u(b),low:u(M),changePercent:u(k),change:u(x),volume:u(A),amount:u(_),amplitude:u(L),turnoverRate:u(O)}})}async function Me(t,e,r={}){let{period:s="5"}=r;v(s);let n=await mt(t,e);if(s==="1"){let o=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13",fields2:"f51,f52,f53,f54,f55,f56,f57,f58",iscr:"0",ndays:"1",secid:`90.${n}`}),i=`${Ut}?${o.toString()}`,l=(await t.get(i,{responseType:"json"}))?.data?.trends;return!Array.isArray(l)||l.length===0?[]:l.map(c=>{let[f,d,p,m,h,y,R,S]=c.split(",");return{time:f,open:u(d),close:u(p),high:u(m),low:u(h),volume:u(y),amount:u(R),price:u(S)}})}else{let o=new URLSearchParams({secid:`90.${n}`,fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",klt:s,fqt:"1",beg:"0",end:"20500101",smplmt:"10000",lmt:"1000000"}),i=`${lt}?${o.toString()}`,l=(await t.get(i,{responseType:"json"}))?.data?.klines;return!Array.isArray(l)||l.length===0?[]:l.map(c=>{let[f,d,p,m,h,y,R,S,b,M,A]=c.split(",");return{time:f,open:u(d),close:u(p),high:u(m),low:u(h),changePercent:u(b),change:u(M),volume:u(y),amount:u(R),amplitude:u(S),turnoverRate:u(A)}})}}function V(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function B(t,e){let r=[];for(let s=0;s<t.length;s++){if(s<e-1){r.push(null);continue}let n=0,o=0;for(let i=s-e+1;i<=s;i++)t[i]!==null&&(n+=t[i],o++);r.push(o===e?V(n/e):null)}return r}function q(t,e){let r=[],s=2/(e+1),n=null,o=!1;for(let i=0;i<t.length;i++){if(i<e-1){r.push(null);continue}if(!o){let l=0,c=0;for(let f=i-e+1;f<=i;f++)t[f]!==null&&(l+=t[f],c++);c===e&&(n=l/e,o=!0),r.push(n!==null?V(n):null);continue}let a=t[i];a===null?r.push(n!==null?V(n):null):(n=s*a+(1-s)*n,r.push(V(n)))}return r}function gt(t,e){let r=[],s=Array.from({length:e},(o,i)=>i+1),n=s.reduce((o,i)=>o+i,0);for(let o=0;o<t.length;o++){if(o<e-1){r.push(null);continue}let i=0,a=!0;for(let l=0;l<e;l++){let c=t[o-e+1+l];if(c===null){a=!1;break}i+=c*s[l]}r.push(a?V(i/n):null)}return r}function G(t,e={}){let{periods:r=[5,10,20,30,60,120,250],type:s="sma"}=e,n=s==="ema"?q:s==="wma"?gt:B,o={};for(let i of r)o[`ma${i}`]=n(t,i);return t.map((i,a)=>{let l={};for(let c of r)l[`ma${c}`]=o[`ma${c}`][a];return l})}function Ke(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function J(t,e={}){let{short:r=12,long:s=26,signal:n=9}=e,o=q(t,r),i=q(t,s),a=t.map((c,f)=>o[f]===null||i[f]===null?null:o[f]-i[f]),l=q(a,n);return t.map((c,f)=>({dif:a[f]!==null?Ke(a[f]):null,dea:l[f],macd:a[f]!==null&&l[f]!==null?Ke((a[f]-l[f])*2):null}))}function zt(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function He(t,e,r){let s=[];for(let n=0;n<t.length;n++){if(n<e-1||r[n]===null){s.push(null);continue}let o=0,i=0;for(let a=n-e+1;a<=n;a++)t[a]!==null&&r[n]!==null&&(o+=Math.pow(t[a]-r[n],2),i++);s.push(i===e?Math.sqrt(o/e):null)}return s}function Z(t,e={}){let{period:r=20,stdDev:s=2}=e,n=B(t,r),o=He(t,r,n);return t.map((i,a)=>{if(n[a]===null||o[a]===null)return{mid:null,upper:null,lower:null,bandwidth:null};let l=n[a]+s*o[a],c=n[a]-s*o[a],f=n[a]!==0?zt((l-c)/n[a]*100):null;return{mid:n[a],upper:zt(l),lower:zt(c),bandwidth:f}})}function Vt(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function Y(t,e={}){let{period:r=9,kPeriod:s=3,dPeriod:n=3}=e,o=[],i=50,a=50;for(let l=0;l<t.length;l++){if(l<r-1){o.push({k:null,d:null,j:null});continue}let c=-1/0,f=1/0,d=!0;for(let y=l-r+1;y<=l;y++){if(t[y].high===null||t[y].low===null){d=!1;break}c=Math.max(c,t[y].high),f=Math.min(f,t[y].low)}let p=t[l].close;if(!d||p===null||c===f){o.push({k:null,d:null,j:null});continue}let m=(p-f)/(c-f)*100;i=(s-1)/s*i+1/s*m,a=(n-1)/n*a+1/n*i;let h=3*i-2*a;o.push({k:Vt(i),d:Vt(a),j:Vt(h)})}return o}function Ne(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function X(t,e={}){let{periods:r=[6,12,24]}=e,s=[null];for(let o=1;o<t.length;o++)t[o]===null||t[o-1]===null?s.push(null):s.push(t[o]-t[o-1]);let n={};for(let o of r){let i=[],a=0,l=0;for(let c=0;c<t.length;c++){if(c<o){i.push(null),s[c]!==null&&(s[c]>0?a+=s[c]:l+=Math.abs(s[c]));continue}if(c===o)a=a/o,l=l/o;else{let f=s[c]??0,d=f>0?f:0,p=f<0?Math.abs(f):0;a=(a*(o-1)+d)/o,l=(l*(o-1)+p)/o}if(l===0)i.push(100);else if(a===0)i.push(0);else{let f=a/l;i.push(Ne(100-100/(1+f)))}}n[`rsi${o}`]=i}return t.map((o,i)=>{let a={};for(let l of r)a[`rsi${l}`]=n[`rsi${l}`][i];return a})}function De(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function tt(t,e={}){let{periods:r=[6,10]}=e,s={};for(let n of r){let o=[];for(let i=0;i<t.length;i++){if(i<n-1){o.push(null);continue}let a=-1/0,l=1/0,c=!0;for(let p=i-n+1;p<=i;p++){if(t[p].high===null||t[p].low===null){c=!1;break}a=Math.max(a,t[p].high),l=Math.min(l,t[p].low)}let f=t[i].close;if(!c||f===null||a===l){o.push(null);continue}let d=(a-f)/(a-l)*100;o.push(De(d))}s[`wr${n}`]=o}return t.map((n,o)=>{let i={};for(let a of r)i[`wr${a}`]=s[`wr${a}`][o];return i})}function Qe(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function et(t,e={}){let{periods:r=[6,12,24]}=e,s={};for(let n of r){let o=B(t,n),i=[];for(let a=0;a<t.length;a++)if(t[a]===null||o[a]===null||o[a]===0)i.push(null);else{let l=(t[a]-o[a])/o[a]*100;i.push(Qe(l))}s[`bias${n}`]=i}return t.map((n,o)=>{let i={};for(let a of r)i[`bias${a}`]=s[`bias${a}`][o];return i})}function $e(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function nt(t,e={}){let{period:r=14}=e,s=[],n=t.map(o=>o.high===null||o.low===null||o.close===null?null:(o.high+o.low+o.close)/3);for(let o=0;o<t.length;o++){if(o<r-1){s.push({cci:null});continue}let i=0,a=0;for(let d=o-r+1;d<=o;d++)n[d]!==null&&(i+=n[d],a++);if(a!==r||n[o]===null){s.push({cci:null});continue}let l=i/r,c=0;for(let d=o-r+1;d<=o;d++)c+=Math.abs(n[d]-l);let f=c/r;if(f===0)s.push({cci:0});else{let d=(n[o]-l)/(.015*f);s.push({cci:$e(d)})}}return s}function Gt(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function rt(t,e={}){let{period:r=14}=e,s=[],n=[];for(let i=0;i<t.length;i++){let{high:a,low:l,close:c}=t[i];if(a===null||l===null||c===null){n.push(null);continue}if(i===0)n.push(a-l);else{let f=t[i-1].close;if(f===null)n.push(a-l);else{let d=a-l,p=Math.abs(a-f),m=Math.abs(l-f);n.push(Math.max(d,p,m))}}}let o=null;for(let i=0;i<t.length;i++){if(i<r-1){s.push({tr:n[i]!==null?Gt(n[i]):null,atr:null});continue}if(i===r-1){let a=0,l=0;for(let c=0;c<r;c++)n[c]!==null&&(a+=n[c],l++);l===r&&(o=a/r)}else o!==null&&n[i]!==null&&(o=(o*(r-1)+n[i])/r);s.push({tr:n[i]!==null?Gt(n[i]):null,atr:o!==null?Gt(o):null})}return s}function ot(t,e={}){if(t.length===0)return[];let r=t.map(m=>m.close),s=t.map(m=>({open:m.open,high:m.high,low:m.low,close:m.close,volume:m.volume})),n=e.ma?G(r,typeof e.ma=="object"?e.ma:{}):null,o=e.macd?J(r,typeof e.macd=="object"?e.macd:{}):null,i=e.boll?Z(r,typeof e.boll=="object"?e.boll:{}):null,a=e.kdj?Y(s,typeof e.kdj=="object"?e.kdj:{}):null,l=e.rsi?X(r,typeof e.rsi=="object"?e.rsi:{}):null,c=e.wr?tt(s,typeof e.wr=="object"?e.wr:{}):null,f=e.bias?et(r,typeof e.bias=="object"?e.bias:{}):null,d=e.cci?nt(s,typeof e.cci=="object"?e.cci:{}):null,p=e.atr?rt(s,typeof e.atr=="object"?e.atr:{}):null;return t.map((m,h)=>({...m,...n&&{ma:n[h]},...o&&{macd:o[h]},...i&&{boll:i[h]},...a&&{kdj:a[h]},...l&&{rsi:l[h]},...c&&{wr:c[h]},...f&&{bias:f[h]},...d&&{cci:d[h]},...p&&{atr:p[h]}}))}var st=class{constructor(e={}){this.client=new z(e)}getFullQuotes(e){return K.getFullQuotes(this.client,e)}getSimpleQuotes(e){return K.getSimpleQuotes(this.client,e)}getHKQuotes(e){return K.getHKQuotes(this.client,e)}getUSQuotes(e){return K.getUSQuotes(this.client,e)}getFundQuotes(e){return K.getFundQuotes(this.client,e)}getFundFlow(e){return K.getFundFlow(this.client,e)}getPanelLargeOrder(e){return K.getPanelLargeOrder(this.client,e)}getTodayTimeline(e){return K.getTodayTimeline(this.client,e)}getIndustryList(){return P.getIndustryList(this.client)}getIndustrySpot(e){return P.getIndustrySpot(this.client,e)}getIndustryConstituents(e){return P.getIndustryConstituents(this.client,e)}getIndustryKline(e,r){return P.getIndustryKline(this.client,e,r)}getIndustryMinuteKline(e,r){return P.getIndustryMinuteKline(this.client,e,r)}getConceptList(){return P.getConceptList(this.client)}getConceptSpot(e){return P.getConceptSpot(this.client,e)}getConceptConstituents(e){return P.getConceptConstituents(this.client,e)}getConceptKline(e,r){return P.getConceptKline(this.client,e,r)}getConceptMinuteKline(e,r){return P.getConceptMinuteKline(this.client,e,r)}getHistoryKline(e,r){return P.getHistoryKline(this.client,e,r)}getMinuteKline(e,r){return P.getMinuteKline(this.client,e,r)}getHKHistoryKline(e,r){return P.getHKHistoryKline(this.client,e,r)}getUSHistoryKline(e,r){return P.getUSHistoryKline(this.client,e,r)}search(e){return K.search(this.client,e)}getAShareCodeList(e=!0){return K.getAShareCodeList(this.client,e)}getUSCodeList(e=!0){return K.getUSCodeList(this.client,e)}getHKCodeList(){return K.getHKCodeList(this.client)}async getAllAShareQuotes(e={}){let r=await this.getAShareCodeList();return this.getAllQuotesByCodes(r,e)}async getAllHKShareQuotes(e={}){let r=await this.getHKCodeList();return K.getAllHKQuotesByCodes(this.client,r,e)}async getAllUSShareQuotes(e={}){let r=await this.getUSCodeList(!1);return K.getAllUSQuotesByCodes(this.client,r,e)}getAllQuotesByCodes(e,r={}){return K.getAllQuotesByCodes(this.client,e,r)}async batchRaw(e){return this.client.getTencentQuote(e)}getTradingCalendar(){return K.getTradingCalendar(this.client)}detectMarket(e){return/^\d{3}\.[A-Z]+$/i.test(e)?"US":/^\d{5}$/.test(e)?"HK":"A"}safeMax(e,r=0){return!e||e.length===0?r:Math.max(...e)}calcRequiredLookback(e){let r=0,s=!1;if(e.ma){let o=typeof e.ma=="object"?e.ma:{},i=o.periods??[5,10,20,30,60,120,250],a=o.type??"sma";r=Math.max(r,this.safeMax(i,20)),a==="ema"&&(s=!0)}if(e.macd){let o=typeof e.macd=="object"?e.macd:{},i=o.long??26,a=o.signal??9;r=Math.max(r,i*3+a),s=!0}if(e.boll){let o=typeof e.boll=="object"&&e.boll.period?e.boll.period:20;r=Math.max(r,o)}if(e.kdj){let o=typeof e.kdj=="object"&&e.kdj.period?e.kdj.period:9;r=Math.max(r,o)}if(e.rsi){let o=typeof e.rsi=="object"&&e.rsi.periods?e.rsi.periods:[6,12,24];r=Math.max(r,this.safeMax(o,14)+1)}if(e.wr){let o=typeof e.wr=="object"&&e.wr.periods?e.wr.periods:[6,10];r=Math.max(r,this.safeMax(o,10))}if(e.bias){let o=typeof e.bias=="object"&&e.bias.periods?e.bias.periods:[6,12,24];r=Math.max(r,this.safeMax(o,12))}if(e.cci){let o=typeof e.cci=="object"&&e.cci.period?e.cci.period:14;r=Math.max(r,o)}if(e.atr){let o=typeof e.atr=="object"&&e.atr.period?e.atr.period:14;r=Math.max(r,o)}return Math.ceil(r*(s?1.5:1.2))}calcActualStartDate(e,r,s=1.5){let n=Math.ceil(r*s),o=new Date(parseInt(e.slice(0,4)),parseInt(e.slice(4,6))-1,parseInt(e.slice(6,8)));o.setDate(o.getDate()-n);let i=o.getFullYear(),a=String(o.getMonth()+1).padStart(2,"0"),l=String(o.getDate()).padStart(2,"0");return`${i}${a}${l}`}dateToTimestamp(e){let r=e.includes("-")?e:`${e.slice(0,4)}-${e.slice(4,6)}-${e.slice(6,8)}`;return new Date(r).getTime()}async getKlineWithIndicators(e,r={}){let{startDate:s,endDate:n,indicators:o={}}=r,i=r.market??this.detectMarket(e),a=this.calcRequiredLookback(o),c={A:1.5,HK:1.46,US:1.45}[i],f=s?this.calcActualStartDate(s,a,c):void 0,d={period:r.period,adjust:r.adjust,startDate:f,endDate:r.endDate},p;switch(i){case"HK":p=await this.getHKHistoryKline(e,d);break;case"US":p=await this.getUSHistoryKline(e,d);break;default:p=await this.getHistoryKline(e,d)}if(s&&p.length<a)switch(i){case"HK":p=await this.getHKHistoryKline(e,{...d,startDate:void 0});break;case"US":p=await this.getUSHistoryKline(e,{...d,startDate:void 0});break;default:p=await this.getHistoryKline(e,{...d,startDate:void 0})}let m=ot(p,o);if(s){let h=this.dateToTimestamp(s),y=n?this.dateToTimestamp(n):1/0;return m.filter(R=>{let S=this.dateToTimestamp(R.date);return S>=h&&S<=y})}return m}},Ae=st;0&&(module.exports={StockSDK,addIndicators,asyncPool,calcATR,calcBIAS,calcBOLL,calcCCI,calcEMA,calcKDJ,calcMA,calcMACD,calcRSI,calcSMA,calcWMA,calcWR,chunkArray,decodeGBK,parseResponse,safeNumber,safeNumberOrNull});
1
+ "use strict";var gt=Object.defineProperty;var Oe=Object.getOwnPropertyDescriptor;var Pe=Object.getOwnPropertyNames;var Ie=Object.prototype.hasOwnProperty;var ht=(e,t)=>{for(var r in t)gt(e,r,{get:t[r],enumerable:!0})},ke=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Pe(t))!Ie.call(e,n)&&n!==r&&gt(e,n,{get:()=>t[n],enumerable:!(s=Oe(t,n))||s.enumerable});return e};var Ue=e=>ke(gt({},"__esModule",{value:!0}),e);var Ge={};ht(Ge,{HttpError:()=>U,StockSDK:()=>ot,addIndicators:()=>rt,asyncPool:()=>H,calcATR:()=>nt,calcBIAS:()=>tt,calcBOLL:()=>J,calcCCI:()=>et,calcEMA:()=>I,calcKDJ:()=>Y,calcMA:()=>V,calcMACD:()=>G,calcRSI:()=>X,calcSMA:()=>P,calcWMA:()=>mt,calcWR:()=>Z,chunkArray:()=>D,decodeGBK:()=>N,default:()=>_e,parseResponse:()=>j,safeNumber:()=>d,safeNumberOrNull:()=>R});module.exports=Ue(Ge);function N(e){return new TextDecoder("gbk").decode(e)}function j(e){let t=e.split(";").map(s=>s.trim()).filter(Boolean),r=[];for(let s of t){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 d(e){if(!e||e==="")return 0;let t=parseFloat(e);return Number.isNaN(t)?0:t}function R(e){if(!e||e==="")return null;let t=parseFloat(e);return Number.isNaN(t)?null:t}function m(e){if(!e||e===""||e==="-")return null;let t=parseFloat(e);return Number.isNaN(t)?null:t}function h(e){return e==null?null:m(String(e))}var yt="https://qt.gtimg.cn",Ct="https://web.ifzq.gtimg.cn/appstock/app/minute/query",Rt="https://assets.linkdiary.cn/shares/zh_a_list.json",bt="https://assets.linkdiary.cn/shares/us_list.json",St="https://assets.linkdiary.cn/shares/hk_list.json",Zt="https://assets.linkdiary.cn/shares/trade-data-list.txt";var st="https://push2his.eastmoney.com/api/qt/stock/kline/get",Tt="https://push2his.eastmoney.com/api/qt/stock/trends2/get",wt="https://33.push2his.eastmoney.com/api/qt/stock/kline/get",Mt="https://63.push2his.eastmoney.com/api/qt/stock/kline/get",Kt="https://17.push2.eastmoney.com/api/qt/clist/get",At="https://91.push2.eastmoney.com/api/qt/stock/get",_t="https://29.push2.eastmoney.com/api/qt/clist/get",it="https://7.push2his.eastmoney.com/api/qt/stock/kline/get",Lt="https://push2his.eastmoney.com/api/qt/stock/trends2/get",Et="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",at="https://91.push2his.eastmoney.com/api/qt/stock/kline/get",Pt="https://push2his.eastmoney.com/api/qt/stock/trends2/get",It=3e4,Q=500,F=500,$=7,kt=3,Ut=1e3,Bt=3e4,Dt=2,Ht=[408,429,500,502,503,504];var U=class extends Error{constructor(r,s){super(`HTTP error! status: ${r}`);this.status=r;this.statusText=s;this.name="HttpError"}},W=class{constructor(t={}){this.baseUrl=t.baseUrl??yt,this.timeout=t.timeout??It,this.retryOptions=this.resolveRetryOptions(t.retry)}resolveRetryOptions(t){return{maxRetries:t?.maxRetries??kt,baseDelay:t?.baseDelay??Ut,maxDelay:t?.maxDelay??Bt,backoffMultiplier:t?.backoffMultiplier??Dt,retryableStatusCodes:t?.retryableStatusCodes??Ht,retryOnNetworkError:t?.retryOnNetworkError??!0,retryOnTimeout:t?.retryOnTimeout??!0,onRetry:t?.onRetry}}getTimeout(){return this.timeout}calculateDelay(t){return Math.min(this.retryOptions.baseDelay*Math.pow(this.retryOptions.backoffMultiplier,t),this.retryOptions.maxDelay)+Math.random()*100}sleep(t){return new Promise(r=>setTimeout(r,t))}shouldRetry(t,r){return r>=this.retryOptions.maxRetries?!1:t instanceof DOMException&&t.name==="AbortError"?this.retryOptions.retryOnTimeout:t instanceof TypeError?this.retryOptions.retryOnNetworkError:t instanceof U?this.retryOptions.retryableStatusCodes.includes(t.status):!1}async executeWithRetry(t,r=0){try{return await t()}catch(s){if(this.shouldRetry(s,r)){let n=this.calculateDelay(r);return this.retryOptions.onRetry&&s instanceof Error&&this.retryOptions.onRetry(r+1,s,n),await this.sleep(n),this.executeWithRetry(t,r+1)}throw s}}async get(t,r={}){return this.executeWithRetry(async()=>{let s=new AbortController,n=setTimeout(()=>s.abort(),this.timeout);try{let o=await fetch(t,{signal:s.signal});if(!o.ok)throw new U(o.status,o.statusText);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(t){let r=`${this.baseUrl}/?q=${encodeURIComponent(t)}`,s=await this.get(r,{responseType:"arraybuffer"}),n=N(s);return j(n)}};var Be=new Set(["daily","weekly","monthly"]),De=new Set(["1","5","15","30","60"]),He=new Set(["","qfq","hfq"]);function x(e,t){if(!Number.isFinite(e)||!Number.isInteger(e)||e<=0)throw new RangeError(`${t} must be a positive integer`)}function A(e){if(!Be.has(e))throw new RangeError("period must be one of: daily, weekly, monthly")}function B(e){if(!De.has(e))throw new RangeError("period must be one of: 1, 5, 15, 30, 60")}function M(e){if(!He.has(e))throw new RangeError("adjust must be one of: '', 'qfq', 'hfq'")}function D(e,t){x(t,"chunkSize");let r=[];for(let s=0;s<e.length;s+=t)r.push(e.slice(s,s+t));return r}async function H(e,t){x(t,"concurrency");let r=[],s=[];for(let n of e){let o=Promise.resolve().then(()=>n()).then(i=>{r.push(i)});if(s.push(o),s.length>=t){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 lt(e){return e.startsWith("sh")?"1":e.startsWith("sz")||e.startsWith("bj")?"0":e.startsWith("6")?"1":"0"}function _(e){return{daily:"101",weekly:"102",monthly:"103"}[e]}function K(e){return{"":"0",qfq:"1",hfq:"2"}[e]}var b={};ht(b,{getAShareCodeList:()=>se,getAllHKQuotesByCodes:()=>ue,getAllQuotesByCodes:()=>le,getAllUSQuotesByCodes:()=>ce,getFullQuotes:()=>ut,getFundFlow:()=>ee,getFundQuotes:()=>re,getHKCodeList:()=>ae,getHKQuotes:()=>ct,getPanelLargeOrder:()=>ne,getSimpleQuotes:()=>te,getTodayTimeline:()=>oe,getTradingCalendar:()=>fe,getUSCodeList:()=>ie,getUSQuotes:()=>ft,parseFullQuote:()=>vt,parseFundFlow:()=>Nt,parseFundQuote:()=>$t,parseHKQuote:()=>Qt,parsePanelLargeOrder:()=>jt,parseSimpleQuote:()=>qt,parseUSQuote:()=>Ft,search:()=>de});function vt(e){let t=[];for(let s=0;s<5;s++)t.push({price:d(e[9+s*2]),volume:d(e[10+s*2])});let r=[];for(let s=0;s<5;s++)r.push({price:d(e[19+s*2]),volume:d(e[20+s*2])});return{marketId:e[0]??"",name:e[1]??"",code:e[2]??"",price:d(e[3]),prevClose:d(e[4]),open:d(e[5]),volume:d(e[6]),outerVolume:d(e[7]),innerVolume:d(e[8]),bid:t,ask:r,time:e[30]??"",change:d(e[31]),changePercent:d(e[32]),high:d(e[33]),low:d(e[34]),volume2:d(e[36]),amount:d(e[37]),turnoverRate:R(e[38]),pe:R(e[39]),amplitude:R(e[43]),circulatingMarketCap:R(e[44]),totalMarketCap:R(e[45]),pb:R(e[46]),limitUp:R(e[47]),limitDown:R(e[48]),volumeRatio:R(e[49]),avgPrice:R(e[51]),peStatic:R(e[52]),peDynamic:R(e[53]),high52w:R(e[67]),low52w:R(e[68]),circulatingShares:R(e[72]),totalShares:R(e[73]),raw:e}}function qt(e){return{marketId:e[0]??"",name:e[1]??"",code:e[2]??"",price:d(e[3]),change:d(e[4]),changePercent:d(e[5]),volume:d(e[6]),amount:d(e[7]),marketCap:R(e[9]),marketType:e[10]??"",raw:e}}function Nt(e){return{code:e[0]??"",mainInflow:d(e[1]),mainOutflow:d(e[2]),mainNet:d(e[3]),mainNetRatio:d(e[4]),retailInflow:d(e[5]),retailOutflow:d(e[6]),retailNet:d(e[7]),retailNetRatio:d(e[8]),totalFlow:d(e[9]),name:e[12]??"",date:e[13]??"",raw:e}}function jt(e){return{buyLargeRatio:d(e[0]),buySmallRatio:d(e[1]),sellLargeRatio:d(e[2]),sellSmallRatio:d(e[3]),raw:e}}function Qt(e){return{marketId:e[0]??"",name:e[1]??"",code:e[2]??"",price:d(e[3]),prevClose:d(e[4]),open:d(e[5]),volume:d(e[6]),time:e[30]??"",change:d(e[31]),changePercent:d(e[32]),high:d(e[33]),low:d(e[34]),amount:d(e[37]),lotSize:R(e[40]),circulatingMarketCap:R(e[44]),totalMarketCap:R(e[45]),currency:e[e.length-3]??"",raw:e}}function Ft(e){return{marketId:e[0]??"",name:e[1]??"",code:e[2]??"",price:d(e[3]),prevClose:d(e[4]),open:d(e[5]),volume:d(e[6]),time:e[30]??"",change:d(e[31]),changePercent:d(e[32]),high:d(e[33]),low:d(e[34]),amount:d(e[37]),turnoverRate:R(e[38]),pe:R(e[39]),amplitude:R(e[43]),totalMarketCap:R(e[45]),pb:R(e[47]),high52w:R(e[48]),low52w:R(e[49]),raw:e}}function $t(e){return{code:e[0]??"",name:e[1]??"",nav:d(e[5]),accNav:d(e[6]),change:d(e[7]),navDate:e[8]??"",raw:e}}async function ut(e,t){return!t||t.length===0?[]:(await e.getTencentQuote(t.join(","))).filter(s=>s.fields&&s.fields.length>0&&s.fields[0]!=="").map(s=>vt(s.fields))}async function te(e,t){if(!t||t.length===0)return[];let r=t.map(n=>`s_${n}`);return(await e.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>qt(n.fields))}async function ee(e,t){if(!t||t.length===0)return[];let r=t.map(n=>`ff_${n}`);return(await e.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>Nt(n.fields))}async function ne(e,t){if(!t||t.length===0)return[];let r=t.map(n=>`s_pk${n}`);return(await e.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>jt(n.fields))}async function ct(e,t){if(!t||t.length===0)return[];let r=t.map(n=>`hk${n}`);return(await e.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>Qt(n.fields))}async function ft(e,t){if(!t||t.length===0)return[];let r=t.map(n=>`us${n}`);return(await e.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>Ft(n.fields))}async function re(e,t){if(!t||t.length===0)return[];let r=t.map(n=>`jj${n}`);return(await e.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>$t(n.fields))}async function oe(e,t){let r=e.getTimeout(),s=new AbortController,n=setTimeout(()=>s.abort(),r);try{let o=await fetch(`${Ct}?code=${t}`,{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?.[t];if(!a)return{code:t,date:"",data:[]};let l=a.data?.data||[],u=a.data?.date||"",c=!1;if(l.length>0){let p=l[0].split(" "),g=parseFloat(p[1])||0,y=parseInt(p[2],10)||0,C=parseFloat(p[3])||0;y>0&&g>0&&C/y>g*50&&(c=!0)}let f=l.map(p=>{let g=p.split(" "),y=g[0],C=`${y.slice(0,2)}:${y.slice(2,4)}`,T=parseInt(g[2],10)||0,w=parseFloat(g[3])||0,O=c?T*100:T,k=O>0?w/O:0;return{time:C,price:parseFloat(g[1])||0,volume:O,amount:w,avgPrice:Math.round(k*100)/100}});return{code:t,date:u,data:f}}finally{clearTimeout(n)}}async function se(e,t=!0){let r=e.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 t?a:a.map(l=>l.replace(/^(sh|sz|bj)/,""))}finally{clearTimeout(n)}}async function ie(e,t=!0){let r=e.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 t?a:a.map(l=>l.replace(/^\d{3}\./,""))}finally{clearTimeout(n)}}async function ae(e){let t=e.getTimeout(),r=new AbortController,s=setTimeout(()=>r.abort(),t);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 le(e,t,r={}){let{batchSize:s=Q,concurrency:n=$,onProgress:o}=r;x(s,"batchSize"),x(n,"concurrency");let i=Math.min(s,F),a=D(t,i),l=a.length,u=0,c=a.map(p=>async()=>{let g=await ut(e,p);return u++,o&&o(u,l),g});return(await H(c,n)).flat()}async function ue(e,t,r={}){let{batchSize:s=Q,concurrency:n=$,onProgress:o}=r;x(s,"batchSize"),x(n,"concurrency");let i=Math.min(s,F),a=D(t,i),l=a.length,u=0,c=a.map(p=>async()=>{let g=await ct(e,p);return u++,o&&o(u,l),g});return(await H(c,n)).flat()}async function ce(e,t,r={}){let{batchSize:s=Q,concurrency:n=$,onProgress:o}=r;x(s,"batchSize"),x(n,"concurrency");let i=Math.min(s,F),a=D(t,i),l=a.length,u=0,c=a.map(p=>async()=>{let g=await ft(e,p);return u++,o&&o(u,l),g});return(await H(c,n)).flat()}async function fe(e){let t=await e.get(Zt);return!t||t.trim()===""?[]:t.trim().split(",").map(r=>r.trim()).filter(r=>r.length>0)}var pe="https://smartbox.gtimg.cn/s3/";function ve(e){return e.replace(/\\u([0-9a-fA-F]{4})/g,(t,r)=>String.fromCharCode(parseInt(r,16)))}function qe(e){return!e||e==="N"?[]:e.split("^").filter(Boolean).map(r=>{let s=r.split("~"),n=s[0]||"",o=s[1]||"",i=ve(s[2]||""),a=s[4]||"";return{code:n+o,name:i,market:n,type:a}})}function Ne(e){return new Promise((t,r)=>{let s=`${pe}?v=2&t=all&q=${encodeURIComponent(e)}`;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),t(o)},n.onerror=()=>{document.body.removeChild(n),r(new Error("Network error calling Smartbox"))},document.body.appendChild(n)})}async function je(e,t){let r=`${pe}?v=2&t=all&q=${encodeURIComponent(t)}`,n=(await e.get(r)).match(/v_hint="([^"]*)"/);return n?n[1]:""}function Qe(){return typeof window<"u"&&typeof document<"u"}async function de(e,t){if(!t||!t.trim())return[];let r;return Qe()?r=await Ne(t):r=await je(e,t),qe(r)}var S={};ht(S,{getConceptConstituents:()=>we,getConceptKline:()=>Me,getConceptList:()=>Gt,getConceptMinuteKline:()=>Ke,getConceptSpot:()=>Te,getHKHistoryKline:()=>he,getHistoryKline:()=>me,getIndustryConstituents:()=>Re,getIndustryKline:()=>be,getIndustryList:()=>zt,getIndustryMinuteKline:()=>Se,getIndustrySpot:()=>Ce,getMinuteKline:()=>ge,getUSHistoryKline:()=>ye});async function v(e,t,r,s,n=100,o){let i=[],a=1,l=0;do{let u=new URLSearchParams({...r,pn:String(a),pz:String(n),fields:s}),c=`${t}?${u.toString()}`,p=(await e.get(c,{responseType:"json"}))?.data;if(!p||!Array.isArray(p.diff))break;a===1&&(l=p.total??0);let g=p.diff.map((y,C)=>o(y,i.length+C+1));i.push(...g),a++}while(i.length<l);return i}function L(e){let[t,r,s,n,o,i,a,l,u,c,f]=e.split(",");return{date:t,open:m(r),close:m(s),high:m(n),low:m(o),volume:m(i),amount:m(a),amplitude:m(l),changePercent:m(u),change:m(c),turnoverRate:m(f)}}async function E(e,t,r){let s=`${t}?${r.toString()}`,n=await e.get(s,{responseType:"json"});return{klines:n?.data?.klines||[],name:n?.data?.name,code:n?.data?.code}}async function me(e,t,r={}){let{period:s="daily",adjust:n="hfq",startDate:o="19700101",endDate:i="20500101"}=r;A(s),M(n);let a=t.replace(/^(sh|sz|bj)/,""),l=`${lt(t)}.${a}`,u=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f116",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:_(s),fqt:K(n),secid:l,beg:o,end:i}),c=st,{klines:f}=await E(e,c,u);return f.length===0?[]:f.map(p=>({...L(p),code:a}))}async function ge(e,t,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;B(s),M(n);let a=t.replace(/^(sh|sz|bj)/,""),l=`${lt(t)}.${a}`;if(s==="1"){let u=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13",fields2:"f51,f52,f53,f54,f55,f56,f57,f58",ut:"7eea3edcaed734bea9cbfc24409ed989",ndays:"5",iscr:"0",secid:l}),c=`${Tt}?${u.toString()}`,p=(await e.get(c,{responseType:"json"}))?.data?.trends;if(!Array.isArray(p)||p.length===0)return[];let g=o.replace("T"," ").slice(0,16),y=i.replace("T"," ").slice(0,16);return p.map(C=>{let[T,w,O,k,q,Le,Ee,xe]=C.split(",");return{time:T,open:m(w),close:m(O),high:m(k),low:m(q),volume:m(Le),amount:m(Ee),avgPrice:m(xe)}}).filter(C=>C.time>=g&&C.time<=y)}else{let u=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:s,fqt:K(n||""),secid:l,beg:"0",end:"20500000"}),c=st,{klines:f}=await E(e,c,u);if(f.length===0)return[];let p=o.replace("T"," ").slice(0,16),g=i.replace("T"," ").slice(0,16);return f.map(y=>{let C=L(y);return{...C,time:C.date}}).filter(y=>y.time>=p&&y.time<=g)}}async function he(e,t,r={}){let{period:s="daily",adjust:n="hfq",startDate:o="19700101",endDate:i="20500101"}=r;A(s),M(n);let a=t.replace(/^hk/i,"").padStart(5,"0"),l=`116.${a}`,u=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:_(s),fqt:K(n),secid:l,beg:o,end:i,lmt:"1000000"}),c=wt,{klines:f,name:p}=await E(e,c,u);return f.length===0?[]:f.map(g=>({...L(g),code:a,name:p||""}))}async function ye(e,t,r={}){let{period:s="daily",adjust:n="hfq",startDate:o="19700101",endDate:i="20500101"}=r;A(s),M(n);let a=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:_(s),fqt:K(n),secid:t,beg:o,end:i,lmt:"1000000"}),l=Mt,{klines:u,name:c,code:f}=await E(e,l,a),p=f||t.split(".")[1]||t,g=c||"";return u.length===0?[]:u.map(y=>({...L(y),code:p,name:g}))}var Wt=null;async function pt(e,t){if(t.startsWith("BK"))return t;if(!Wt){let s=await zt(e);Wt=new Map(s.map(n=>[n.name,n.code]))}let r=Wt.get(t);if(!r)throw new Error(`\u672A\u627E\u5230\u884C\u4E1A\u677F\u5757: ${t}`);return r}async function zt(e){let s=await v(e,Kt,{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:h(n.f2),change:h(n.f4),changePercent:h(n.f3),totalMarketCap:h(n.f20),turnoverRate:h(n.f8),riseCount:h(n.f104),fallCount:h(n.f105),leadingStock:n.f128?String(n.f128):null,leadingStockChangePercent:h(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(e,t){let r=await pt(e,t),s=new URLSearchParams({fields:"f43,f44,f45,f46,f47,f48,f170,f171,f168,f169",mpi:"1000",invt:"2",fltt:"1",secid:`90.${r}`}),n=`${At}?${s.toString()}`,i=(await e.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:u,divide:c})=>{let f=i[l],p=null;return typeof f=="number"&&!isNaN(f)&&(p=c?f/100:f),{item:u,value:p}}):[]}async function Re(e,t){let s={po:"1",np:"1",ut:"bd1d9ddb04089700cf9c27f6f7426281",fltt:"2",invt:"2",fid:"f3",fs:`b:${await pt(e,t)} f:!50`};return v(e,_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:h(o.f2),changePercent:h(o.f3),change:h(o.f4),volume:h(o.f5),amount:h(o.f6),amplitude:h(o.f7),high:h(o.f15),low:h(o.f16),open:h(o.f17),prevClose:h(o.f18),turnoverRate:h(o.f8),pe:h(o.f9),pb:h(o.f23)}))}async function be(e,t,r={}){let{period:s="daily",adjust:n="",startDate:o="19700101",endDate:i="20500101"}=r;A(s),M(n);let a=await pt(e,t),l=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:_(s),fqt:K(n),beg:o,end:i,smplmt:"10000",lmt:"1000000"}),u=it,{klines:c}=await E(e,u,l);return c.length===0?[]:c.map(f=>({...L(f)}))}async function Se(e,t,r={}){let{period:s="5"}=r;B(s);let n=await pt(e,t);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=`${Lt}?${o.toString()}`,l=(await e.get(i,{responseType:"json"}))?.data?.trends;return!Array.isArray(l)||l.length===0?[]:l.map(u=>{let[c,f,p,g,y,C,T,w]=u.split(",");return{time:c,open:m(f),close:m(p),high:m(g),low:m(y),volume:m(C),amount:m(T),price:m(w)}})}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=`${it}?${o.toString()}`,l=(await e.get(i,{responseType:"json"}))?.data?.klines;return!Array.isArray(l)||l.length===0?[]:l.map(u=>{let[c,f,p,g,y,C,T,w,O,k,q]=u.split(",");return{time:c,open:m(f),close:m(p),high:m(g),low:m(y),changePercent:m(O),change:m(k),volume:m(C),amount:m(T),amplitude:m(w),turnoverRate:m(q)}})}}var Vt=null;async function dt(e,t){if(t.startsWith("BK"))return t;if(!Vt){let s=await Gt(e);Vt=new Map(s.map(n=>[n.name,n.code]))}let r=Vt.get(t);if(!r)throw new Error(`\u672A\u627E\u5230\u6982\u5FF5\u677F\u5757: ${t}`);return r}async function Gt(e){let s=await v(e,Et,{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:h(n.f2),change:h(n.f4),changePercent:h(n.f3),totalMarketCap:h(n.f20),turnoverRate:h(n.f8),riseCount:h(n.f104),fallCount:h(n.f105),leadingStock:n.f128?String(n.f128):null,leadingStockChangePercent:h(n.f136)}));return s.sort((n,o)=>(o.changePercent??0)-(n.changePercent??0)),s.forEach((n,o)=>{n.rank=o+1}),s}async function Te(e,t){let r=await dt(e,t),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 e.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:u,divide:c})=>{let f=i[l],p=null;return typeof f=="number"&&!isNaN(f)&&(p=c?f/100:f),{item:u,value:p}}):[]}async function we(e,t){let s={po:"1",np:"1",ut:"bd1d9ddb04089700cf9c27f6f7426281",fltt:"2",invt:"2",fid:"f12",fs:`b:${await dt(e,t)} f:!50`};return v(e,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:h(o.f2),changePercent:h(o.f3),change:h(o.f4),volume:h(o.f5),amount:h(o.f6),amplitude:h(o.f7),high:h(o.f15),low:h(o.f16),open:h(o.f17),prevClose:h(o.f18),turnoverRate:h(o.f8),pe:h(o.f9),pb:h(o.f23)}))}async function Me(e,t,r={}){let{period:s="daily",adjust:n="",startDate:o="19700101",endDate:i="20500101"}=r;A(s),M(n);let a=await dt(e,t),l=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:_(s),fqt:K(n),beg:o,end:i,smplmt:"10000",lmt:"1000000"}),u=at,{klines:c}=await E(e,u,l);return c.length===0?[]:c.map(f=>({...L(f)}))}async function Ke(e,t,r={}){let{period:s="5"}=r;B(s);let n=await dt(e,t);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 e.get(i,{responseType:"json"}))?.data?.trends;return!Array.isArray(l)||l.length===0?[]:l.map(u=>{let[c,f,p,g,y,C,T,w]=u.split(",");return{time:c,open:m(f),close:m(p),high:m(g),low:m(y),volume:m(C),amount:m(T),price:m(w)}})}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 e.get(i,{responseType:"json"}))?.data?.klines;return!Array.isArray(l)||l.length===0?[]:l.map(u=>{let[c,f,p,g,y,C,T,w,O,k,q]=u.split(",");return{time:c,open:m(f),close:m(p),high:m(g),low:m(y),changePercent:m(O),change:m(k),volume:m(C),amount:m(T),amplitude:m(w),turnoverRate:m(q)}})}}function z(e,t=2){let r=Math.pow(10,t);return Math.round(e*r)/r}function P(e,t){let r=[];for(let s=0;s<e.length;s++){if(s<t-1){r.push(null);continue}let n=0,o=0;for(let i=s-t+1;i<=s;i++)e[i]!==null&&(n+=e[i],o++);r.push(o===t?z(n/t):null)}return r}function I(e,t){let r=[],s=2/(t+1),n=null,o=!1;for(let i=0;i<e.length;i++){if(i<t-1){r.push(null);continue}if(!o){let l=0,u=0;for(let c=i-t+1;c<=i;c++)e[c]!==null&&(l+=e[c],u++);u===t&&(n=l/t,o=!0),r.push(n!==null?z(n):null);continue}let a=e[i];a===null?r.push(n!==null?z(n):null):(n=s*a+(1-s)*n,r.push(z(n)))}return r}function mt(e,t){let r=[],s=Array.from({length:t},(o,i)=>i+1),n=s.reduce((o,i)=>o+i,0);for(let o=0;o<e.length;o++){if(o<t-1){r.push(null);continue}let i=0,a=!0;for(let l=0;l<t;l++){let u=e[o-t+1+l];if(u===null){a=!1;break}i+=u*s[l]}r.push(a?z(i/n):null)}return r}function V(e,t={}){let{periods:r=[5,10,20,30,60,120,250],type:s="sma"}=t,n=s==="ema"?I:s==="wma"?mt:P,o={};for(let i of r)o[`ma${i}`]=n(e,i);return e.map((i,a)=>{let l={};for(let u of r)l[`ma${u}`]=o[`ma${u}`][a];return l})}function Ae(e,t=2){let r=Math.pow(10,t);return Math.round(e*r)/r}function G(e,t={}){let{short:r=12,long:s=26,signal:n=9}=t,o=I(e,r),i=I(e,s),a=e.map((u,c)=>o[c]===null||i[c]===null?null:o[c]-i[c]),l=I(a,n);return e.map((u,c)=>({dif:a[c]!==null?Ae(a[c]):null,dea:l[c],macd:a[c]!==null&&l[c]!==null?Ae((a[c]-l[c])*2):null}))}function Jt(e,t=2){let r=Math.pow(10,t);return Math.round(e*r)/r}function Fe(e,t,r){let s=[];for(let n=0;n<e.length;n++){if(n<t-1||r[n]===null){s.push(null);continue}let o=0,i=0;for(let a=n-t+1;a<=n;a++)e[a]!==null&&r[n]!==null&&(o+=Math.pow(e[a]-r[n],2),i++);s.push(i===t?Math.sqrt(o/t):null)}return s}function J(e,t={}){let{period:r=20,stdDev:s=2}=t,n=P(e,r),o=Fe(e,r,n);return e.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],u=n[a]-s*o[a],c=n[a]!==0?Jt((l-u)/n[a]*100):null;return{mid:n[a],upper:Jt(l),lower:Jt(u),bandwidth:c}})}function Yt(e,t=2){let r=Math.pow(10,t);return Math.round(e*r)/r}function Y(e,t={}){let{period:r=9,kPeriod:s=3,dPeriod:n=3}=t,o=[],i=50,a=50;for(let l=0;l<e.length;l++){if(l<r-1){o.push({k:null,d:null,j:null});continue}let u=-1/0,c=1/0,f=!0;for(let C=l-r+1;C<=l;C++){if(e[C].high===null||e[C].low===null){f=!1;break}u=Math.max(u,e[C].high),c=Math.min(c,e[C].low)}let p=e[l].close;if(!f||p===null||u===c){o.push({k:null,d:null,j:null});continue}let g=(p-c)/(u-c)*100;i=(s-1)/s*i+1/s*g,a=(n-1)/n*a+1/n*i;let y=3*i-2*a;o.push({k:Yt(i),d:Yt(a),j:Yt(y)})}return o}function $e(e,t=2){let r=Math.pow(10,t);return Math.round(e*r)/r}function X(e,t={}){let{periods:r=[6,12,24]}=t,s=[null];for(let o=1;o<e.length;o++)e[o]===null||e[o-1]===null?s.push(null):s.push(e[o]-e[o-1]);let n={};for(let o of r){let i=[],a=0,l=0;for(let u=0;u<e.length;u++){if(u<o){i.push(null),s[u]!==null&&(s[u]>0?a+=s[u]:l+=Math.abs(s[u]));continue}if(u===o)a=a/o,l=l/o;else{let c=s[u]??0,f=c>0?c:0,p=c<0?Math.abs(c):0;a=(a*(o-1)+f)/o,l=(l*(o-1)+p)/o}if(l===0)i.push(100);else if(a===0)i.push(0);else{let c=a/l;i.push($e(100-100/(1+c)))}}n[`rsi${o}`]=i}return e.map((o,i)=>{let a={};for(let l of r)a[`rsi${l}`]=n[`rsi${l}`][i];return a})}function We(e,t=2){let r=Math.pow(10,t);return Math.round(e*r)/r}function Z(e,t={}){let{periods:r=[6,10]}=t,s={};for(let n of r){let o=[];for(let i=0;i<e.length;i++){if(i<n-1){o.push(null);continue}let a=-1/0,l=1/0,u=!0;for(let p=i-n+1;p<=i;p++){if(e[p].high===null||e[p].low===null){u=!1;break}a=Math.max(a,e[p].high),l=Math.min(l,e[p].low)}let c=e[i].close;if(!u||c===null||a===l){o.push(null);continue}let f=(a-c)/(a-l)*100;o.push(We(f))}s[`wr${n}`]=o}return e.map((n,o)=>{let i={};for(let a of r)i[`wr${a}`]=s[`wr${a}`][o];return i})}function ze(e,t=2){let r=Math.pow(10,t);return Math.round(e*r)/r}function tt(e,t={}){let{periods:r=[6,12,24]}=t,s={};for(let n of r){let o=P(e,n),i=[];for(let a=0;a<e.length;a++)if(e[a]===null||o[a]===null||o[a]===0)i.push(null);else{let l=(e[a]-o[a])/o[a]*100;i.push(ze(l))}s[`bias${n}`]=i}return e.map((n,o)=>{let i={};for(let a of r)i[`bias${a}`]=s[`bias${a}`][o];return i})}function Ve(e,t=2){let r=Math.pow(10,t);return Math.round(e*r)/r}function et(e,t={}){let{period:r=14}=t,s=[],n=e.map(o=>o.high===null||o.low===null||o.close===null?null:(o.high+o.low+o.close)/3);for(let o=0;o<e.length;o++){if(o<r-1){s.push({cci:null});continue}let i=0,a=0;for(let f=o-r+1;f<=o;f++)n[f]!==null&&(i+=n[f],a++);if(a!==r||n[o]===null){s.push({cci:null});continue}let l=i/r,u=0;for(let f=o-r+1;f<=o;f++)u+=Math.abs(n[f]-l);let c=u/r;if(c===0)s.push({cci:0});else{let f=(n[o]-l)/(.015*c);s.push({cci:Ve(f)})}}return s}function Xt(e,t=2){let r=Math.pow(10,t);return Math.round(e*r)/r}function nt(e,t={}){let{period:r=14}=t,s=[],n=[];for(let i=0;i<e.length;i++){let{high:a,low:l,close:u}=e[i];if(a===null||l===null||u===null){n.push(null);continue}if(i===0)n.push(a-l);else{let c=e[i-1].close;if(c===null)n.push(a-l);else{let f=a-l,p=Math.abs(a-c),g=Math.abs(l-c);n.push(Math.max(f,p,g))}}}let o=null;for(let i=0;i<e.length;i++){if(i<r-1){s.push({tr:n[i]!==null?Xt(n[i]):null,atr:null});continue}if(i===r-1){let a=0,l=0;for(let u=0;u<r;u++)n[u]!==null&&(a+=n[u],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?Xt(n[i]):null,atr:o!==null?Xt(o):null})}return s}function rt(e,t={}){if(e.length===0)return[];let r=e.map(g=>g.close),s=e.map(g=>({open:g.open,high:g.high,low:g.low,close:g.close,volume:g.volume})),n=t.ma?V(r,typeof t.ma=="object"?t.ma:{}):null,o=t.macd?G(r,typeof t.macd=="object"?t.macd:{}):null,i=t.boll?J(r,typeof t.boll=="object"?t.boll:{}):null,a=t.kdj?Y(s,typeof t.kdj=="object"?t.kdj:{}):null,l=t.rsi?X(r,typeof t.rsi=="object"?t.rsi:{}):null,u=t.wr?Z(s,typeof t.wr=="object"?t.wr:{}):null,c=t.bias?tt(r,typeof t.bias=="object"?t.bias:{}):null,f=t.cci?et(s,typeof t.cci=="object"?t.cci:{}):null,p=t.atr?nt(s,typeof t.atr=="object"?t.atr:{}):null;return e.map((g,y)=>({...g,...n&&{ma:n[y]},...o&&{macd:o[y]},...i&&{boll:i[y]},...a&&{kdj:a[y]},...l&&{rsi:l[y]},...u&&{wr:u[y]},...c&&{bias:c[y]},...f&&{cci:f[y]},...p&&{atr:p[y]}}))}var ot=class{constructor(t={}){this.client=new W(t)}getFullQuotes(t){return b.getFullQuotes(this.client,t)}getSimpleQuotes(t){return b.getSimpleQuotes(this.client,t)}getHKQuotes(t){return b.getHKQuotes(this.client,t)}getUSQuotes(t){return b.getUSQuotes(this.client,t)}getFundQuotes(t){return b.getFundQuotes(this.client,t)}getFundFlow(t){return b.getFundFlow(this.client,t)}getPanelLargeOrder(t){return b.getPanelLargeOrder(this.client,t)}getTodayTimeline(t){return b.getTodayTimeline(this.client,t)}getIndustryList(){return S.getIndustryList(this.client)}getIndustrySpot(t){return S.getIndustrySpot(this.client,t)}getIndustryConstituents(t){return S.getIndustryConstituents(this.client,t)}getIndustryKline(t,r){return S.getIndustryKline(this.client,t,r)}getIndustryMinuteKline(t,r){return S.getIndustryMinuteKline(this.client,t,r)}getConceptList(){return S.getConceptList(this.client)}getConceptSpot(t){return S.getConceptSpot(this.client,t)}getConceptConstituents(t){return S.getConceptConstituents(this.client,t)}getConceptKline(t,r){return S.getConceptKline(this.client,t,r)}getConceptMinuteKline(t,r){return S.getConceptMinuteKline(this.client,t,r)}getHistoryKline(t,r){return S.getHistoryKline(this.client,t,r)}getMinuteKline(t,r){return S.getMinuteKline(this.client,t,r)}getHKHistoryKline(t,r){return S.getHKHistoryKline(this.client,t,r)}getUSHistoryKline(t,r){return S.getUSHistoryKline(this.client,t,r)}search(t){return b.search(this.client,t)}getAShareCodeList(t=!0){return b.getAShareCodeList(this.client,t)}getUSCodeList(t=!0){return b.getUSCodeList(this.client,t)}getHKCodeList(){return b.getHKCodeList(this.client)}async getAllAShareQuotes(t={}){let r=await this.getAShareCodeList();return this.getAllQuotesByCodes(r,t)}async getAllHKShareQuotes(t={}){let r=await this.getHKCodeList();return b.getAllHKQuotesByCodes(this.client,r,t)}async getAllUSShareQuotes(t={}){let r=await this.getUSCodeList(!1);return b.getAllUSQuotesByCodes(this.client,r,t)}getAllQuotesByCodes(t,r={}){return b.getAllQuotesByCodes(this.client,t,r)}async batchRaw(t){return this.client.getTencentQuote(t)}getTradingCalendar(){return b.getTradingCalendar(this.client)}detectMarket(t){return/^\d{3}\.[A-Z]+$/i.test(t)?"US":/^\d{5}$/.test(t)?"HK":"A"}safeMax(t,r=0){return!t||t.length===0?r:Math.max(...t)}calcRequiredLookback(t){let r=0,s=!1;if(t.ma){let o=typeof t.ma=="object"?t.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(t.macd){let o=typeof t.macd=="object"?t.macd:{},i=o.long??26,a=o.signal??9;r=Math.max(r,i*3+a),s=!0}if(t.boll){let o=typeof t.boll=="object"&&t.boll.period?t.boll.period:20;r=Math.max(r,o)}if(t.kdj){let o=typeof t.kdj=="object"&&t.kdj.period?t.kdj.period:9;r=Math.max(r,o)}if(t.rsi){let o=typeof t.rsi=="object"&&t.rsi.periods?t.rsi.periods:[6,12,24];r=Math.max(r,this.safeMax(o,14)+1)}if(t.wr){let o=typeof t.wr=="object"&&t.wr.periods?t.wr.periods:[6,10];r=Math.max(r,this.safeMax(o,10))}if(t.bias){let o=typeof t.bias=="object"&&t.bias.periods?t.bias.periods:[6,12,24];r=Math.max(r,this.safeMax(o,12))}if(t.cci){let o=typeof t.cci=="object"&&t.cci.period?t.cci.period:14;r=Math.max(r,o)}if(t.atr){let o=typeof t.atr=="object"&&t.atr.period?t.atr.period:14;r=Math.max(r,o)}return Math.ceil(r*(s?1.5:1.2))}calcActualStartDate(t,r,s=1.5){let n=Math.ceil(r*s),o=new Date(parseInt(t.slice(0,4)),parseInt(t.slice(4,6))-1,parseInt(t.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(t){let r=t.includes("-")?t:`${t.slice(0,4)}-${t.slice(4,6)}-${t.slice(6,8)}`;return new Date(r).getTime()}async getKlineWithIndicators(t,r={}){let{startDate:s,endDate:n,indicators:o={}}=r,i=r.market??this.detectMarket(t),a=this.calcRequiredLookback(o),u={A:1.5,HK:1.46,US:1.45}[i],c=s?this.calcActualStartDate(s,a,u):void 0,f={period:r.period,adjust:r.adjust,startDate:c,endDate:r.endDate},p;switch(i){case"HK":p=await this.getHKHistoryKline(t,f);break;case"US":p=await this.getUSHistoryKline(t,f);break;default:p=await this.getHistoryKline(t,f)}if(s&&p.length<a)switch(i){case"HK":p=await this.getHKHistoryKline(t,{...f,startDate:void 0});break;case"US":p=await this.getUSHistoryKline(t,{...f,startDate:void 0});break;default:p=await this.getHistoryKline(t,{...f,startDate:void 0})}let g=rt(p,o);if(s){let y=this.dateToTimestamp(s),C=n?this.dateToTimestamp(n):1/0;return g.filter(T=>{let w=this.dateToTimestamp(T.date);return w>=y&&w<=C})}return g}},_e=ot;0&&(module.exports={HttpError,StockSDK,addIndicators,asyncPool,calcATR,calcBIAS,calcBOLL,calcCCI,calcEMA,calcKDJ,calcMA,calcMACD,calcRSI,calcSMA,calcWMA,calcWR,chunkArray,decodeGBK,parseResponse,safeNumber,safeNumberOrNull});
package/dist/index.d.cts CHANGED
@@ -1,6 +1,39 @@
1
+ /**
2
+ * HTTP 错误类
3
+ */
4
+ declare class HttpError extends Error {
5
+ readonly status: number;
6
+ readonly statusText: string;
7
+ constructor(status: number, statusText: string);
8
+ }
9
+ /**
10
+ * 重试配置选项
11
+ */
12
+ interface RetryOptions {
13
+ /** 最大重试次数,默认 3 */
14
+ maxRetries?: number;
15
+ /** 初始退避时间(毫秒),默认 1000 */
16
+ baseDelay?: number;
17
+ /** 最大退避时间(毫秒),默认 30000 */
18
+ maxDelay?: number;
19
+ /** 退避系数,默认 2 */
20
+ backoffMultiplier?: number;
21
+ /** 可重试的 HTTP 状态码,默认 [408, 429, 500, 502, 503, 504] */
22
+ retryableStatusCodes?: number[];
23
+ /** 是否在网络错误时重试,默认 true */
24
+ retryOnNetworkError?: boolean;
25
+ /** 是否在超时时重试,默认 true */
26
+ retryOnTimeout?: boolean;
27
+ /** 重试回调(用于日志等) */
28
+ onRetry?: (attempt: number, error: Error, delay: number) => void;
29
+ }
30
+ /**
31
+ * 请求客户端配置选项
32
+ */
1
33
  interface RequestClientOptions {
2
34
  baseUrl?: string;
3
35
  timeout?: number;
36
+ retry?: RetryOptions;
4
37
  }
5
38
 
6
39
  /**
@@ -1136,4 +1169,4 @@ declare class StockSDK {
1136
1169
  }): Promise<KlineWithIndicators<HistoryKline | HKUSHistoryKline>[]>;
1137
1170
  }
1138
1171
 
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 };
1172
+ export { type ATROptions, type BIASOptions, type BOLLOptions, type CCIOptions, type ConceptBoard, type ConceptBoardConstituent, type ConceptBoardKline, type ConceptBoardKlineOptions, type ConceptBoardMinuteKline, type ConceptBoardMinuteKlineOptions, type ConceptBoardMinuteTimeline, type ConceptBoardSpot, type FullQuote, type FundFlow, type FundQuote, type GetAllAShareQuotesOptions, type HKQuote, type HKUSHistoryKline, type HistoryKline, HttpError, type IndicatorOptions, type IndustryBoard, type IndustryBoardConstituent, type IndustryBoardKline, type IndustryBoardKlineOptions, type IndustryBoardMinuteKline, type IndustryBoardMinuteKlineOptions, type IndustryBoardMinuteTimeline, type IndustryBoardSpot, type KDJOptions, type KlineWithIndicators, type MACDOptions, type MAOptions, type MarketType, type MinuteKline, type MinuteTimeline, type PanelLargeOrder, type RSIOptions, type RequestClientOptions, type RetryOptions, type SearchResult, type SimpleQuote, StockSDK, type TodayTimeline, type TodayTimelineResponse, type USQuote, type WROptions, addIndicators, asyncPool, calcATR, calcBIAS, calcBOLL, calcCCI, calcEMA, calcKDJ, calcMA, calcMACD, calcRSI, calcSMA, calcWMA, calcWR, chunkArray, decodeGBK, StockSDK as default, parseResponse, safeNumber, safeNumberOrNull };
package/dist/index.d.ts CHANGED
@@ -1,6 +1,39 @@
1
+ /**
2
+ * HTTP 错误类
3
+ */
4
+ declare class HttpError extends Error {
5
+ readonly status: number;
6
+ readonly statusText: string;
7
+ constructor(status: number, statusText: string);
8
+ }
9
+ /**
10
+ * 重试配置选项
11
+ */
12
+ interface RetryOptions {
13
+ /** 最大重试次数,默认 3 */
14
+ maxRetries?: number;
15
+ /** 初始退避时间(毫秒),默认 1000 */
16
+ baseDelay?: number;
17
+ /** 最大退避时间(毫秒),默认 30000 */
18
+ maxDelay?: number;
19
+ /** 退避系数,默认 2 */
20
+ backoffMultiplier?: number;
21
+ /** 可重试的 HTTP 状态码,默认 [408, 429, 500, 502, 503, 504] */
22
+ retryableStatusCodes?: number[];
23
+ /** 是否在网络错误时重试,默认 true */
24
+ retryOnNetworkError?: boolean;
25
+ /** 是否在超时时重试,默认 true */
26
+ retryOnTimeout?: boolean;
27
+ /** 重试回调(用于日志等) */
28
+ onRetry?: (attempt: number, error: Error, delay: number) => void;
29
+ }
30
+ /**
31
+ * 请求客户端配置选项
32
+ */
1
33
  interface RequestClientOptions {
2
34
  baseUrl?: string;
3
35
  timeout?: number;
36
+ retry?: RetryOptions;
4
37
  }
5
38
 
6
39
  /**
@@ -1136,4 +1169,4 @@ declare class StockSDK {
1136
1169
  }): Promise<KlineWithIndicators<HistoryKline | HKUSHistoryKline>[]>;
1137
1170
  }
1138
1171
 
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 };
1172
+ export { type ATROptions, type BIASOptions, type BOLLOptions, type CCIOptions, type ConceptBoard, type ConceptBoardConstituent, type ConceptBoardKline, type ConceptBoardKlineOptions, type ConceptBoardMinuteKline, type ConceptBoardMinuteKlineOptions, type ConceptBoardMinuteTimeline, type ConceptBoardSpot, type FullQuote, type FundFlow, type FundQuote, type GetAllAShareQuotesOptions, type HKQuote, type HKUSHistoryKline, type HistoryKline, HttpError, type IndicatorOptions, type IndustryBoard, type IndustryBoardConstituent, type IndustryBoardKline, type IndustryBoardKlineOptions, type IndustryBoardMinuteKline, type IndustryBoardMinuteKlineOptions, type IndustryBoardMinuteTimeline, type IndustryBoardSpot, type KDJOptions, type KlineWithIndicators, type MACDOptions, type MAOptions, type MarketType, type MinuteKline, type MinuteTimeline, type PanelLargeOrder, type RSIOptions, type RequestClientOptions, type RetryOptions, type SearchResult, type SimpleQuote, StockSDK, type TodayTimeline, type TodayTimelineResponse, type USQuote, type WROptions, addIndicators, asyncPool, calcATR, calcBIAS, calcBOLL, calcCCI, calcEMA, calcKDJ, calcMA, calcMACD, calcRSI, calcSMA, calcWMA, calcWR, chunkArray, decodeGBK, StockSDK as default, parseResponse, safeNumber, safeNumberOrNull };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- var Ke=Object.defineProperty;var Vt=(t,e)=>{for(var r in e)Ke(t,r,{get:e[r],enumerable:!0})};function z(t){return new TextDecoder("gbk").decode(t)}function V(t){let e=t.split(";").map(s=>s.trim()).filter(Boolean),r=[];for(let s of e){let n=s.indexOf("=");if(n<0)continue;let o=s.slice(0,n).trim();o.startsWith("v_")&&(o=o.slice(2));let i=s.slice(n+1).trim();i.startsWith('"')&&i.endsWith('"')&&(i=i.slice(1,-1));let a=i.split("~");r.push({key:o,fields:a})}return r}function g(t){if(!t||t==="")return 0;let e=parseFloat(t);return Number.isNaN(e)?0:e}function R(t){if(!t||t==="")return null;let e=parseFloat(t);return Number.isNaN(e)?null:e}function u(t){if(!t||t===""||t==="-")return null;let e=parseFloat(t);return Number.isNaN(e)?null:e}var ht="https://qt.gtimg.cn",yt="https://web.ifzq.gtimg.cn/appstock/app/minute/query",Ct="https://assets.linkdiary.cn/shares/zh_a_list.json",Rt="https://assets.linkdiary.cn/shares/us_list.json",St="https://assets.linkdiary.cn/shares/hk_list.json",Gt="https://assets.linkdiary.cn/shares/trade-data-list.txt";var G="https://push2his.eastmoney.com/api/qt/stock/kline/get",bt="https://push2his.eastmoney.com/api/qt/stock/trends2/get",wt="https://33.push2his.eastmoney.com/api/qt/stock/kline/get",Tt="https://63.push2his.eastmoney.com/api/qt/stock/kline/get",Mt="https://17.push2.eastmoney.com/api/qt/clist/get",Kt="https://91.push2.eastmoney.com/api/qt/stock/get",At="https://29.push2.eastmoney.com/api/qt/clist/get",J="https://7.push2his.eastmoney.com/api/qt/stock/kline/get",Pt="https://push2his.eastmoney.com/api/qt/stock/trends2/get",_t="https://79.push2.eastmoney.com/api/qt/clist/get",Lt="https://91.push2.eastmoney.com/api/qt/stock/get",kt="https://29.push2.eastmoney.com/api/qt/clist/get",Z="https://91.push2his.eastmoney.com/api/qt/stock/kline/get",It="https://push2his.eastmoney.com/api/qt/stock/trends2/get",xt=3e4,D=500,Q=500,$=7;var F=class{constructor(e={}){this.baseUrl=e.baseUrl??ht,this.timeout=e.timeout??xt}getTimeout(){return this.timeout}async get(e,r={}){let s=new AbortController,n=setTimeout(()=>s.abort(),this.timeout);try{let o=await fetch(e,{signal:s.signal});if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);switch(r.responseType){case"json":return await o.json();case"arraybuffer":return await o.arrayBuffer();default:return await o.text()}}finally{clearTimeout(n)}}async getTencentQuote(e){let r=`${this.baseUrl}/?q=${encodeURIComponent(e)}`,s=await this.get(r,{responseType:"arraybuffer"}),n=z(s);return V(n)}};var Ae=new Set(["daily","weekly","monthly"]),Pe=new Set(["1","5","15","30","60"]),_e=new Set(["","qfq","hfq"]);function E(t,e){if(!Number.isFinite(t)||!Number.isInteger(t)||t<=0)throw new RangeError(`${e} must be a positive integer`)}function U(t){if(!Ae.has(t))throw new RangeError("period must be one of: daily, weekly, monthly")}function q(t){if(!Pe.has(t))throw new RangeError("period must be one of: 1, 5, 15, 30, 60")}function I(t){if(!_e.has(t))throw new RangeError("adjust must be one of: '', 'qfq', 'hfq'")}function H(t,e){E(e,"chunkSize");let r=[];for(let s=0;s<t.length;s+=e)r.push(t.slice(s,s+e));return r}async function N(t,e){E(e,"concurrency");let r=[],s=[];for(let n of t){let o=Promise.resolve().then(()=>n()).then(i=>{r.push(i)});if(s.push(o),s.length>=e){await Promise.race(s);for(let i=s.length-1;i>=0;i--)await Promise.race([s[i].then(()=>"fulfilled"),Promise.resolve("pending")])==="fulfilled"&&s.splice(i,1)}}return await Promise.all(s),r}function Y(t){return t.startsWith("sh")?"1":t.startsWith("sz")||t.startsWith("bj")?"0":t.startsWith("6")?"1":"0"}var K={};Vt(K,{getAShareCodeList:()=>ee,getAllHKQuotesByCodes:()=>se,getAllQuotesByCodes:()=>oe,getAllUSQuotesByCodes:()=>ie,getFullQuotes:()=>X,getFundFlow:()=>Zt,getFundQuotes:()=>Xt,getHKCodeList:()=>re,getHKQuotes:()=>tt,getPanelLargeOrder:()=>Yt,getSimpleQuotes:()=>Jt,getTodayTimeline:()=>te,getTradingCalendar:()=>ae,getUSCodeList:()=>ne,getUSQuotes:()=>et,parseFullQuote:()=>Ot,parseFundFlow:()=>Et,parseFundQuote:()=>vt,parseHKQuote:()=>qt,parsePanelLargeOrder:()=>Bt,parseSimpleQuote:()=>Ut,parseUSQuote:()=>jt,search:()=>ue});function Ot(t){let e=[];for(let s=0;s<5;s++)e.push({price:g(t[9+s*2]),volume:g(t[10+s*2])});let r=[];for(let s=0;s<5;s++)r.push({price:g(t[19+s*2]),volume:g(t[20+s*2])});return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:g(t[3]),prevClose:g(t[4]),open:g(t[5]),volume:g(t[6]),outerVolume:g(t[7]),innerVolume:g(t[8]),bid:e,ask:r,time:t[30]??"",change:g(t[31]),changePercent:g(t[32]),high:g(t[33]),low:g(t[34]),volume2:g(t[36]),amount:g(t[37]),turnoverRate:R(t[38]),pe:R(t[39]),amplitude:R(t[43]),circulatingMarketCap:R(t[44]),totalMarketCap:R(t[45]),pb:R(t[46]),limitUp:R(t[47]),limitDown:R(t[48]),volumeRatio:R(t[49]),avgPrice:R(t[51]),peStatic:R(t[52]),peDynamic:R(t[53]),high52w:R(t[67]),low52w:R(t[68]),circulatingShares:R(t[72]),totalShares:R(t[73]),raw:t}}function Ut(t){return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:g(t[3]),change:g(t[4]),changePercent:g(t[5]),volume:g(t[6]),amount:g(t[7]),marketCap:R(t[9]),marketType:t[10]??"",raw:t}}function Et(t){return{code:t[0]??"",mainInflow:g(t[1]),mainOutflow:g(t[2]),mainNet:g(t[3]),mainNetRatio:g(t[4]),retailInflow:g(t[5]),retailOutflow:g(t[6]),retailNet:g(t[7]),retailNetRatio:g(t[8]),totalFlow:g(t[9]),name:t[12]??"",date:t[13]??"",raw:t}}function Bt(t){return{buyLargeRatio:g(t[0]),buySmallRatio:g(t[1]),sellLargeRatio:g(t[2]),sellSmallRatio:g(t[3]),raw:t}}function qt(t){return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:g(t[3]),prevClose:g(t[4]),open:g(t[5]),volume:g(t[6]),time:t[30]??"",change:g(t[31]),changePercent:g(t[32]),high:g(t[33]),low:g(t[34]),amount:g(t[37]),lotSize:R(t[40]),circulatingMarketCap:R(t[44]),totalMarketCap:R(t[45]),currency:t[t.length-3]??"",raw:t}}function jt(t){return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:g(t[3]),prevClose:g(t[4]),open:g(t[5]),volume:g(t[6]),time:t[30]??"",change:g(t[31]),changePercent:g(t[32]),high:g(t[33]),low:g(t[34]),amount:g(t[37]),turnoverRate:R(t[38]),pe:R(t[39]),amplitude:R(t[43]),totalMarketCap:R(t[45]),pb:R(t[47]),high52w:R(t[48]),low52w:R(t[49]),raw:t}}function vt(t){return{code:t[0]??"",name:t[1]??"",nav:g(t[5]),accNav:g(t[6]),change:g(t[7]),navDate:t[8]??"",raw:t}}async function X(t,e){return!e||e.length===0?[]:(await t.getTencentQuote(e.join(","))).filter(s=>s.fields&&s.fields.length>0&&s.fields[0]!=="").map(s=>Ot(s.fields))}async function Jt(t,e){if(!e||e.length===0)return[];let r=e.map(n=>`s_${n}`);return(await t.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>Ut(n.fields))}async function Zt(t,e){if(!e||e.length===0)return[];let r=e.map(n=>`ff_${n}`);return(await t.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>Et(n.fields))}async function Yt(t,e){if(!e||e.length===0)return[];let r=e.map(n=>`s_pk${n}`);return(await t.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>Bt(n.fields))}async function tt(t,e){if(!e||e.length===0)return[];let r=e.map(n=>`hk${n}`);return(await t.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>qt(n.fields))}async function et(t,e){if(!e||e.length===0)return[];let r=e.map(n=>`us${n}`);return(await t.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>jt(n.fields))}async function Xt(t,e){if(!e||e.length===0)return[];let r=e.map(n=>`jj${n}`);return(await t.getTencentQuote(r.join(","))).filter(n=>n.fields&&n.fields.length>0&&n.fields[0]!=="").map(n=>vt(n.fields))}async function te(t,e){let r=t.getTimeout(),s=new AbortController,n=setTimeout(()=>s.abort(),r);try{let o=await fetch(`${yt}?code=${e}`,{signal:s.signal});if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);let i=await o.json();if(i.code!==0)throw new Error(i.msg||"API error");let a=i.data?.[e];if(!a)return{code:e,date:"",data:[]};let l=a.data?.data||[],c=a.data?.date||"",f=!1;if(l.length>0){let p=l[0].split(" "),m=parseFloat(p[1])||0,h=parseInt(p[2],10)||0,y=parseFloat(p[3])||0;h>0&&m>0&&y/h>m*50&&(f=!0)}let d=l.map(p=>{let m=p.split(" "),h=m[0],y=`${h.slice(0,2)}:${h.slice(2,4)}`,C=parseInt(m[2],10)||0,S=parseFloat(m[3])||0,b=f?C*100:C,M=b>0?S/b:0;return{time:y,price:parseFloat(m[1])||0,volume:b,amount:S,avgPrice:Math.round(M*100)/100}});return{code:e,date:c,data:d}}finally{clearTimeout(n)}}async function ee(t,e=!0){let r=t.getTimeout(),s=new AbortController,n=setTimeout(()=>s.abort(),r);try{let o=await fetch(Ct,{signal:s.signal});if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);let a=(await o.json()).list||[];return e?a:a.map(l=>l.replace(/^(sh|sz|bj)/,""))}finally{clearTimeout(n)}}async function ne(t,e=!0){let r=t.getTimeout(),s=new AbortController,n=setTimeout(()=>s.abort(),r);try{let o=await fetch(Rt,{signal:s.signal});if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);let a=(await o.json()).list||[];return e?a:a.map(l=>l.replace(/^\d{3}\./,""))}finally{clearTimeout(n)}}async function re(t){let e=t.getTimeout(),r=new AbortController,s=setTimeout(()=>r.abort(),e);try{let n=await fetch(St,{signal:r.signal});if(!n.ok)throw new Error(`HTTP error! status: ${n.status}`);return(await n.json()).list||[]}finally{clearTimeout(s)}}async function oe(t,e,r={}){let{batchSize:s=D,concurrency:n=$,onProgress:o}=r;E(s,"batchSize"),E(n,"concurrency");let i=Math.min(s,Q),a=H(e,i),l=a.length,c=0,f=a.map(p=>async()=>{let m=await X(t,p);return c++,o&&o(c,l),m});return(await N(f,n)).flat()}async function se(t,e,r={}){let{batchSize:s=D,concurrency:n=$,onProgress:o}=r;E(s,"batchSize"),E(n,"concurrency");let i=Math.min(s,Q),a=H(e,i),l=a.length,c=0,f=a.map(p=>async()=>{let m=await tt(t,p);return c++,o&&o(c,l),m});return(await N(f,n)).flat()}async function ie(t,e,r={}){let{batchSize:s=D,concurrency:n=$,onProgress:o}=r;E(s,"batchSize"),E(n,"concurrency");let i=Math.min(s,Q),a=H(e,i),l=a.length,c=0,f=a.map(p=>async()=>{let m=await et(t,p);return c++,o&&o(c,l),m});return(await N(f,n)).flat()}async function ae(t){let e=await t.get(Gt);return!e||e.trim()===""?[]:e.trim().split(",").map(r=>r.trim()).filter(r=>r.length>0)}var le="https://smartbox.gtimg.cn/s3/";function Le(t){return t.replace(/\\u([0-9a-fA-F]{4})/g,(e,r)=>String.fromCharCode(parseInt(r,16)))}function ke(t){return!t||t==="N"?[]:t.split("^").filter(Boolean).map(r=>{let s=r.split("~"),n=s[0]||"",o=s[1]||"",i=Le(s[2]||""),a=s[4]||"";return{code:n+o,name:i,market:n,type:a}})}function Ie(t){return new Promise((e,r)=>{let s=`${le}?v=2&t=all&q=${encodeURIComponent(t)}`;window.v_hint="";let n=document.createElement("script");n.src=s,n.charset="utf-8",n.onload=()=>{let o=window.v_hint||"";document.body.removeChild(n),e(o)},n.onerror=()=>{document.body.removeChild(n),r(new Error("Network error calling Smartbox"))},document.body.appendChild(n)})}async function xe(t,e){let r=`${le}?v=2&t=all&q=${encodeURIComponent(e)}`,n=(await t.get(r)).match(/v_hint="([^"]*)"/);return n?n[1]:""}function Oe(){return typeof window<"u"&&typeof document<"u"}async function ue(t,e){if(!e||!e.trim())return[];let r;return Oe()?r=await Ie(e):r=await xe(t,e),ke(r)}var P={};Vt(P,{getConceptConstituents:()=>be,getConceptKline:()=>we,getConceptList:()=>Qt,getConceptMinuteKline:()=>Te,getConceptSpot:()=>Se,getHKHistoryKline:()=>pe,getHistoryKline:()=>ce,getIndustryConstituents:()=>he,getIndustryKline:()=>ye,getIndustryList:()=>Nt,getIndustryMinuteKline:()=>Ce,getIndustrySpot:()=>ge,getMinuteKline:()=>fe,getUSHistoryKline:()=>de});async function ce(t,e,r={}){let{period:s="daily",adjust:n="hfq",startDate:o="19700101",endDate:i="20500101"}=r;U(s),I(n);let a=e.replace(/^(sh|sz|bj)/,""),l={daily:"101",weekly:"102",monthly:"103"},c={"":"0",qfq:"1",hfq:"2"},f=`${Y(e)}.${a}`,d=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f116",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:l[s],fqt:c[n],secid:f,beg:o,end:i}),p=`${G}?${d.toString()}`,h=(await t.get(p,{responseType:"json"}))?.data?.klines;return!Array.isArray(h)||h.length===0?[]:h.map(y=>{let[C,S,b,M,A,_,L,k,x,O,B]=y.split(",");return{date:C,code:a,open:u(S),close:u(b),high:u(M),low:u(A),volume:u(_),amount:u(L),amplitude:u(k),changePercent:u(x),change:u(O),turnoverRate:u(B)}})}async function fe(t,e,r={}){let{period:s="1",adjust:n="hfq",startDate:o="1979-09-01 09:32:00",endDate:i="2222-01-01 09:32:00"}=r;q(s),I(n);let a=e.replace(/^(sh|sz|bj)/,""),l=`${Y(e)}.${a}`;if(s==="1"){let c=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13",fields2:"f51,f52,f53,f54,f55,f56,f57,f58",ut:"7eea3edcaed734bea9cbfc24409ed989",ndays:"5",iscr:"0",secid:l}),f=`${bt}?${c.toString()}`,p=(await t.get(f,{responseType:"json"}))?.data?.trends;if(!Array.isArray(p)||p.length===0)return[];let m=o.replace("T"," ").slice(0,16),h=i.replace("T"," ").slice(0,16);return p.map(y=>{let[C,S,b,M,A,_,L,k]=y.split(",");return{time:C,open:u(S),close:u(b),high:u(M),low:u(A),volume:u(_),amount:u(L),avgPrice:u(k)}}).filter(y=>y.time>=m&&y.time<=h)}else{let c={"":"0",qfq:"1",hfq:"2"},f=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:s,fqt:c[n],secid:l,beg:"0",end:"20500000"}),d=`${G}?${f.toString()}`,m=(await t.get(d,{responseType:"json"}))?.data?.klines;if(!Array.isArray(m)||m.length===0)return[];let h=o.replace("T"," ").slice(0,16),y=i.replace("T"," ").slice(0,16);return m.map(C=>{let[S,b,M,A,_,L,k,x,O,B,gt]=C.split(",");return{time:S,open:u(b),close:u(M),high:u(A),low:u(_),changePercent:u(O),change:u(B),volume:u(L),amount:u(k),amplitude:u(x),turnoverRate:u(gt)}}).filter(C=>C.time>=h&&C.time<=y)}}async function pe(t,e,r={}){let{period:s="daily",adjust:n="hfq",startDate:o="19700101",endDate:i="20500101"}=r;U(s),I(n);let a=e.replace(/^hk/i,"").padStart(5,"0"),l={daily:"101",weekly:"102",monthly:"103"},c={"":"0",qfq:"1",hfq:"2"},f=`116.${a}`,d=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:l[s],fqt:c[n],secid:f,beg:o,end:i,lmt:"1000000"}),p=`${wt}?${d.toString()}`,m=await t.get(p,{responseType:"json"}),h=m?.data?.klines,y=m?.data?.name||"";return!Array.isArray(h)||h.length===0?[]:h.map(C=>{let[S,b,M,A,_,L,k,x,O,B,gt]=C.split(",");return{date:S,code:a,name:y,open:u(b),close:u(M),high:u(A),low:u(_),volume:u(L),amount:u(k),amplitude:u(x),changePercent:u(O),change:u(B),turnoverRate:u(gt)}})}async function de(t,e,r={}){let{period:s="daily",adjust:n="hfq",startDate:o="19700101",endDate:i="20500101"}=r;U(s),I(n);let a={daily:"101",weekly:"102",monthly:"103"},l={"":"0",qfq:"1",hfq:"2"},c=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:a[s],fqt:l[n],secid:e,beg:o,end:i,lmt:"1000000"}),f=`${Tt}?${c.toString()}`,d=await t.get(f,{responseType:"json"}),p=d?.data?.klines,m=d?.data?.code||e.split(".")[1]||e,h=d?.data?.name||"";return!Array.isArray(p)||p.length===0?[]:p.map(y=>{let[C,S,b,M,A,_,L,k,x,O,B]=y.split(",");return{date:C,code:m,name:h,open:u(S),close:u(b),high:u(M),low:u(A),volume:u(_),amount:u(L),amplitude:u(k),changePercent:u(x),change:u(O),turnoverRate:u(B)}})}var Ht=null;async function nt(t,e){if(e.startsWith("BK"))return e;if(!Ht){let s=await Nt(t);Ht=new Map(s.map(n=>[n.name,n.code]))}let r=Ht.get(e);if(!r)throw new Error(`\u672A\u627E\u5230\u884C\u4E1A\u677F\u5757: ${e}`);return r}function w(t){if(t==null)return null;let e=String(t);return u(e)}async function me(t,e,r,s,n=100,o){let i=[],a=1,l=0;do{let c=new URLSearchParams({...r,pn:String(a),pz:String(n),fields:s}),f=`${e}?${c.toString()}`,p=(await t.get(f,{responseType:"json"}))?.data;if(!p||!Array.isArray(p.diff))break;a===1&&(l=p.total??0);let m=p.diff.map((h,y)=>o(h,i.length+y+1));i.push(...m),a++}while(i.length<l);return i}async function Nt(t){let s=await me(t,Mt,{po:"1",np:"1",ut:"bd1d9ddb04089700cf9c27f6f7426281",fltt:"2",invt:"2",fid:"f3",fs:"m:90 t:2 f:!50"},"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f26,f22,f33,f11,f62,f128,f136,f115,f152,f124,f107,f104,f105,f140,f141,f207,f208,f209,f222",100,(n,o)=>({rank:o,name:String(n.f14??""),code:String(n.f12??""),price:w(n.f2),change:w(n.f4),changePercent:w(n.f3),totalMarketCap:w(n.f20),turnoverRate:w(n.f8),riseCount:w(n.f104),fallCount:w(n.f105),leadingStock:n.f128?String(n.f128):null,leadingStockChangePercent:w(n.f136)}));return s.sort((n,o)=>(o.changePercent??0)-(n.changePercent??0)),s.forEach((n,o)=>{n.rank=o+1}),s}async function ge(t,e){let r=await nt(t,e),s=new URLSearchParams({fields:"f43,f44,f45,f46,f47,f48,f170,f171,f168,f169",mpi:"1000",invt:"2",fltt:"1",secid:`90.${r}`}),n=`${Kt}?${s.toString()}`,i=(await t.get(n,{responseType:"json"}))?.data;return i?[{key:"f43",name:"\u6700\u65B0",divide:!0},{key:"f44",name:"\u6700\u9AD8",divide:!0},{key:"f45",name:"\u6700\u4F4E",divide:!0},{key:"f46",name:"\u5F00\u76D8",divide:!0},{key:"f47",name:"\u6210\u4EA4\u91CF",divide:!1},{key:"f48",name:"\u6210\u4EA4\u989D",divide:!1},{key:"f170",name:"\u6DA8\u8DCC\u5E45",divide:!0},{key:"f171",name:"\u632F\u5E45",divide:!0},{key:"f168",name:"\u6362\u624B\u7387",divide:!0},{key:"f169",name:"\u6DA8\u8DCC\u989D",divide:!0}].map(({key:l,name:c,divide:f})=>{let d=i[l],p=null;return typeof d=="number"&&!isNaN(d)&&(p=f?d/100:d),{item:c,value:p}}):[]}async function he(t,e){let s={po:"1",np:"1",ut:"bd1d9ddb04089700cf9c27f6f7426281",fltt:"2",invt:"2",fid:"f3",fs:`b:${await nt(t,e)} f:!50`};return me(t,At,s,"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152,f45",100,(o,i)=>({rank:i,code:String(o.f12??""),name:String(o.f14??""),price:w(o.f2),changePercent:w(o.f3),change:w(o.f4),volume:w(o.f5),amount:w(o.f6),amplitude:w(o.f7),high:w(o.f15),low:w(o.f16),open:w(o.f17),prevClose:w(o.f18),turnoverRate:w(o.f8),pe:w(o.f9),pb:w(o.f23)}))}async function ye(t,e,r={}){let{period:s="daily",adjust:n="",startDate:o="19700101",endDate:i="20500101"}=r;U(s),I(n);let a=await nt(t,e),l={daily:"101",weekly:"102",monthly:"103"},c={"":"0",qfq:"1",hfq:"2"},f=new URLSearchParams({secid:`90.${a}`,fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",klt:l[s],fqt:c[n],beg:o,end:i,smplmt:"10000",lmt:"1000000"}),d=`${J}?${f.toString()}`,m=(await t.get(d,{responseType:"json"}))?.data?.klines;return!Array.isArray(m)||m.length===0?[]:m.map(h=>{let[y,C,S,b,M,A,_,L,k,x,O]=h.split(",");return{date:y,open:u(C),close:u(S),high:u(b),low:u(M),changePercent:u(k),change:u(x),volume:u(A),amount:u(_),amplitude:u(L),turnoverRate:u(O)}})}async function Ce(t,e,r={}){let{period:s="5"}=r;q(s);let n=await nt(t,e);if(s==="1"){let o=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13",fields2:"f51,f52,f53,f54,f55,f56,f57,f58",iscr:"0",ndays:"1",secid:`90.${n}`}),i=`${Pt}?${o.toString()}`,l=(await t.get(i,{responseType:"json"}))?.data?.trends;return!Array.isArray(l)||l.length===0?[]:l.map(c=>{let[f,d,p,m,h,y,C,S]=c.split(",");return{time:f,open:u(d),close:u(p),high:u(m),low:u(h),volume:u(y),amount:u(C),price:u(S)}})}else{let o=new URLSearchParams({secid:`90.${n}`,fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",klt:s,fqt:"1",beg:"0",end:"20500101",smplmt:"10000",lmt:"1000000"}),i=`${J}?${o.toString()}`,l=(await t.get(i,{responseType:"json"}))?.data?.klines;return!Array.isArray(l)||l.length===0?[]:l.map(c=>{let[f,d,p,m,h,y,C,S,b,M,A]=c.split(",");return{time:f,open:u(d),close:u(p),high:u(m),low:u(h),changePercent:u(b),change:u(M),volume:u(y),amount:u(C),amplitude:u(S),turnoverRate:u(A)}})}}var Dt=null;function T(t){if(t==null)return null;let e=String(t);return u(e)}async function rt(t,e){if(e.startsWith("BK"))return e;if(!Dt){let s=await Qt(t);Dt=new Map(s.map(n=>[n.name,n.code]))}let r=Dt.get(e);if(!r)throw new Error(`\u672A\u627E\u5230\u6982\u5FF5\u677F\u5757: ${e}`);return r}async function Re(t,e,r,s,n=100,o){let i=[],a=1,l=0;do{let c=new URLSearchParams({...r,pn:String(a),pz:String(n),fields:s}),f=`${e}?${c.toString()}`,p=(await t.get(f,{responseType:"json"}))?.data;if(!p||!Array.isArray(p.diff))break;a===1&&(l=p.total??0);let m=p.diff.map((h,y)=>o(h,i.length+y+1));i.push(...m),a++}while(i.length<l);return i}async function Qt(t){let s=await Re(t,_t,{po:"1",np:"1",ut:"bd1d9ddb04089700cf9c27f6f7426281",fltt:"2",invt:"2",fid:"f12",fs:"m:90 t:3 f:!50"},"f2,f3,f4,f8,f12,f14,f15,f16,f17,f18,f20,f21,f24,f25,f22,f33,f11,f62,f128,f124,f107,f104,f105,f136",100,(n,o)=>({rank:o,name:String(n.f14??""),code:String(n.f12??""),price:T(n.f2),change:T(n.f4),changePercent:T(n.f3),totalMarketCap:T(n.f20),turnoverRate:T(n.f8),riseCount:T(n.f104),fallCount:T(n.f105),leadingStock:n.f128?String(n.f128):null,leadingStockChangePercent:T(n.f136)}));return s.sort((n,o)=>(o.changePercent??0)-(n.changePercent??0)),s.forEach((n,o)=>{n.rank=o+1}),s}async function Se(t,e){let r=await rt(t,e),s=new URLSearchParams({fields:"f43,f44,f45,f46,f47,f48,f170,f171,f168,f169",mpi:"1000",invt:"2",fltt:"1",secid:`90.${r}`}),n=`${Lt}?${s.toString()}`,i=(await t.get(n,{responseType:"json"}))?.data;return i?[{key:"f43",name:"\u6700\u65B0",divide:!0},{key:"f44",name:"\u6700\u9AD8",divide:!0},{key:"f45",name:"\u6700\u4F4E",divide:!0},{key:"f46",name:"\u5F00\u76D8",divide:!0},{key:"f47",name:"\u6210\u4EA4\u91CF",divide:!1},{key:"f48",name:"\u6210\u4EA4\u989D",divide:!1},{key:"f170",name:"\u6DA8\u8DCC\u5E45",divide:!0},{key:"f171",name:"\u632F\u5E45",divide:!0},{key:"f168",name:"\u6362\u624B\u7387",divide:!0},{key:"f169",name:"\u6DA8\u8DCC\u989D",divide:!0}].map(({key:l,name:c,divide:f})=>{let d=i[l],p=null;return typeof d=="number"&&!isNaN(d)&&(p=f?d/100:d),{item:c,value:p}}):[]}async function be(t,e){let s={po:"1",np:"1",ut:"bd1d9ddb04089700cf9c27f6f7426281",fltt:"2",invt:"2",fid:"f12",fs:`b:${await rt(t,e)} f:!50`};return Re(t,kt,s,"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152,f45",100,(o,i)=>({rank:i,code:String(o.f12??""),name:String(o.f14??""),price:T(o.f2),changePercent:T(o.f3),change:T(o.f4),volume:T(o.f5),amount:T(o.f6),amplitude:T(o.f7),high:T(o.f15),low:T(o.f16),open:T(o.f17),prevClose:T(o.f18),turnoverRate:T(o.f8),pe:T(o.f9),pb:T(o.f23)}))}async function we(t,e,r={}){let{period:s="daily",adjust:n="",startDate:o="19700101",endDate:i="20500101"}=r;U(s),I(n);let a=await rt(t,e),l={daily:"101",weekly:"102",monthly:"103"},c={"":"0",qfq:"1",hfq:"2"},f=new URLSearchParams({secid:`90.${a}`,fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",klt:l[s],fqt:c[n],beg:o,end:i,smplmt:"10000",lmt:"1000000"}),d=`${Z}?${f.toString()}`,m=(await t.get(d,{responseType:"json"}))?.data?.klines;return!Array.isArray(m)||m.length===0?[]:m.map(h=>{let[y,C,S,b,M,A,_,L,k,x,O]=h.split(",");return{date:y,open:u(C),close:u(S),high:u(b),low:u(M),changePercent:u(k),change:u(x),volume:u(A),amount:u(_),amplitude:u(L),turnoverRate:u(O)}})}async function Te(t,e,r={}){let{period:s="5"}=r;q(s);let n=await rt(t,e);if(s==="1"){let o=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13",fields2:"f51,f52,f53,f54,f55,f56,f57,f58",iscr:"0",ndays:"1",secid:`90.${n}`}),i=`${It}?${o.toString()}`,l=(await t.get(i,{responseType:"json"}))?.data?.trends;return!Array.isArray(l)||l.length===0?[]:l.map(c=>{let[f,d,p,m,h,y,C,S]=c.split(",");return{time:f,open:u(d),close:u(p),high:u(m),low:u(h),volume:u(y),amount:u(C),price:u(S)}})}else{let o=new URLSearchParams({secid:`90.${n}`,fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",klt:s,fqt:"1",beg:"0",end:"20500101",smplmt:"10000",lmt:"1000000"}),i=`${Z}?${o.toString()}`,l=(await t.get(i,{responseType:"json"}))?.data?.klines;return!Array.isArray(l)||l.length===0?[]:l.map(c=>{let[f,d,p,m,h,y,C,S,b,M,A]=c.split(",");return{time:f,open:u(d),close:u(p),high:u(m),low:u(h),changePercent:u(b),change:u(M),volume:u(y),amount:u(C),amplitude:u(S),turnoverRate:u(A)}})}}function W(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function j(t,e){let r=[];for(let s=0;s<t.length;s++){if(s<e-1){r.push(null);continue}let n=0,o=0;for(let i=s-e+1;i<=s;i++)t[i]!==null&&(n+=t[i],o++);r.push(o===e?W(n/e):null)}return r}function v(t,e){let r=[],s=2/(e+1),n=null,o=!1;for(let i=0;i<t.length;i++){if(i<e-1){r.push(null);continue}if(!o){let l=0,c=0;for(let f=i-e+1;f<=i;f++)t[f]!==null&&(l+=t[f],c++);c===e&&(n=l/e,o=!0),r.push(n!==null?W(n):null);continue}let a=t[i];a===null?r.push(n!==null?W(n):null):(n=s*a+(1-s)*n,r.push(W(n)))}return r}function $t(t,e){let r=[],s=Array.from({length:e},(o,i)=>i+1),n=s.reduce((o,i)=>o+i,0);for(let o=0;o<t.length;o++){if(o<e-1){r.push(null);continue}let i=0,a=!0;for(let l=0;l<e;l++){let c=t[o-e+1+l];if(c===null){a=!1;break}i+=c*s[l]}r.push(a?W(i/n):null)}return r}function ot(t,e={}){let{periods:r=[5,10,20,30,60,120,250],type:s="sma"}=e,n=s==="ema"?v:s==="wma"?$t:j,o={};for(let i of r)o[`ma${i}`]=n(t,i);return t.map((i,a)=>{let l={};for(let c of r)l[`ma${c}`]=o[`ma${c}`][a];return l})}function Me(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function st(t,e={}){let{short:r=12,long:s=26,signal:n=9}=e,o=v(t,r),i=v(t,s),a=t.map((c,f)=>o[f]===null||i[f]===null?null:o[f]-i[f]),l=v(a,n);return t.map((c,f)=>({dif:a[f]!==null?Me(a[f]):null,dea:l[f],macd:a[f]!==null&&l[f]!==null?Me((a[f]-l[f])*2):null}))}function Ft(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function Ue(t,e,r){let s=[];for(let n=0;n<t.length;n++){if(n<e-1||r[n]===null){s.push(null);continue}let o=0,i=0;for(let a=n-e+1;a<=n;a++)t[a]!==null&&r[n]!==null&&(o+=Math.pow(t[a]-r[n],2),i++);s.push(i===e?Math.sqrt(o/e):null)}return s}function it(t,e={}){let{period:r=20,stdDev:s=2}=e,n=j(t,r),o=Ue(t,r,n);return t.map((i,a)=>{if(n[a]===null||o[a]===null)return{mid:null,upper:null,lower:null,bandwidth:null};let l=n[a]+s*o[a],c=n[a]-s*o[a],f=n[a]!==0?Ft((l-c)/n[a]*100):null;return{mid:n[a],upper:Ft(l),lower:Ft(c),bandwidth:f}})}function Wt(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function at(t,e={}){let{period:r=9,kPeriod:s=3,dPeriod:n=3}=e,o=[],i=50,a=50;for(let l=0;l<t.length;l++){if(l<r-1){o.push({k:null,d:null,j:null});continue}let c=-1/0,f=1/0,d=!0;for(let y=l-r+1;y<=l;y++){if(t[y].high===null||t[y].low===null){d=!1;break}c=Math.max(c,t[y].high),f=Math.min(f,t[y].low)}let p=t[l].close;if(!d||p===null||c===f){o.push({k:null,d:null,j:null});continue}let m=(p-f)/(c-f)*100;i=(s-1)/s*i+1/s*m,a=(n-1)/n*a+1/n*i;let h=3*i-2*a;o.push({k:Wt(i),d:Wt(a),j:Wt(h)})}return o}function Ee(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function lt(t,e={}){let{periods:r=[6,12,24]}=e,s=[null];for(let o=1;o<t.length;o++)t[o]===null||t[o-1]===null?s.push(null):s.push(t[o]-t[o-1]);let n={};for(let o of r){let i=[],a=0,l=0;for(let c=0;c<t.length;c++){if(c<o){i.push(null),s[c]!==null&&(s[c]>0?a+=s[c]:l+=Math.abs(s[c]));continue}if(c===o)a=a/o,l=l/o;else{let f=s[c]??0,d=f>0?f:0,p=f<0?Math.abs(f):0;a=(a*(o-1)+d)/o,l=(l*(o-1)+p)/o}if(l===0)i.push(100);else if(a===0)i.push(0);else{let f=a/l;i.push(Ee(100-100/(1+f)))}}n[`rsi${o}`]=i}return t.map((o,i)=>{let a={};for(let l of r)a[`rsi${l}`]=n[`rsi${l}`][i];return a})}function Be(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function ut(t,e={}){let{periods:r=[6,10]}=e,s={};for(let n of r){let o=[];for(let i=0;i<t.length;i++){if(i<n-1){o.push(null);continue}let a=-1/0,l=1/0,c=!0;for(let p=i-n+1;p<=i;p++){if(t[p].high===null||t[p].low===null){c=!1;break}a=Math.max(a,t[p].high),l=Math.min(l,t[p].low)}let f=t[i].close;if(!c||f===null||a===l){o.push(null);continue}let d=(a-f)/(a-l)*100;o.push(Be(d))}s[`wr${n}`]=o}return t.map((n,o)=>{let i={};for(let a of r)i[`wr${a}`]=s[`wr${a}`][o];return i})}function qe(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function ct(t,e={}){let{periods:r=[6,12,24]}=e,s={};for(let n of r){let o=j(t,n),i=[];for(let a=0;a<t.length;a++)if(t[a]===null||o[a]===null||o[a]===0)i.push(null);else{let l=(t[a]-o[a])/o[a]*100;i.push(qe(l))}s[`bias${n}`]=i}return t.map((n,o)=>{let i={};for(let a of r)i[`bias${a}`]=s[`bias${a}`][o];return i})}function je(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function ft(t,e={}){let{period:r=14}=e,s=[],n=t.map(o=>o.high===null||o.low===null||o.close===null?null:(o.high+o.low+o.close)/3);for(let o=0;o<t.length;o++){if(o<r-1){s.push({cci:null});continue}let i=0,a=0;for(let d=o-r+1;d<=o;d++)n[d]!==null&&(i+=n[d],a++);if(a!==r||n[o]===null){s.push({cci:null});continue}let l=i/r,c=0;for(let d=o-r+1;d<=o;d++)c+=Math.abs(n[d]-l);let f=c/r;if(f===0)s.push({cci:0});else{let d=(n[o]-l)/(.015*f);s.push({cci:je(d)})}}return s}function zt(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function pt(t,e={}){let{period:r=14}=e,s=[],n=[];for(let i=0;i<t.length;i++){let{high:a,low:l,close:c}=t[i];if(a===null||l===null||c===null){n.push(null);continue}if(i===0)n.push(a-l);else{let f=t[i-1].close;if(f===null)n.push(a-l);else{let d=a-l,p=Math.abs(a-f),m=Math.abs(l-f);n.push(Math.max(d,p,m))}}}let o=null;for(let i=0;i<t.length;i++){if(i<r-1){s.push({tr:n[i]!==null?zt(n[i]):null,atr:null});continue}if(i===r-1){let a=0,l=0;for(let c=0;c<r;c++)n[c]!==null&&(a+=n[c],l++);l===r&&(o=a/r)}else o!==null&&n[i]!==null&&(o=(o*(r-1)+n[i])/r);s.push({tr:n[i]!==null?zt(n[i]):null,atr:o!==null?zt(o):null})}return s}function dt(t,e={}){if(t.length===0)return[];let r=t.map(m=>m.close),s=t.map(m=>({open:m.open,high:m.high,low:m.low,close:m.close,volume:m.volume})),n=e.ma?ot(r,typeof e.ma=="object"?e.ma:{}):null,o=e.macd?st(r,typeof e.macd=="object"?e.macd:{}):null,i=e.boll?it(r,typeof e.boll=="object"?e.boll:{}):null,a=e.kdj?at(s,typeof e.kdj=="object"?e.kdj:{}):null,l=e.rsi?lt(r,typeof e.rsi=="object"?e.rsi:{}):null,c=e.wr?ut(s,typeof e.wr=="object"?e.wr:{}):null,f=e.bias?ct(r,typeof e.bias=="object"?e.bias:{}):null,d=e.cci?ft(s,typeof e.cci=="object"?e.cci:{}):null,p=e.atr?pt(s,typeof e.atr=="object"?e.atr:{}):null;return t.map((m,h)=>({...m,...n&&{ma:n[h]},...o&&{macd:o[h]},...i&&{boll:i[h]},...a&&{kdj:a[h]},...l&&{rsi:l[h]},...c&&{wr:c[h]},...f&&{bias:f[h]},...d&&{cci:d[h]},...p&&{atr:p[h]}}))}var mt=class{constructor(e={}){this.client=new F(e)}getFullQuotes(e){return K.getFullQuotes(this.client,e)}getSimpleQuotes(e){return K.getSimpleQuotes(this.client,e)}getHKQuotes(e){return K.getHKQuotes(this.client,e)}getUSQuotes(e){return K.getUSQuotes(this.client,e)}getFundQuotes(e){return K.getFundQuotes(this.client,e)}getFundFlow(e){return K.getFundFlow(this.client,e)}getPanelLargeOrder(e){return K.getPanelLargeOrder(this.client,e)}getTodayTimeline(e){return K.getTodayTimeline(this.client,e)}getIndustryList(){return P.getIndustryList(this.client)}getIndustrySpot(e){return P.getIndustrySpot(this.client,e)}getIndustryConstituents(e){return P.getIndustryConstituents(this.client,e)}getIndustryKline(e,r){return P.getIndustryKline(this.client,e,r)}getIndustryMinuteKline(e,r){return P.getIndustryMinuteKline(this.client,e,r)}getConceptList(){return P.getConceptList(this.client)}getConceptSpot(e){return P.getConceptSpot(this.client,e)}getConceptConstituents(e){return P.getConceptConstituents(this.client,e)}getConceptKline(e,r){return P.getConceptKline(this.client,e,r)}getConceptMinuteKline(e,r){return P.getConceptMinuteKline(this.client,e,r)}getHistoryKline(e,r){return P.getHistoryKline(this.client,e,r)}getMinuteKline(e,r){return P.getMinuteKline(this.client,e,r)}getHKHistoryKline(e,r){return P.getHKHistoryKline(this.client,e,r)}getUSHistoryKline(e,r){return P.getUSHistoryKline(this.client,e,r)}search(e){return K.search(this.client,e)}getAShareCodeList(e=!0){return K.getAShareCodeList(this.client,e)}getUSCodeList(e=!0){return K.getUSCodeList(this.client,e)}getHKCodeList(){return K.getHKCodeList(this.client)}async getAllAShareQuotes(e={}){let r=await this.getAShareCodeList();return this.getAllQuotesByCodes(r,e)}async getAllHKShareQuotes(e={}){let r=await this.getHKCodeList();return K.getAllHKQuotesByCodes(this.client,r,e)}async getAllUSShareQuotes(e={}){let r=await this.getUSCodeList(!1);return K.getAllUSQuotesByCodes(this.client,r,e)}getAllQuotesByCodes(e,r={}){return K.getAllQuotesByCodes(this.client,e,r)}async batchRaw(e){return this.client.getTencentQuote(e)}getTradingCalendar(){return K.getTradingCalendar(this.client)}detectMarket(e){return/^\d{3}\.[A-Z]+$/i.test(e)?"US":/^\d{5}$/.test(e)?"HK":"A"}safeMax(e,r=0){return!e||e.length===0?r:Math.max(...e)}calcRequiredLookback(e){let r=0,s=!1;if(e.ma){let o=typeof e.ma=="object"?e.ma:{},i=o.periods??[5,10,20,30,60,120,250],a=o.type??"sma";r=Math.max(r,this.safeMax(i,20)),a==="ema"&&(s=!0)}if(e.macd){let o=typeof e.macd=="object"?e.macd:{},i=o.long??26,a=o.signal??9;r=Math.max(r,i*3+a),s=!0}if(e.boll){let o=typeof e.boll=="object"&&e.boll.period?e.boll.period:20;r=Math.max(r,o)}if(e.kdj){let o=typeof e.kdj=="object"&&e.kdj.period?e.kdj.period:9;r=Math.max(r,o)}if(e.rsi){let o=typeof e.rsi=="object"&&e.rsi.periods?e.rsi.periods:[6,12,24];r=Math.max(r,this.safeMax(o,14)+1)}if(e.wr){let o=typeof e.wr=="object"&&e.wr.periods?e.wr.periods:[6,10];r=Math.max(r,this.safeMax(o,10))}if(e.bias){let o=typeof e.bias=="object"&&e.bias.periods?e.bias.periods:[6,12,24];r=Math.max(r,this.safeMax(o,12))}if(e.cci){let o=typeof e.cci=="object"&&e.cci.period?e.cci.period:14;r=Math.max(r,o)}if(e.atr){let o=typeof e.atr=="object"&&e.atr.period?e.atr.period:14;r=Math.max(r,o)}return Math.ceil(r*(s?1.5:1.2))}calcActualStartDate(e,r,s=1.5){let n=Math.ceil(r*s),o=new Date(parseInt(e.slice(0,4)),parseInt(e.slice(4,6))-1,parseInt(e.slice(6,8)));o.setDate(o.getDate()-n);let i=o.getFullYear(),a=String(o.getMonth()+1).padStart(2,"0"),l=String(o.getDate()).padStart(2,"0");return`${i}${a}${l}`}dateToTimestamp(e){let r=e.includes("-")?e:`${e.slice(0,4)}-${e.slice(4,6)}-${e.slice(6,8)}`;return new Date(r).getTime()}async getKlineWithIndicators(e,r={}){let{startDate:s,endDate:n,indicators:o={}}=r,i=r.market??this.detectMarket(e),a=this.calcRequiredLookback(o),c={A:1.5,HK:1.46,US:1.45}[i],f=s?this.calcActualStartDate(s,a,c):void 0,d={period:r.period,adjust:r.adjust,startDate:f,endDate:r.endDate},p;switch(i){case"HK":p=await this.getHKHistoryKline(e,d);break;case"US":p=await this.getUSHistoryKline(e,d);break;default:p=await this.getHistoryKline(e,d)}if(s&&p.length<a)switch(i){case"HK":p=await this.getHKHistoryKline(e,{...d,startDate:void 0});break;case"US":p=await this.getUSHistoryKline(e,{...d,startDate:void 0});break;default:p=await this.getHistoryKline(e,{...d,startDate:void 0})}let m=dt(p,o);if(s){let h=this.dateToTimestamp(s),y=n?this.dateToTimestamp(n):1/0;return m.filter(C=>{let S=this.dateToTimestamp(C.date);return S>=h&&S<=y})}return m}},ve=mt;export{mt as StockSDK,dt as addIndicators,N as asyncPool,pt as calcATR,ct as calcBIAS,it as calcBOLL,ft as calcCCI,v as calcEMA,at as calcKDJ,ot as calcMA,st as calcMACD,lt as calcRSI,j as calcSMA,$t as calcWMA,ut as calcWR,H as chunkArray,z as decodeGBK,ve as default,V as parseResponse,g as safeNumber,R as safeNumberOrNull};
1
+ var Ee=Object.defineProperty;var Yt=(e,t)=>{for(var n in t)Ee(e,n,{get:t[n],enumerable:!0})};function W(e){return new TextDecoder("gbk").decode(e)}function z(e){let t=e.split(";").map(s=>s.trim()).filter(Boolean),n=[];for(let s of t){let r=s.indexOf("=");if(r<0)continue;let o=s.slice(0,r).trim();o.startsWith("v_")&&(o=o.slice(2));let i=s.slice(r+1).trim();i.startsWith('"')&&i.endsWith('"')&&(i=i.slice(1,-1));let a=i.split("~");n.push({key:o,fields:a})}return n}function d(e){if(!e||e==="")return 0;let t=parseFloat(e);return Number.isNaN(t)?0:t}function R(e){if(!e||e==="")return null;let t=parseFloat(e);return Number.isNaN(t)?null:t}function m(e){if(!e||e===""||e==="-")return null;let t=parseFloat(e);return Number.isNaN(t)?null:t}function h(e){return e==null?null:m(String(e))}var mt="https://qt.gtimg.cn",gt="https://web.ifzq.gtimg.cn/appstock/app/minute/query",ht="https://assets.linkdiary.cn/shares/zh_a_list.json",yt="https://assets.linkdiary.cn/shares/us_list.json",Ct="https://assets.linkdiary.cn/shares/hk_list.json",Xt="https://assets.linkdiary.cn/shares/trade-data-list.txt";var V="https://push2his.eastmoney.com/api/qt/stock/kline/get",Rt="https://push2his.eastmoney.com/api/qt/stock/trends2/get",bt="https://33.push2his.eastmoney.com/api/qt/stock/kline/get",St="https://63.push2his.eastmoney.com/api/qt/stock/kline/get",Tt="https://17.push2.eastmoney.com/api/qt/clist/get",wt="https://91.push2.eastmoney.com/api/qt/stock/get",Mt="https://29.push2.eastmoney.com/api/qt/clist/get",G="https://7.push2his.eastmoney.com/api/qt/stock/kline/get",Kt="https://push2his.eastmoney.com/api/qt/stock/trends2/get",At="https://79.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",J="https://91.push2his.eastmoney.com/api/qt/stock/kline/get",Et="https://push2his.eastmoney.com/api/qt/stock/trends2/get",xt=3e4,N=500,j=500,Q=7,Ot=3,Pt=1e3,It=3e4,kt=2,Ut=[408,429,500,502,503,504];var B=class extends Error{constructor(n,s){super(`HTTP error! status: ${n}`);this.status=n;this.statusText=s;this.name="HttpError"}},F=class{constructor(t={}){this.baseUrl=t.baseUrl??mt,this.timeout=t.timeout??xt,this.retryOptions=this.resolveRetryOptions(t.retry)}resolveRetryOptions(t){return{maxRetries:t?.maxRetries??Ot,baseDelay:t?.baseDelay??Pt,maxDelay:t?.maxDelay??It,backoffMultiplier:t?.backoffMultiplier??kt,retryableStatusCodes:t?.retryableStatusCodes??Ut,retryOnNetworkError:t?.retryOnNetworkError??!0,retryOnTimeout:t?.retryOnTimeout??!0,onRetry:t?.onRetry}}getTimeout(){return this.timeout}calculateDelay(t){return Math.min(this.retryOptions.baseDelay*Math.pow(this.retryOptions.backoffMultiplier,t),this.retryOptions.maxDelay)+Math.random()*100}sleep(t){return new Promise(n=>setTimeout(n,t))}shouldRetry(t,n){return n>=this.retryOptions.maxRetries?!1:t instanceof DOMException&&t.name==="AbortError"?this.retryOptions.retryOnTimeout:t instanceof TypeError?this.retryOptions.retryOnNetworkError:t instanceof B?this.retryOptions.retryableStatusCodes.includes(t.status):!1}async executeWithRetry(t,n=0){try{return await t()}catch(s){if(this.shouldRetry(s,n)){let r=this.calculateDelay(n);return this.retryOptions.onRetry&&s instanceof Error&&this.retryOptions.onRetry(n+1,s,r),await this.sleep(r),this.executeWithRetry(t,n+1)}throw s}}async get(t,n={}){return this.executeWithRetry(async()=>{let s=new AbortController,r=setTimeout(()=>s.abort(),this.timeout);try{let o=await fetch(t,{signal:s.signal});if(!o.ok)throw new B(o.status,o.statusText);switch(n.responseType){case"json":return await o.json();case"arraybuffer":return await o.arrayBuffer();default:return await o.text()}}finally{clearTimeout(r)}})}async getTencentQuote(t){let n=`${this.baseUrl}/?q=${encodeURIComponent(t)}`,s=await this.get(n,{responseType:"arraybuffer"}),r=W(s);return z(r)}};var xe=new Set(["daily","weekly","monthly"]),Oe=new Set(["1","5","15","30","60"]),Pe=new Set(["","qfq","hfq"]);function x(e,t){if(!Number.isFinite(e)||!Number.isInteger(e)||e<=0)throw new RangeError(`${t} must be a positive integer`)}function A(e){if(!xe.has(e))throw new RangeError("period must be one of: daily, weekly, monthly")}function I(e){if(!Oe.has(e))throw new RangeError("period must be one of: 1, 5, 15, 30, 60")}function M(e){if(!Pe.has(e))throw new RangeError("adjust must be one of: '', 'qfq', 'hfq'")}function D(e,t){x(t,"chunkSize");let n=[];for(let s=0;s<e.length;s+=t)n.push(e.slice(s,s+t));return n}async function H(e,t){x(t,"concurrency");let n=[],s=[];for(let r of e){let o=Promise.resolve().then(()=>r()).then(i=>{n.push(i)});if(s.push(o),s.length>=t){await Promise.race(s);for(let i=s.length-1;i>=0;i--)await Promise.race([s[i].then(()=>"fulfilled"),Promise.resolve("pending")])==="fulfilled"&&s.splice(i,1)}}return await Promise.all(s),n}function Y(e){return e.startsWith("sh")?"1":e.startsWith("sz")||e.startsWith("bj")?"0":e.startsWith("6")?"1":"0"}function _(e){return{daily:"101",weekly:"102",monthly:"103"}[e]}function K(e){return{"":"0",qfq:"1",hfq:"2"}[e]}var b={};Yt(b,{getAShareCodeList:()=>oe,getAllHKQuotesByCodes:()=>le,getAllQuotesByCodes:()=>ae,getAllUSQuotesByCodes:()=>ue,getFullQuotes:()=>X,getFundFlow:()=>te,getFundQuotes:()=>ne,getHKCodeList:()=>ie,getHKQuotes:()=>Z,getPanelLargeOrder:()=>ee,getSimpleQuotes:()=>Zt,getTodayTimeline:()=>re,getTradingCalendar:()=>ce,getUSCodeList:()=>se,getUSQuotes:()=>tt,parseFullQuote:()=>Bt,parseFundFlow:()=>Ht,parseFundQuote:()=>jt,parseHKQuote:()=>qt,parsePanelLargeOrder:()=>vt,parseSimpleQuote:()=>Dt,parseUSQuote:()=>Nt,search:()=>pe});function Bt(e){let t=[];for(let s=0;s<5;s++)t.push({price:d(e[9+s*2]),volume:d(e[10+s*2])});let n=[];for(let s=0;s<5;s++)n.push({price:d(e[19+s*2]),volume:d(e[20+s*2])});return{marketId:e[0]??"",name:e[1]??"",code:e[2]??"",price:d(e[3]),prevClose:d(e[4]),open:d(e[5]),volume:d(e[6]),outerVolume:d(e[7]),innerVolume:d(e[8]),bid:t,ask:n,time:e[30]??"",change:d(e[31]),changePercent:d(e[32]),high:d(e[33]),low:d(e[34]),volume2:d(e[36]),amount:d(e[37]),turnoverRate:R(e[38]),pe:R(e[39]),amplitude:R(e[43]),circulatingMarketCap:R(e[44]),totalMarketCap:R(e[45]),pb:R(e[46]),limitUp:R(e[47]),limitDown:R(e[48]),volumeRatio:R(e[49]),avgPrice:R(e[51]),peStatic:R(e[52]),peDynamic:R(e[53]),high52w:R(e[67]),low52w:R(e[68]),circulatingShares:R(e[72]),totalShares:R(e[73]),raw:e}}function Dt(e){return{marketId:e[0]??"",name:e[1]??"",code:e[2]??"",price:d(e[3]),change:d(e[4]),changePercent:d(e[5]),volume:d(e[6]),amount:d(e[7]),marketCap:R(e[9]),marketType:e[10]??"",raw:e}}function Ht(e){return{code:e[0]??"",mainInflow:d(e[1]),mainOutflow:d(e[2]),mainNet:d(e[3]),mainNetRatio:d(e[4]),retailInflow:d(e[5]),retailOutflow:d(e[6]),retailNet:d(e[7]),retailNetRatio:d(e[8]),totalFlow:d(e[9]),name:e[12]??"",date:e[13]??"",raw:e}}function vt(e){return{buyLargeRatio:d(e[0]),buySmallRatio:d(e[1]),sellLargeRatio:d(e[2]),sellSmallRatio:d(e[3]),raw:e}}function qt(e){return{marketId:e[0]??"",name:e[1]??"",code:e[2]??"",price:d(e[3]),prevClose:d(e[4]),open:d(e[5]),volume:d(e[6]),time:e[30]??"",change:d(e[31]),changePercent:d(e[32]),high:d(e[33]),low:d(e[34]),amount:d(e[37]),lotSize:R(e[40]),circulatingMarketCap:R(e[44]),totalMarketCap:R(e[45]),currency:e[e.length-3]??"",raw:e}}function Nt(e){return{marketId:e[0]??"",name:e[1]??"",code:e[2]??"",price:d(e[3]),prevClose:d(e[4]),open:d(e[5]),volume:d(e[6]),time:e[30]??"",change:d(e[31]),changePercent:d(e[32]),high:d(e[33]),low:d(e[34]),amount:d(e[37]),turnoverRate:R(e[38]),pe:R(e[39]),amplitude:R(e[43]),totalMarketCap:R(e[45]),pb:R(e[47]),high52w:R(e[48]),low52w:R(e[49]),raw:e}}function jt(e){return{code:e[0]??"",name:e[1]??"",nav:d(e[5]),accNav:d(e[6]),change:d(e[7]),navDate:e[8]??"",raw:e}}async function X(e,t){return!t||t.length===0?[]:(await e.getTencentQuote(t.join(","))).filter(s=>s.fields&&s.fields.length>0&&s.fields[0]!=="").map(s=>Bt(s.fields))}async function Zt(e,t){if(!t||t.length===0)return[];let n=t.map(r=>`s_${r}`);return(await e.getTencentQuote(n.join(","))).filter(r=>r.fields&&r.fields.length>0&&r.fields[0]!=="").map(r=>Dt(r.fields))}async function te(e,t){if(!t||t.length===0)return[];let n=t.map(r=>`ff_${r}`);return(await e.getTencentQuote(n.join(","))).filter(r=>r.fields&&r.fields.length>0&&r.fields[0]!=="").map(r=>Ht(r.fields))}async function ee(e,t){if(!t||t.length===0)return[];let n=t.map(r=>`s_pk${r}`);return(await e.getTencentQuote(n.join(","))).filter(r=>r.fields&&r.fields.length>0&&r.fields[0]!=="").map(r=>vt(r.fields))}async function Z(e,t){if(!t||t.length===0)return[];let n=t.map(r=>`hk${r}`);return(await e.getTencentQuote(n.join(","))).filter(r=>r.fields&&r.fields.length>0&&r.fields[0]!=="").map(r=>qt(r.fields))}async function tt(e,t){if(!t||t.length===0)return[];let n=t.map(r=>`us${r}`);return(await e.getTencentQuote(n.join(","))).filter(r=>r.fields&&r.fields.length>0&&r.fields[0]!=="").map(r=>Nt(r.fields))}async function ne(e,t){if(!t||t.length===0)return[];let n=t.map(r=>`jj${r}`);return(await e.getTencentQuote(n.join(","))).filter(r=>r.fields&&r.fields.length>0&&r.fields[0]!=="").map(r=>jt(r.fields))}async function re(e,t){let n=e.getTimeout(),s=new AbortController,r=setTimeout(()=>s.abort(),n);try{let o=await fetch(`${gt}?code=${t}`,{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?.[t];if(!a)return{code:t,date:"",data:[]};let l=a.data?.data||[],u=a.data?.date||"",c=!1;if(l.length>0){let p=l[0].split(" "),g=parseFloat(p[1])||0,y=parseInt(p[2],10)||0,C=parseFloat(p[3])||0;y>0&&g>0&&C/y>g*50&&(c=!0)}let f=l.map(p=>{let g=p.split(" "),y=g[0],C=`${y.slice(0,2)}:${y.slice(2,4)}`,T=parseInt(g[2],10)||0,w=parseFloat(g[3])||0,O=c?T*100:T,P=O>0?w/O:0;return{time:C,price:parseFloat(g[1])||0,volume:O,amount:w,avgPrice:Math.round(P*100)/100}});return{code:t,date:u,data:f}}finally{clearTimeout(r)}}async function oe(e,t=!0){let n=e.getTimeout(),s=new AbortController,r=setTimeout(()=>s.abort(),n);try{let o=await fetch(ht,{signal:s.signal});if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);let a=(await o.json()).list||[];return t?a:a.map(l=>l.replace(/^(sh|sz|bj)/,""))}finally{clearTimeout(r)}}async function se(e,t=!0){let n=e.getTimeout(),s=new AbortController,r=setTimeout(()=>s.abort(),n);try{let o=await fetch(yt,{signal:s.signal});if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);let a=(await o.json()).list||[];return t?a:a.map(l=>l.replace(/^\d{3}\./,""))}finally{clearTimeout(r)}}async function ie(e){let t=e.getTimeout(),n=new AbortController,s=setTimeout(()=>n.abort(),t);try{let r=await fetch(Ct,{signal:n.signal});if(!r.ok)throw new Error(`HTTP error! status: ${r.status}`);return(await r.json()).list||[]}finally{clearTimeout(s)}}async function ae(e,t,n={}){let{batchSize:s=N,concurrency:r=Q,onProgress:o}=n;x(s,"batchSize"),x(r,"concurrency");let i=Math.min(s,j),a=D(t,i),l=a.length,u=0,c=a.map(p=>async()=>{let g=await X(e,p);return u++,o&&o(u,l),g});return(await H(c,r)).flat()}async function le(e,t,n={}){let{batchSize:s=N,concurrency:r=Q,onProgress:o}=n;x(s,"batchSize"),x(r,"concurrency");let i=Math.min(s,j),a=D(t,i),l=a.length,u=0,c=a.map(p=>async()=>{let g=await Z(e,p);return u++,o&&o(u,l),g});return(await H(c,r)).flat()}async function ue(e,t,n={}){let{batchSize:s=N,concurrency:r=Q,onProgress:o}=n;x(s,"batchSize"),x(r,"concurrency");let i=Math.min(s,j),a=D(t,i),l=a.length,u=0,c=a.map(p=>async()=>{let g=await tt(e,p);return u++,o&&o(u,l),g});return(await H(c,r)).flat()}async function ce(e){let t=await e.get(Xt);return!t||t.trim()===""?[]:t.trim().split(",").map(n=>n.trim()).filter(n=>n.length>0)}var fe="https://smartbox.gtimg.cn/s3/";function Ie(e){return e.replace(/\\u([0-9a-fA-F]{4})/g,(t,n)=>String.fromCharCode(parseInt(n,16)))}function ke(e){return!e||e==="N"?[]:e.split("^").filter(Boolean).map(n=>{let s=n.split("~"),r=s[0]||"",o=s[1]||"",i=Ie(s[2]||""),a=s[4]||"";return{code:r+o,name:i,market:r,type:a}})}function Ue(e){return new Promise((t,n)=>{let s=`${fe}?v=2&t=all&q=${encodeURIComponent(e)}`;window.v_hint="";let r=document.createElement("script");r.src=s,r.charset="utf-8",r.onload=()=>{let o=window.v_hint||"";document.body.removeChild(r),t(o)},r.onerror=()=>{document.body.removeChild(r),n(new Error("Network error calling Smartbox"))},document.body.appendChild(r)})}async function Be(e,t){let n=`${fe}?v=2&t=all&q=${encodeURIComponent(t)}`,r=(await e.get(n)).match(/v_hint="([^"]*)"/);return r?r[1]:""}function De(){return typeof window<"u"&&typeof document<"u"}async function pe(e,t){if(!t||!t.trim())return[];let n;return De()?n=await Ue(t):n=await Be(e,t),ke(n)}var S={};Yt(S,{getConceptConstituents:()=>Te,getConceptKline:()=>we,getConceptList:()=>Wt,getConceptMinuteKline:()=>Me,getConceptSpot:()=>Se,getHKHistoryKline:()=>ge,getHistoryKline:()=>de,getIndustryConstituents:()=>Ce,getIndustryKline:()=>Re,getIndustryList:()=>Ft,getIndustryMinuteKline:()=>be,getIndustrySpot:()=>ye,getMinuteKline:()=>me,getUSHistoryKline:()=>he});async function v(e,t,n,s,r=100,o){let i=[],a=1,l=0;do{let u=new URLSearchParams({...n,pn:String(a),pz:String(r),fields:s}),c=`${t}?${u.toString()}`,p=(await e.get(c,{responseType:"json"}))?.data;if(!p||!Array.isArray(p.diff))break;a===1&&(l=p.total??0);let g=p.diff.map((y,C)=>o(y,i.length+C+1));i.push(...g),a++}while(i.length<l);return i}function L(e){let[t,n,s,r,o,i,a,l,u,c,f]=e.split(",");return{date:t,open:m(n),close:m(s),high:m(r),low:m(o),volume:m(i),amount:m(a),amplitude:m(l),changePercent:m(u),change:m(c),turnoverRate:m(f)}}async function E(e,t,n){let s=`${t}?${n.toString()}`,r=await e.get(s,{responseType:"json"});return{klines:r?.data?.klines||[],name:r?.data?.name,code:r?.data?.code}}async function de(e,t,n={}){let{period:s="daily",adjust:r="hfq",startDate:o="19700101",endDate:i="20500101"}=n;A(s),M(r);let a=t.replace(/^(sh|sz|bj)/,""),l=`${Y(t)}.${a}`,u=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f116",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:_(s),fqt:K(r),secid:l,beg:o,end:i}),c=V,{klines:f}=await E(e,c,u);return f.length===0?[]:f.map(p=>({...L(p),code:a}))}async function me(e,t,n={}){let{period:s="1",adjust:r="hfq",startDate:o="1979-09-01 09:32:00",endDate:i="2222-01-01 09:32:00"}=n;I(s),M(r);let a=t.replace(/^(sh|sz|bj)/,""),l=`${Y(t)}.${a}`;if(s==="1"){let u=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13",fields2:"f51,f52,f53,f54,f55,f56,f57,f58",ut:"7eea3edcaed734bea9cbfc24409ed989",ndays:"5",iscr:"0",secid:l}),c=`${Rt}?${u.toString()}`,p=(await e.get(c,{responseType:"json"}))?.data?.trends;if(!Array.isArray(p)||p.length===0)return[];let g=o.replace("T"," ").slice(0,16),y=i.replace("T"," ").slice(0,16);return p.map(C=>{let[T,w,O,P,q,Ae,_e,Le]=C.split(",");return{time:T,open:m(w),close:m(O),high:m(P),low:m(q),volume:m(Ae),amount:m(_e),avgPrice:m(Le)}}).filter(C=>C.time>=g&&C.time<=y)}else{let u=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:s,fqt:K(r||""),secid:l,beg:"0",end:"20500000"}),c=V,{klines:f}=await E(e,c,u);if(f.length===0)return[];let p=o.replace("T"," ").slice(0,16),g=i.replace("T"," ").slice(0,16);return f.map(y=>{let C=L(y);return{...C,time:C.date}}).filter(y=>y.time>=p&&y.time<=g)}}async function ge(e,t,n={}){let{period:s="daily",adjust:r="hfq",startDate:o="19700101",endDate:i="20500101"}=n;A(s),M(r);let a=t.replace(/^hk/i,"").padStart(5,"0"),l=`116.${a}`,u=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:_(s),fqt:K(r),secid:l,beg:o,end:i,lmt:"1000000"}),c=bt,{klines:f,name:p}=await E(e,c,u);return f.length===0?[]:f.map(g=>({...L(g),code:a,name:p||""}))}async function he(e,t,n={}){let{period:s="daily",adjust:r="hfq",startDate:o="19700101",endDate:i="20500101"}=n;A(s),M(r);let a=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:_(s),fqt:K(r),secid:t,beg:o,end:i,lmt:"1000000"}),l=St,{klines:u,name:c,code:f}=await E(e,l,a),p=f||t.split(".")[1]||t,g=c||"";return u.length===0?[]:u.map(y=>({...L(y),code:p,name:g}))}var Qt=null;async function et(e,t){if(t.startsWith("BK"))return t;if(!Qt){let s=await Ft(e);Qt=new Map(s.map(r=>[r.name,r.code]))}let n=Qt.get(t);if(!n)throw new Error(`\u672A\u627E\u5230\u884C\u4E1A\u677F\u5757: ${t}`);return n}async function Ft(e){let s=await v(e,Tt,{po:"1",np:"1",ut:"bd1d9ddb04089700cf9c27f6f7426281",fltt:"2",invt:"2",fid:"f3",fs:"m:90 t:2 f:!50"},"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f26,f22,f33,f11,f62,f128,f136,f115,f152,f124,f107,f104,f105,f140,f141,f207,f208,f209,f222",100,(r,o)=>({rank:o,name:String(r.f14??""),code:String(r.f12??""),price:h(r.f2),change:h(r.f4),changePercent:h(r.f3),totalMarketCap:h(r.f20),turnoverRate:h(r.f8),riseCount:h(r.f104),fallCount:h(r.f105),leadingStock:r.f128?String(r.f128):null,leadingStockChangePercent:h(r.f136)}));return s.sort((r,o)=>(o.changePercent??0)-(r.changePercent??0)),s.forEach((r,o)=>{r.rank=o+1}),s}async function ye(e,t){let n=await et(e,t),s=new URLSearchParams({fields:"f43,f44,f45,f46,f47,f48,f170,f171,f168,f169",mpi:"1000",invt:"2",fltt:"1",secid:`90.${n}`}),r=`${wt}?${s.toString()}`,i=(await e.get(r,{responseType:"json"}))?.data;return i?[{key:"f43",name:"\u6700\u65B0",divide:!0},{key:"f44",name:"\u6700\u9AD8",divide:!0},{key:"f45",name:"\u6700\u4F4E",divide:!0},{key:"f46",name:"\u5F00\u76D8",divide:!0},{key:"f47",name:"\u6210\u4EA4\u91CF",divide:!1},{key:"f48",name:"\u6210\u4EA4\u989D",divide:!1},{key:"f170",name:"\u6DA8\u8DCC\u5E45",divide:!0},{key:"f171",name:"\u632F\u5E45",divide:!0},{key:"f168",name:"\u6362\u624B\u7387",divide:!0},{key:"f169",name:"\u6DA8\u8DCC\u989D",divide:!0}].map(({key:l,name:u,divide:c})=>{let f=i[l],p=null;return typeof f=="number"&&!isNaN(f)&&(p=c?f/100:f),{item:u,value:p}}):[]}async function Ce(e,t){let s={po:"1",np:"1",ut:"bd1d9ddb04089700cf9c27f6f7426281",fltt:"2",invt:"2",fid:"f3",fs:`b:${await et(e,t)} f:!50`};return v(e,Mt,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:h(o.f2),changePercent:h(o.f3),change:h(o.f4),volume:h(o.f5),amount:h(o.f6),amplitude:h(o.f7),high:h(o.f15),low:h(o.f16),open:h(o.f17),prevClose:h(o.f18),turnoverRate:h(o.f8),pe:h(o.f9),pb:h(o.f23)}))}async function Re(e,t,n={}){let{period:s="daily",adjust:r="",startDate:o="19700101",endDate:i="20500101"}=n;A(s),M(r);let a=await et(e,t),l=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:_(s),fqt:K(r),beg:o,end:i,smplmt:"10000",lmt:"1000000"}),u=G,{klines:c}=await E(e,u,l);return c.length===0?[]:c.map(f=>({...L(f)}))}async function be(e,t,n={}){let{period:s="5"}=n;I(s);let r=await et(e,t);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.${r}`}),i=`${Kt}?${o.toString()}`,l=(await e.get(i,{responseType:"json"}))?.data?.trends;return!Array.isArray(l)||l.length===0?[]:l.map(u=>{let[c,f,p,g,y,C,T,w]=u.split(",");return{time:c,open:m(f),close:m(p),high:m(g),low:m(y),volume:m(C),amount:m(T),price:m(w)}})}else{let o=new URLSearchParams({secid:`90.${r}`,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=`${G}?${o.toString()}`,l=(await e.get(i,{responseType:"json"}))?.data?.klines;return!Array.isArray(l)||l.length===0?[]:l.map(u=>{let[c,f,p,g,y,C,T,w,O,P,q]=u.split(",");return{time:c,open:m(f),close:m(p),high:m(g),low:m(y),changePercent:m(O),change:m(P),volume:m(C),amount:m(T),amplitude:m(w),turnoverRate:m(q)}})}}var $t=null;async function nt(e,t){if(t.startsWith("BK"))return t;if(!$t){let s=await Wt(e);$t=new Map(s.map(r=>[r.name,r.code]))}let n=$t.get(t);if(!n)throw new Error(`\u672A\u627E\u5230\u6982\u5FF5\u677F\u5757: ${t}`);return n}async function Wt(e){let s=await v(e,At,{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,(r,o)=>({rank:o,name:String(r.f14??""),code:String(r.f12??""),price:h(r.f2),change:h(r.f4),changePercent:h(r.f3),totalMarketCap:h(r.f20),turnoverRate:h(r.f8),riseCount:h(r.f104),fallCount:h(r.f105),leadingStock:r.f128?String(r.f128):null,leadingStockChangePercent:h(r.f136)}));return s.sort((r,o)=>(o.changePercent??0)-(r.changePercent??0)),s.forEach((r,o)=>{r.rank=o+1}),s}async function Se(e,t){let n=await nt(e,t),s=new URLSearchParams({fields:"f43,f44,f45,f46,f47,f48,f170,f171,f168,f169",mpi:"1000",invt:"2",fltt:"1",secid:`90.${n}`}),r=`${_t}?${s.toString()}`,i=(await e.get(r,{responseType:"json"}))?.data;return i?[{key:"f43",name:"\u6700\u65B0",divide:!0},{key:"f44",name:"\u6700\u9AD8",divide:!0},{key:"f45",name:"\u6700\u4F4E",divide:!0},{key:"f46",name:"\u5F00\u76D8",divide:!0},{key:"f47",name:"\u6210\u4EA4\u91CF",divide:!1},{key:"f48",name:"\u6210\u4EA4\u989D",divide:!1},{key:"f170",name:"\u6DA8\u8DCC\u5E45",divide:!0},{key:"f171",name:"\u632F\u5E45",divide:!0},{key:"f168",name:"\u6362\u624B\u7387",divide:!0},{key:"f169",name:"\u6DA8\u8DCC\u989D",divide:!0}].map(({key:l,name:u,divide:c})=>{let f=i[l],p=null;return typeof f=="number"&&!isNaN(f)&&(p=c?f/100:f),{item:u,value:p}}):[]}async function Te(e,t){let s={po:"1",np:"1",ut:"bd1d9ddb04089700cf9c27f6f7426281",fltt:"2",invt:"2",fid:"f12",fs:`b:${await nt(e,t)} f:!50`};return v(e,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:h(o.f2),changePercent:h(o.f3),change:h(o.f4),volume:h(o.f5),amount:h(o.f6),amplitude:h(o.f7),high:h(o.f15),low:h(o.f16),open:h(o.f17),prevClose:h(o.f18),turnoverRate:h(o.f8),pe:h(o.f9),pb:h(o.f23)}))}async function we(e,t,n={}){let{period:s="daily",adjust:r="",startDate:o="19700101",endDate:i="20500101"}=n;A(s),M(r);let a=await nt(e,t),l=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:_(s),fqt:K(r),beg:o,end:i,smplmt:"10000",lmt:"1000000"}),u=J,{klines:c}=await E(e,u,l);return c.length===0?[]:c.map(f=>({...L(f)}))}async function Me(e,t,n={}){let{period:s="5"}=n;I(s);let r=await nt(e,t);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.${r}`}),i=`${Et}?${o.toString()}`,l=(await e.get(i,{responseType:"json"}))?.data?.trends;return!Array.isArray(l)||l.length===0?[]:l.map(u=>{let[c,f,p,g,y,C,T,w]=u.split(",");return{time:c,open:m(f),close:m(p),high:m(g),low:m(y),volume:m(C),amount:m(T),price:m(w)}})}else{let o=new URLSearchParams({secid:`90.${r}`,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 e.get(i,{responseType:"json"}))?.data?.klines;return!Array.isArray(l)||l.length===0?[]:l.map(u=>{let[c,f,p,g,y,C,T,w,O,P,q]=u.split(",");return{time:c,open:m(f),close:m(p),high:m(g),low:m(y),changePercent:m(O),change:m(P),volume:m(C),amount:m(T),amplitude:m(w),turnoverRate:m(q)}})}}function $(e,t=2){let n=Math.pow(10,t);return Math.round(e*n)/n}function k(e,t){let n=[];for(let s=0;s<e.length;s++){if(s<t-1){n.push(null);continue}let r=0,o=0;for(let i=s-t+1;i<=s;i++)e[i]!==null&&(r+=e[i],o++);n.push(o===t?$(r/t):null)}return n}function U(e,t){let n=[],s=2/(t+1),r=null,o=!1;for(let i=0;i<e.length;i++){if(i<t-1){n.push(null);continue}if(!o){let l=0,u=0;for(let c=i-t+1;c<=i;c++)e[c]!==null&&(l+=e[c],u++);u===t&&(r=l/t,o=!0),n.push(r!==null?$(r):null);continue}let a=e[i];a===null?n.push(r!==null?$(r):null):(r=s*a+(1-s)*r,n.push($(r)))}return n}function zt(e,t){let n=[],s=Array.from({length:t},(o,i)=>i+1),r=s.reduce((o,i)=>o+i,0);for(let o=0;o<e.length;o++){if(o<t-1){n.push(null);continue}let i=0,a=!0;for(let l=0;l<t;l++){let u=e[o-t+1+l];if(u===null){a=!1;break}i+=u*s[l]}n.push(a?$(i/r):null)}return n}function rt(e,t={}){let{periods:n=[5,10,20,30,60,120,250],type:s="sma"}=t,r=s==="ema"?U:s==="wma"?zt:k,o={};for(let i of n)o[`ma${i}`]=r(e,i);return e.map((i,a)=>{let l={};for(let u of n)l[`ma${u}`]=o[`ma${u}`][a];return l})}function Ke(e,t=2){let n=Math.pow(10,t);return Math.round(e*n)/n}function ot(e,t={}){let{short:n=12,long:s=26,signal:r=9}=t,o=U(e,n),i=U(e,s),a=e.map((u,c)=>o[c]===null||i[c]===null?null:o[c]-i[c]),l=U(a,r);return e.map((u,c)=>({dif:a[c]!==null?Ke(a[c]):null,dea:l[c],macd:a[c]!==null&&l[c]!==null?Ke((a[c]-l[c])*2):null}))}function Vt(e,t=2){let n=Math.pow(10,t);return Math.round(e*n)/n}function He(e,t,n){let s=[];for(let r=0;r<e.length;r++){if(r<t-1||n[r]===null){s.push(null);continue}let o=0,i=0;for(let a=r-t+1;a<=r;a++)e[a]!==null&&n[r]!==null&&(o+=Math.pow(e[a]-n[r],2),i++);s.push(i===t?Math.sqrt(o/t):null)}return s}function st(e,t={}){let{period:n=20,stdDev:s=2}=t,r=k(e,n),o=He(e,n,r);return e.map((i,a)=>{if(r[a]===null||o[a]===null)return{mid:null,upper:null,lower:null,bandwidth:null};let l=r[a]+s*o[a],u=r[a]-s*o[a],c=r[a]!==0?Vt((l-u)/r[a]*100):null;return{mid:r[a],upper:Vt(l),lower:Vt(u),bandwidth:c}})}function Gt(e,t=2){let n=Math.pow(10,t);return Math.round(e*n)/n}function it(e,t={}){let{period:n=9,kPeriod:s=3,dPeriod:r=3}=t,o=[],i=50,a=50;for(let l=0;l<e.length;l++){if(l<n-1){o.push({k:null,d:null,j:null});continue}let u=-1/0,c=1/0,f=!0;for(let C=l-n+1;C<=l;C++){if(e[C].high===null||e[C].low===null){f=!1;break}u=Math.max(u,e[C].high),c=Math.min(c,e[C].low)}let p=e[l].close;if(!f||p===null||u===c){o.push({k:null,d:null,j:null});continue}let g=(p-c)/(u-c)*100;i=(s-1)/s*i+1/s*g,a=(r-1)/r*a+1/r*i;let y=3*i-2*a;o.push({k:Gt(i),d:Gt(a),j:Gt(y)})}return o}function ve(e,t=2){let n=Math.pow(10,t);return Math.round(e*n)/n}function at(e,t={}){let{periods:n=[6,12,24]}=t,s=[null];for(let o=1;o<e.length;o++)e[o]===null||e[o-1]===null?s.push(null):s.push(e[o]-e[o-1]);let r={};for(let o of n){let i=[],a=0,l=0;for(let u=0;u<e.length;u++){if(u<o){i.push(null),s[u]!==null&&(s[u]>0?a+=s[u]:l+=Math.abs(s[u]));continue}if(u===o)a=a/o,l=l/o;else{let c=s[u]??0,f=c>0?c:0,p=c<0?Math.abs(c):0;a=(a*(o-1)+f)/o,l=(l*(o-1)+p)/o}if(l===0)i.push(100);else if(a===0)i.push(0);else{let c=a/l;i.push(ve(100-100/(1+c)))}}r[`rsi${o}`]=i}return e.map((o,i)=>{let a={};for(let l of n)a[`rsi${l}`]=r[`rsi${l}`][i];return a})}function qe(e,t=2){let n=Math.pow(10,t);return Math.round(e*n)/n}function lt(e,t={}){let{periods:n=[6,10]}=t,s={};for(let r of n){let o=[];for(let i=0;i<e.length;i++){if(i<r-1){o.push(null);continue}let a=-1/0,l=1/0,u=!0;for(let p=i-r+1;p<=i;p++){if(e[p].high===null||e[p].low===null){u=!1;break}a=Math.max(a,e[p].high),l=Math.min(l,e[p].low)}let c=e[i].close;if(!u||c===null||a===l){o.push(null);continue}let f=(a-c)/(a-l)*100;o.push(qe(f))}s[`wr${r}`]=o}return e.map((r,o)=>{let i={};for(let a of n)i[`wr${a}`]=s[`wr${a}`][o];return i})}function Ne(e,t=2){let n=Math.pow(10,t);return Math.round(e*n)/n}function ut(e,t={}){let{periods:n=[6,12,24]}=t,s={};for(let r of n){let o=k(e,r),i=[];for(let a=0;a<e.length;a++)if(e[a]===null||o[a]===null||o[a]===0)i.push(null);else{let l=(e[a]-o[a])/o[a]*100;i.push(Ne(l))}s[`bias${r}`]=i}return e.map((r,o)=>{let i={};for(let a of n)i[`bias${a}`]=s[`bias${a}`][o];return i})}function je(e,t=2){let n=Math.pow(10,t);return Math.round(e*n)/n}function ct(e,t={}){let{period:n=14}=t,s=[],r=e.map(o=>o.high===null||o.low===null||o.close===null?null:(o.high+o.low+o.close)/3);for(let o=0;o<e.length;o++){if(o<n-1){s.push({cci:null});continue}let i=0,a=0;for(let f=o-n+1;f<=o;f++)r[f]!==null&&(i+=r[f],a++);if(a!==n||r[o]===null){s.push({cci:null});continue}let l=i/n,u=0;for(let f=o-n+1;f<=o;f++)u+=Math.abs(r[f]-l);let c=u/n;if(c===0)s.push({cci:0});else{let f=(r[o]-l)/(.015*c);s.push({cci:je(f)})}}return s}function Jt(e,t=2){let n=Math.pow(10,t);return Math.round(e*n)/n}function ft(e,t={}){let{period:n=14}=t,s=[],r=[];for(let i=0;i<e.length;i++){let{high:a,low:l,close:u}=e[i];if(a===null||l===null||u===null){r.push(null);continue}if(i===0)r.push(a-l);else{let c=e[i-1].close;if(c===null)r.push(a-l);else{let f=a-l,p=Math.abs(a-c),g=Math.abs(l-c);r.push(Math.max(f,p,g))}}}let o=null;for(let i=0;i<e.length;i++){if(i<n-1){s.push({tr:r[i]!==null?Jt(r[i]):null,atr:null});continue}if(i===n-1){let a=0,l=0;for(let u=0;u<n;u++)r[u]!==null&&(a+=r[u],l++);l===n&&(o=a/n)}else o!==null&&r[i]!==null&&(o=(o*(n-1)+r[i])/n);s.push({tr:r[i]!==null?Jt(r[i]):null,atr:o!==null?Jt(o):null})}return s}function pt(e,t={}){if(e.length===0)return[];let n=e.map(g=>g.close),s=e.map(g=>({open:g.open,high:g.high,low:g.low,close:g.close,volume:g.volume})),r=t.ma?rt(n,typeof t.ma=="object"?t.ma:{}):null,o=t.macd?ot(n,typeof t.macd=="object"?t.macd:{}):null,i=t.boll?st(n,typeof t.boll=="object"?t.boll:{}):null,a=t.kdj?it(s,typeof t.kdj=="object"?t.kdj:{}):null,l=t.rsi?at(n,typeof t.rsi=="object"?t.rsi:{}):null,u=t.wr?lt(s,typeof t.wr=="object"?t.wr:{}):null,c=t.bias?ut(n,typeof t.bias=="object"?t.bias:{}):null,f=t.cci?ct(s,typeof t.cci=="object"?t.cci:{}):null,p=t.atr?ft(s,typeof t.atr=="object"?t.atr:{}):null;return e.map((g,y)=>({...g,...r&&{ma:r[y]},...o&&{macd:o[y]},...i&&{boll:i[y]},...a&&{kdj:a[y]},...l&&{rsi:l[y]},...u&&{wr:u[y]},...c&&{bias:c[y]},...f&&{cci:f[y]},...p&&{atr:p[y]}}))}var dt=class{constructor(t={}){this.client=new F(t)}getFullQuotes(t){return b.getFullQuotes(this.client,t)}getSimpleQuotes(t){return b.getSimpleQuotes(this.client,t)}getHKQuotes(t){return b.getHKQuotes(this.client,t)}getUSQuotes(t){return b.getUSQuotes(this.client,t)}getFundQuotes(t){return b.getFundQuotes(this.client,t)}getFundFlow(t){return b.getFundFlow(this.client,t)}getPanelLargeOrder(t){return b.getPanelLargeOrder(this.client,t)}getTodayTimeline(t){return b.getTodayTimeline(this.client,t)}getIndustryList(){return S.getIndustryList(this.client)}getIndustrySpot(t){return S.getIndustrySpot(this.client,t)}getIndustryConstituents(t){return S.getIndustryConstituents(this.client,t)}getIndustryKline(t,n){return S.getIndustryKline(this.client,t,n)}getIndustryMinuteKline(t,n){return S.getIndustryMinuteKline(this.client,t,n)}getConceptList(){return S.getConceptList(this.client)}getConceptSpot(t){return S.getConceptSpot(this.client,t)}getConceptConstituents(t){return S.getConceptConstituents(this.client,t)}getConceptKline(t,n){return S.getConceptKline(this.client,t,n)}getConceptMinuteKline(t,n){return S.getConceptMinuteKline(this.client,t,n)}getHistoryKline(t,n){return S.getHistoryKline(this.client,t,n)}getMinuteKline(t,n){return S.getMinuteKline(this.client,t,n)}getHKHistoryKline(t,n){return S.getHKHistoryKline(this.client,t,n)}getUSHistoryKline(t,n){return S.getUSHistoryKline(this.client,t,n)}search(t){return b.search(this.client,t)}getAShareCodeList(t=!0){return b.getAShareCodeList(this.client,t)}getUSCodeList(t=!0){return b.getUSCodeList(this.client,t)}getHKCodeList(){return b.getHKCodeList(this.client)}async getAllAShareQuotes(t={}){let n=await this.getAShareCodeList();return this.getAllQuotesByCodes(n,t)}async getAllHKShareQuotes(t={}){let n=await this.getHKCodeList();return b.getAllHKQuotesByCodes(this.client,n,t)}async getAllUSShareQuotes(t={}){let n=await this.getUSCodeList(!1);return b.getAllUSQuotesByCodes(this.client,n,t)}getAllQuotesByCodes(t,n={}){return b.getAllQuotesByCodes(this.client,t,n)}async batchRaw(t){return this.client.getTencentQuote(t)}getTradingCalendar(){return b.getTradingCalendar(this.client)}detectMarket(t){return/^\d{3}\.[A-Z]+$/i.test(t)?"US":/^\d{5}$/.test(t)?"HK":"A"}safeMax(t,n=0){return!t||t.length===0?n:Math.max(...t)}calcRequiredLookback(t){let n=0,s=!1;if(t.ma){let o=typeof t.ma=="object"?t.ma:{},i=o.periods??[5,10,20,30,60,120,250],a=o.type??"sma";n=Math.max(n,this.safeMax(i,20)),a==="ema"&&(s=!0)}if(t.macd){let o=typeof t.macd=="object"?t.macd:{},i=o.long??26,a=o.signal??9;n=Math.max(n,i*3+a),s=!0}if(t.boll){let o=typeof t.boll=="object"&&t.boll.period?t.boll.period:20;n=Math.max(n,o)}if(t.kdj){let o=typeof t.kdj=="object"&&t.kdj.period?t.kdj.period:9;n=Math.max(n,o)}if(t.rsi){let o=typeof t.rsi=="object"&&t.rsi.periods?t.rsi.periods:[6,12,24];n=Math.max(n,this.safeMax(o,14)+1)}if(t.wr){let o=typeof t.wr=="object"&&t.wr.periods?t.wr.periods:[6,10];n=Math.max(n,this.safeMax(o,10))}if(t.bias){let o=typeof t.bias=="object"&&t.bias.periods?t.bias.periods:[6,12,24];n=Math.max(n,this.safeMax(o,12))}if(t.cci){let o=typeof t.cci=="object"&&t.cci.period?t.cci.period:14;n=Math.max(n,o)}if(t.atr){let o=typeof t.atr=="object"&&t.atr.period?t.atr.period:14;n=Math.max(n,o)}return Math.ceil(n*(s?1.5:1.2))}calcActualStartDate(t,n,s=1.5){let r=Math.ceil(n*s),o=new Date(parseInt(t.slice(0,4)),parseInt(t.slice(4,6))-1,parseInt(t.slice(6,8)));o.setDate(o.getDate()-r);let i=o.getFullYear(),a=String(o.getMonth()+1).padStart(2,"0"),l=String(o.getDate()).padStart(2,"0");return`${i}${a}${l}`}dateToTimestamp(t){let n=t.includes("-")?t:`${t.slice(0,4)}-${t.slice(4,6)}-${t.slice(6,8)}`;return new Date(n).getTime()}async getKlineWithIndicators(t,n={}){let{startDate:s,endDate:r,indicators:o={}}=n,i=n.market??this.detectMarket(t),a=this.calcRequiredLookback(o),u={A:1.5,HK:1.46,US:1.45}[i],c=s?this.calcActualStartDate(s,a,u):void 0,f={period:n.period,adjust:n.adjust,startDate:c,endDate:n.endDate},p;switch(i){case"HK":p=await this.getHKHistoryKline(t,f);break;case"US":p=await this.getUSHistoryKline(t,f);break;default:p=await this.getHistoryKline(t,f)}if(s&&p.length<a)switch(i){case"HK":p=await this.getHKHistoryKline(t,{...f,startDate:void 0});break;case"US":p=await this.getUSHistoryKline(t,{...f,startDate:void 0});break;default:p=await this.getHistoryKline(t,{...f,startDate:void 0})}let g=pt(p,o);if(s){let y=this.dateToTimestamp(s),C=r?this.dateToTimestamp(r):1/0;return g.filter(T=>{let w=this.dateToTimestamp(T.date);return w>=y&&w<=C})}return g}},Qe=dt;export{B as HttpError,dt as StockSDK,pt as addIndicators,H as asyncPool,ft as calcATR,ut as calcBIAS,st as calcBOLL,ct as calcCCI,U as calcEMA,it as calcKDJ,rt as calcMA,ot as calcMACD,at as calcRSI,k as calcSMA,zt as calcWMA,lt as calcWR,D as chunkArray,W as decodeGBK,Qe as default,z as parseResponse,d as safeNumber,R as safeNumberOrNull};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stock-sdk",
3
- "version": "1.4.2",
3
+ "version": "1.4.3",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.js",
@@ -24,6 +24,8 @@
24
24
  "scripts": {
25
25
  "build": "tsup",
26
26
  "test": "vitest run",
27
+ "test:unit": "vitest run",
28
+ "test:integration": "RUN_INTEGRATION=1 vitest run",
27
29
  "dev": "vitepress dev website",
28
30
  "preview": "vitepress preview website",
29
31
  "build:docs": "DOCS_BASE=/ vitepress build website",
@@ -58,6 +60,7 @@
58
60
  "@iconify/vue": "^5.0.0",
59
61
  "@types/node": "^24.10.2",
60
62
  "@vitest/coverage-v8": "^4.0.16",
63
+ "msw": "^2.10.4",
61
64
  "tsup": "^8.3.5",
62
65
  "typescript": "^5.9.3",
63
66
  "vitepress": "^1.6.4",