stock-sdk 1.2.2 → 1.3.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +458 -15
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +476 -75
- package/dist/index.d.ts +476 -75
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function L(i){return new TextDecoder("gbk").decode(i)}function r(i){if(!i||i==="")return 0;let e=parseFloat(i);return Number.isNaN(e)?0:e}function u(i){if(!i||i==="")return null;let e=parseFloat(i);return Number.isNaN(e)?null:e}function U(i){let e=i.split(";").map(s=>s.trim()).filter(Boolean),n=[];for(let s of e){let t=s.indexOf("=");if(t<0)continue;let o=s.slice(0,t).trim();o.startsWith("v_")&&(o=o.slice(2));let a=s.slice(t+1).trim();a.startsWith('"')&&a.endsWith('"')&&(a=a.slice(1,-1));let m=a.split("~");n.push({key:o,fields:m})}return n}function N(i,e){let n=[];for(let s=0;s<i.length;s+=e)n.push(i.slice(s,s+e));return n}async function x(i,e){let n=[],s=[];for(let t of i){let o=Promise.resolve().then(()=>t()).then(a=>{n.push(a)});if(s.push(o),s.length>=e){await Promise.race(s);for(let a=s.length-1;a>=0;a--)await Promise.race([s[a].then(()=>"fulfilled"),Promise.resolve("pending")])==="fulfilled"&&s.splice(a,1)}}return await Promise.all(s),n}var K="https://qt.gtimg.cn",O="https://web.ifzq.gtimg.cn/appstock/app/minute/query",H="https://assets.linkdiary.cn/shares/ashare-code.json",I="https://push2his.eastmoney.com/api/qt/stock/kline/get",E="https://push2his.eastmoney.com/api/qt/stock/trends2/get";function M(i){return i.startsWith("sh")?"1":i.startsWith("sz")||i.startsWith("bj")?"0":i.startsWith("6")?"1":"0"}function l(i){if(!i||i===""||i==="-")return null;let e=parseFloat(i);return Number.isNaN(e)?null:e}var A=class{constructor(e={}){this.baseUrl=e.baseUrl??K,this.timeout=e.timeout??1e4}async request(e){let n=`${this.baseUrl}/?q=${encodeURIComponent(e)}`,s=new AbortController,t=setTimeout(()=>s.abort(),this.timeout);try{let o=await fetch(n,{signal:s.signal});if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);let a=await o.arrayBuffer(),m=L(a);return U(m)}finally{clearTimeout(t)}}async getFullQuotes(e){return!e||e.length===0?[]:(await this.request(e.join(","))).filter(s=>s.fields&&s.fields.length>0&&s.fields[0]!=="").map(s=>this.parseFullQuote(s.fields))}parseFullQuote(e){let n=[];for(let t=0;t<5;t++)n.push({price:r(e[9+t*2]),volume:r(e[10+t*2])});let s=[];for(let t=0;t<5;t++)s.push({price:r(e[19+t*2]),volume:r(e[20+t*2])});return{marketId:e[0]??"",name:e[1]??"",code:e[2]??"",price:r(e[3]),prevClose:r(e[4]),open:r(e[5]),volume:r(e[6]),outerVolume:r(e[7]),innerVolume:r(e[8]),bid:n,ask:s,time:e[30]??"",change:r(e[31]),changePercent:r(e[32]),high:r(e[33]),low:r(e[34]),volume2:r(e[36]),amount:r(e[37]),turnoverRate:u(e[38]),pe:u(e[39]),amplitude:u(e[43]),circulatingMarketCap:u(e[44]),totalMarketCap:u(e[45]),pb:u(e[46]),limitUp:u(e[47]),limitDown:u(e[48]),volumeRatio:u(e[49]),avgPrice:u(e[51]),peStatic:u(e[52]),peDynamic:u(e[53]),high52w:u(e[67]),low52w:u(e[68]),circulatingShares:u(e[72]),totalShares:u(e[73]),raw:e}}async getSimpleQuotes(e){if(!e||e.length===0)return[];let n=e.map(t=>`s_${t}`);return(await this.request(n.join(","))).filter(t=>t.fields&&t.fields.length>0&&t.fields[0]!=="").map(t=>this.parseSimpleQuote(t.fields))}parseSimpleQuote(e){return{marketId:e[0]??"",name:e[1]??"",code:e[2]??"",price:r(e[3]),change:r(e[4]),changePercent:r(e[5]),volume:r(e[6]),amount:r(e[7]),marketCap:u(e[9]),marketType:e[10]??"",raw:e}}async getFundFlow(e){if(!e||e.length===0)return[];let n=e.map(t=>`ff_${t}`);return(await this.request(n.join(","))).filter(t=>t.fields&&t.fields.length>0&&t.fields[0]!=="").map(t=>this.parseFundFlow(t.fields))}parseFundFlow(e){return{code:e[0]??"",mainInflow:r(e[1]),mainOutflow:r(e[2]),mainNet:r(e[3]),mainNetRatio:r(e[4]),retailInflow:r(e[5]),retailOutflow:r(e[6]),retailNet:r(e[7]),retailNetRatio:r(e[8]),totalFlow:r(e[9]),name:e[12]??"",date:e[13]??"",raw:e}}async getPanelLargeOrder(e){if(!e||e.length===0)return[];let n=e.map(t=>`s_pk${t}`);return(await this.request(n.join(","))).filter(t=>t.fields&&t.fields.length>0&&t.fields[0]!=="").map(t=>this.parsePanelLargeOrder(t.fields))}parsePanelLargeOrder(e){return{buyLargeRatio:r(e[0]),buySmallRatio:r(e[1]),sellLargeRatio:r(e[2]),sellSmallRatio:r(e[3]),raw:e}}async getHKQuotes(e){if(!e||e.length===0)return[];let n=e.map(t=>`r_hk${t}`);return(await this.request(n.join(","))).filter(t=>t.fields&&t.fields.length>0&&t.fields[0]!=="").map(t=>this.parseHKQuote(t.fields))}parseHKQuote(e){return{marketId:e[0]??"",name:e[1]??"",code:e[2]??"",price:r(e[3]),prevClose:r(e[4]),open:r(e[5]),volume:r(e[6]),time:e[30]??"",change:r(e[31]),changePercent:r(e[32]),high:r(e[33]),low:r(e[34]),amount:r(e[36]),lotSize:u(e[40]),circulatingMarketCap:u(e[46]),totalMarketCap:u(e[47]),currency:e[e.length-3]??"",raw:e}}async getUSQuotes(e){if(!e||e.length===0)return[];let n=e.map(t=>`s_us${t}`);return(await this.request(n.join(","))).filter(t=>t.fields&&t.fields.length>0&&t.fields[0]!=="").map(t=>this.parseUSQuote(t.fields))}parseUSQuote(e){return{marketId:e[0]??"",name:e[1]??"",code:e[2]??"",price:r(e[3]),change:r(e[4]),changePercent:r(e[5]),volume:r(e[6]),amount:r(e[7]),marketCap:u(e[8]),raw:e}}async getFundQuotes(e){if(!e||e.length===0)return[];let n=e.map(t=>`jj${t}`);return(await this.request(n.join(","))).filter(t=>t.fields&&t.fields.length>0&&t.fields[0]!=="").map(t=>this.parseFundQuote(t.fields))}parseFundQuote(e){return{code:e[0]??"",name:e[1]??"",nav:r(e[5]),accNav:r(e[6]),change:r(e[7]),navDate:e[8]??"",raw:e}}async batchRaw(e){return this.request(e)}async getTodayTimeline(e){let n=new AbortController,s=setTimeout(()=>n.abort(),this.timeout);try{let t=await fetch(`${O}?code=${e}`,{signal:n.signal});if(!t.ok)throw new Error(`HTTP error! status: ${t.status}`);let o=await t.json();if(o.code!==0)throw new Error(o.msg||"API error");let a=o.data?.[e];if(!a)return{code:e,date:"",data:[]};let m=a.data?.data||[],d=a.data?.date||"",h=!1;if(m.length>0){let p=m[0].split(" "),c=parseFloat(p[1])||0,g=parseInt(p[2],10)||0,f=parseFloat(p[3])||0;g>0&&c>0&&f/g>c*50&&(h=!0)}let k=m.map(p=>{let c=p.split(" "),g=c[0],f=`${g.slice(0,2)}:${g.slice(2,4)}`,y=parseInt(c[2],10)||0,b=parseFloat(c[3])||0,w=h?y*100:y,P=w>0?b/w:0;return{time:f,price:parseFloat(c[1])||0,volume:w,amount:b,avgPrice:Math.round(P*100)/100}});return{code:e,date:d,data:k}}finally{clearTimeout(s)}}async getAShareCodeList(e=!0){let n=new AbortController,s=setTimeout(()=>n.abort(),this.timeout);try{let t=await fetch(H,{signal:n.signal});if(!t.ok)throw new Error(`HTTP error! status: ${t.status}`);let o=await t.json();return e?o:o.map(a=>a.replace(/^(sh|sz|bj)/,""))}finally{clearTimeout(s)}}async getAllAShareQuotes(e={}){let{batchSize:n=500,concurrency:s=7,onProgress:t}=e,o=await this.getAShareCodeList(),a=N(o,n),m=a.length,d=0,h=a.map(p=>async()=>{let c=await this.getFullQuotes(p);return d++,t&&t(d,m),c});return(await x(h,s)).flat()}async getAllQuotesByCodes(e,n={}){let{batchSize:s=500,concurrency:t=7,onProgress:o}=n,a=N(e,s),m=a.length,d=0,h=a.map(p=>async()=>{let c=await this.getFullQuotes(p);return d++,o&&o(d,m),c});return(await x(h,t)).flat()}async getHistoryKline(e,n={}){let{period:s="daily",adjust:t="hfq",startDate:o="19700101",endDate:a="20500101"}=n,m=e.replace(/^(sh|sz|bj)/,""),d={daily:"101",weekly:"102",monthly:"103"},h={"":"0",qfq:"1",hfq:"2"},k=`${M(m)}.${m}`,p=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:d[s],fqt:h[t],secid:k,beg:o,end:a}),c=new AbortController,g=setTimeout(()=>c.abort(),this.timeout);try{let f=await fetch(`${I}?${p.toString()}`,{signal:c.signal});if(!f.ok)throw new Error(`HTTP error! status: ${f.status}`);let b=(await f.json())?.data?.klines;return!Array.isArray(b)||b.length===0?[]:b.map(w=>{let[P,T,v,Q,S,F,j,q,C,R,$]=w.split(",");return{date:P,code:m,open:l(T),close:l(v),high:l(Q),low:l(S),volume:l(F),amount:l(j),amplitude:l(q),changePercent:l(C),change:l(R),turnoverRate:l($)}})}finally{clearTimeout(g)}}async getMinuteKline(e,n={}){let{period:s="1",adjust:t="hfq",startDate:o="1979-09-01 09:32:00",endDate:a="2222-01-01 09:32:00"}=n,m=e.replace(/^(sh|sz|bj)/,""),d=`${M(m)}.${m}`,h=new AbortController,k=setTimeout(()=>h.abort(),this.timeout);try{if(s==="1"){let p=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:d}),c=await fetch(`${E}?${p.toString()}`,{signal:h.signal});if(!c.ok)throw new Error(`HTTP error! status: ${c.status}`);let f=(await c.json())?.data?.trends;if(!Array.isArray(f)||f.length===0)return[];let y=o.replace("T"," ").slice(0,16),b=a.replace("T"," ").slice(0,16);return f.map(w=>{let[P,T,v,Q,S,F,j,q]=w.split(",");return{time:P,open:l(T),close:l(v),high:l(Q),low:l(S),volume:l(F),amount:l(j),avgPrice:l(q)}}).filter(w=>w.time>=y&&w.time<=b)}else{let p={"":"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:s,fqt:p[t],secid:d,beg:"0",end:"20500000"}),g=await fetch(`${I}?${c.toString()}`,{signal:h.signal});if(!g.ok)throw new Error(`HTTP error! status: ${g.status}`);let y=(await g.json())?.data?.klines;if(!Array.isArray(y)||y.length===0)return[];let b=o.replace("T"," ").slice(0,16),w=a.replace("T"," ").slice(0,16);return y.map(P=>{let[T,v,Q,S,F,j,q,C,R,$,D]=P.split(",");return{time:T,open:l(v),close:l(Q),high:l(S),low:l(F),changePercent:l(R),change:l($),volume:l(j),amount:l(q),amplitude:l(C),turnoverRate:l(D)}}).filter(P=>P.time>=b&&P.time<=w)}}finally{clearTimeout(k)}}},_=A;export{A as StockSDK,_ as default};
|
|
1
|
+
var zt=Object.defineProperty;var Ht=(t,e)=>{for(var n in e)zt(t,n,{get:e[n],enumerable:!0})};function B(t){return new TextDecoder("gbk").decode(t)}function $(t){let e=t.split(";").map(s=>s.trim()).filter(Boolean),n=[];for(let s of e){let r=s.indexOf("=");if(r<0)continue;let o=s.slice(0,r).trim();o.startsWith("v_")&&(o=o.slice(2));let i=s.slice(r+1).trim();i.startsWith('"')&&i.endsWith('"')&&(i=i.slice(1,-1));let l=i.split("~");n.push({key:o,fields:l})}return n}function m(t){if(!t||t==="")return 0;let e=parseFloat(t);return Number.isNaN(e)?0:e}function y(t){if(!t||t==="")return null;let e=parseFloat(t);return Number.isNaN(e)?null:e}function p(t){if(!t||t===""||t==="-")return null;let e=parseFloat(t);return Number.isNaN(e)?null:e}var ut="https://qt.gtimg.cn",ct="https://web.ifzq.gtimg.cn/appstock/app/minute/query",mt="https://assets.linkdiary.cn/shares/zh_a_list.json",pt="https://assets.linkdiary.cn/shares/us_list.json",ft="https://assets.linkdiary.cn/shares/hk_list.json";var W="https://push2his.eastmoney.com/api/qt/stock/kline/get",dt="https://push2his.eastmoney.com/api/qt/stock/trends2/get",ht="https://33.push2his.eastmoney.com/api/qt/stock/kline/get",gt="https://63.push2his.eastmoney.com/api/qt/stock/kline/get",yt=3e4,E=500,D=500,N=7;var F=class{constructor(e={}){this.baseUrl=e.baseUrl??ut,this.timeout=e.timeout??yt}getTimeout(){return this.timeout}async get(e,n={}){let s=new AbortController,r=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(n.responseType){case"json":return await o.json();case"arraybuffer":return await o.arrayBuffer();default:return await o.text()}}finally{clearTimeout(r)}}async getTencentQuote(e){let n=`${this.baseUrl}/?q=${encodeURIComponent(e)}`,s=await this.get(n,{responseType:"arraybuffer"}),r=B(s);return $(r)}};var Vt=new Set(["daily","weekly","monthly"]),Gt=new Set(["1","5","15","30","60"]),Jt=new Set(["","qfq","hfq"]);function C(t,e){if(!Number.isFinite(t)||!Number.isInteger(t)||t<=0)throw new RangeError(`${e} must be a positive integer`)}function P(t){if(!Vt.has(t))throw new RangeError("period must be one of: daily, weekly, monthly")}function bt(t){if(!Gt.has(t))throw new RangeError("period must be one of: 1, 5, 15, 30, 60")}function k(t){if(!Jt.has(t))throw new RangeError("adjust must be one of: '', 'qfq', 'hfq'")}function _(t,e){C(e,"chunkSize");let n=[];for(let s=0;s<t.length;s+=e)n.push(t.slice(s,s+e));return n}async function q(t,e){C(e,"concurrency");let n=[],s=[];for(let r of t){let o=Promise.resolve().then(()=>r()).then(i=>{n.push(i)});if(s.push(o),s.length>=e){await Promise.race(s);for(let i=s.length-1;i>=0;i--)await Promise.race([s[i].then(()=>"fulfilled"),Promise.resolve("pending")])==="fulfilled"&&s.splice(i,1)}}return await Promise.all(s),n}function z(t){return t.startsWith("sh")?"1":t.startsWith("sz")||t.startsWith("bj")?"0":t.startsWith("6")?"1":"0"}var S={};Ht(S,{getAShareCodeList:()=>jt,getAllHKQuotesByCodes:()=>Dt,getAllQuotesByCodes:()=>Et,getAllUSQuotesByCodes:()=>Nt,getFullQuotes:()=>V,getFundFlow:()=>Ut,getFundQuotes:()=>Ot,getHKCodeList:()=>qt,getHKQuotes:()=>G,getPanelLargeOrder:()=>Pt,getSimpleQuotes:()=>It,getTodayTimeline:()=>Qt,getUSCodeList:()=>_t,getUSQuotes:()=>J,parseFullQuote:()=>Rt,parseFundFlow:()=>wt,parseFundQuote:()=>Kt,parseHKQuote:()=>At,parsePanelLargeOrder:()=>Tt,parseSimpleQuote:()=>St,parseUSQuote:()=>Ct});function Rt(t){let e=[];for(let s=0;s<5;s++)e.push({price:m(t[9+s*2]),volume:m(t[10+s*2])});let n=[];for(let s=0;s<5;s++)n.push({price:m(t[19+s*2]),volume:m(t[20+s*2])});return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:m(t[3]),prevClose:m(t[4]),open:m(t[5]),volume:m(t[6]),outerVolume:m(t[7]),innerVolume:m(t[8]),bid:e,ask:n,time:t[30]??"",change:m(t[31]),changePercent:m(t[32]),high:m(t[33]),low:m(t[34]),volume2:m(t[36]),amount:m(t[37]),turnoverRate:y(t[38]),pe:y(t[39]),amplitude:y(t[43]),circulatingMarketCap:y(t[44]),totalMarketCap:y(t[45]),pb:y(t[46]),limitUp:y(t[47]),limitDown:y(t[48]),volumeRatio:y(t[49]),avgPrice:y(t[51]),peStatic:y(t[52]),peDynamic:y(t[53]),high52w:y(t[67]),low52w:y(t[68]),circulatingShares:y(t[72]),totalShares:y(t[73]),raw:t}}function St(t){return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:m(t[3]),change:m(t[4]),changePercent:m(t[5]),volume:m(t[6]),amount:m(t[7]),marketCap:y(t[9]),marketType:t[10]??"",raw:t}}function wt(t){return{code:t[0]??"",mainInflow:m(t[1]),mainOutflow:m(t[2]),mainNet:m(t[3]),mainNetRatio:m(t[4]),retailInflow:m(t[5]),retailOutflow:m(t[6]),retailNet:m(t[7]),retailNetRatio:m(t[8]),totalFlow:m(t[9]),name:t[12]??"",date:t[13]??"",raw:t}}function Tt(t){return{buyLargeRatio:m(t[0]),buySmallRatio:m(t[1]),sellLargeRatio:m(t[2]),sellSmallRatio:m(t[3]),raw:t}}function At(t){return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:m(t[3]),prevClose:m(t[4]),open:m(t[5]),volume:m(t[6]),time:t[30]??"",change:m(t[31]),changePercent:m(t[32]),high:m(t[33]),low:m(t[34]),amount:m(t[37]),lotSize:y(t[40]),circulatingMarketCap:y(t[44]),totalMarketCap:y(t[45]),currency:t[t.length-3]??"",raw:t}}function Ct(t){return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:m(t[3]),prevClose:m(t[4]),open:m(t[5]),volume:m(t[6]),time:t[30]??"",change:m(t[31]),changePercent:m(t[32]),high:m(t[33]),low:m(t[34]),amount:m(t[37]),turnoverRate:y(t[38]),pe:y(t[39]),amplitude:y(t[43]),totalMarketCap:y(t[45]),pb:y(t[47]),high52w:y(t[48]),low52w:y(t[49]),raw:t}}function Kt(t){return{code:t[0]??"",name:t[1]??"",nav:m(t[5]),accNav:m(t[6]),change:m(t[7]),navDate:t[8]??"",raw:t}}async function V(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=>Rt(s.fields))}async function It(t,e){if(!e||e.length===0)return[];let n=e.map(r=>`s_${r}`);return(await t.getTencentQuote(n.join(","))).filter(r=>r.fields&&r.fields.length>0&&r.fields[0]!=="").map(r=>St(r.fields))}async function Ut(t,e){if(!e||e.length===0)return[];let n=e.map(r=>`ff_${r}`);return(await t.getTencentQuote(n.join(","))).filter(r=>r.fields&&r.fields.length>0&&r.fields[0]!=="").map(r=>wt(r.fields))}async function Pt(t,e){if(!e||e.length===0)return[];let n=e.map(r=>`s_pk${r}`);return(await t.getTencentQuote(n.join(","))).filter(r=>r.fields&&r.fields.length>0&&r.fields[0]!=="").map(r=>Tt(r.fields))}async function G(t,e){if(!e||e.length===0)return[];let n=e.map(r=>`hk${r}`);return(await t.getTencentQuote(n.join(","))).filter(r=>r.fields&&r.fields.length>0&&r.fields[0]!=="").map(r=>At(r.fields))}async function J(t,e){if(!e||e.length===0)return[];let n=e.map(r=>`us${r}`);return(await t.getTencentQuote(n.join(","))).filter(r=>r.fields&&r.fields.length>0&&r.fields[0]!=="").map(r=>Ct(r.fields))}async function Ot(t,e){if(!e||e.length===0)return[];let n=e.map(r=>`jj${r}`);return(await t.getTencentQuote(n.join(","))).filter(r=>r.fields&&r.fields.length>0&&r.fields[0]!=="").map(r=>Kt(r.fields))}async function Qt(t,e){let n=t.getTimeout(),s=new AbortController,r=setTimeout(()=>s.abort(),n);try{let o=await fetch(`${ct}?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 l=i.data?.[e];if(!l)return{code:e,date:"",data:[]};let a=l.data?.data||[],u=l.data?.date||"",c=!1;if(a.length>0){let f=a[0].split(" "),h=parseFloat(f[1])||0,g=parseInt(f[2],10)||0,b=parseFloat(f[3])||0;g>0&&h>0&&b/g>h*50&&(c=!0)}let d=a.map(f=>{let h=f.split(" "),g=h[0],b=`${g.slice(0,2)}:${g.slice(2,4)}`,R=parseInt(h[2],10)||0,w=parseFloat(h[3])||0,T=c?R*100:R,A=T>0?w/T:0;return{time:b,price:parseFloat(h[1])||0,volume:T,amount:w,avgPrice:Math.round(A*100)/100}});return{code:e,date:u,data:d}}finally{clearTimeout(r)}}async function jt(t,e=!0){let n=t.getTimeout(),s=new AbortController,r=setTimeout(()=>s.abort(),n);try{let o=await fetch(mt,{signal:s.signal});if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);let l=(await o.json()).list||[];return e?l:l.map(a=>a.replace(/^(sh|sz|bj)/,""))}finally{clearTimeout(r)}}async function _t(t,e=!0){let n=t.getTimeout(),s=new AbortController,r=setTimeout(()=>s.abort(),n);try{let o=await fetch(pt,{signal:s.signal});if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);let l=(await o.json()).list||[];return e?l:l.map(a=>a.replace(/^\d{3}\./,""))}finally{clearTimeout(r)}}async function qt(t){let e=t.getTimeout(),n=new AbortController,s=setTimeout(()=>n.abort(),e);try{let r=await fetch(ft,{signal:n.signal});if(!r.ok)throw new Error(`HTTP error! status: ${r.status}`);return(await r.json()).list||[]}finally{clearTimeout(s)}}async function Et(t,e,n={}){let{batchSize:s=E,concurrency:r=N,onProgress:o}=n;C(s,"batchSize"),C(r,"concurrency");let i=Math.min(s,D),l=_(e,i),a=l.length,u=0,c=l.map(f=>async()=>{let h=await V(t,f);return u++,o&&o(u,a),h});return(await q(c,r)).flat()}async function Dt(t,e,n={}){let{batchSize:s=E,concurrency:r=N,onProgress:o}=n;C(s,"batchSize"),C(r,"concurrency");let i=Math.min(s,D),l=_(e,i),a=l.length,u=0,c=l.map(f=>async()=>{let h=await G(t,f);return u++,o&&o(u,a),h});return(await q(c,r)).flat()}async function Nt(t,e,n={}){let{batchSize:s=E,concurrency:r=N,onProgress:o}=n;C(s,"batchSize"),C(r,"concurrency");let i=Math.min(s,D),l=_(e,i),a=l.length,u=0,c=l.map(f=>async()=>{let h=await J(t,f);return u++,o&&o(u,a),h});return(await q(c,r)).flat()}var O={};Ht(O,{getHKHistoryKline:()=>Bt,getHistoryKline:()=>Ft,getMinuteKline:()=>vt,getUSHistoryKline:()=>$t});async function Ft(t,e,n={}){let{period:s="daily",adjust:r="hfq",startDate:o="19700101",endDate:i="20500101"}=n;P(s),k(r);let l=e.replace(/^(sh|sz|bj)/,""),a={daily:"101",weekly:"102",monthly:"103"},u={"":"0",qfq:"1",hfq:"2"},c=`${z(e)}.${l}`,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:a[s],fqt:u[r],secid:c,beg:o,end:i}),f=`${W}?${d.toString()}`,g=(await t.get(f,{responseType:"json"}))?.data?.klines;return!Array.isArray(g)||g.length===0?[]:g.map(b=>{let[R,w,T,A,K,M,x,L,H,I,U]=b.split(",");return{date:R,code:l,open:p(w),close:p(T),high:p(A),low:p(K),volume:p(M),amount:p(x),amplitude:p(L),changePercent:p(H),change:p(I),turnoverRate:p(U)}})}async function vt(t,e,n={}){let{period:s="1",adjust:r="hfq",startDate:o="1979-09-01 09:32:00",endDate:i="2222-01-01 09:32:00"}=n;bt(s),k(r);let l=e.replace(/^(sh|sz|bj)/,""),a=`${z(e)}.${l}`;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:a}),c=`${dt}?${u.toString()}`,f=(await t.get(c,{responseType:"json"}))?.data?.trends;if(!Array.isArray(f)||f.length===0)return[];let h=o.replace("T"," ").slice(0,16),g=i.replace("T"," ").slice(0,16);return f.map(b=>{let[R,w,T,A,K,M,x,L]=b.split(",");return{time:R,open:p(w),close:p(T),high:p(A),low:p(K),volume:p(M),amount:p(x),avgPrice:p(L)}}).filter(b=>b.time>=h&&b.time<=g)}else{let u={"":"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:s,fqt:u[r],secid:a,beg:"0",end:"20500000"}),d=`${W}?${c.toString()}`,h=(await t.get(d,{responseType:"json"}))?.data?.klines;if(!Array.isArray(h)||h.length===0)return[];let g=o.replace("T"," ").slice(0,16),b=i.replace("T"," ").slice(0,16);return h.map(R=>{let[w,T,A,K,M,x,L,H,I,U,at]=R.split(",");return{time:w,open:p(T),close:p(A),high:p(K),low:p(M),changePercent:p(I),change:p(U),volume:p(x),amount:p(L),amplitude:p(H),turnoverRate:p(at)}}).filter(R=>R.time>=g&&R.time<=b)}}async function Bt(t,e,n={}){let{period:s="daily",adjust:r="hfq",startDate:o="19700101",endDate:i="20500101"}=n;P(s),k(r);let l=e.replace(/^hk/i,"").padStart(5,"0"),a={daily:"101",weekly:"102",monthly:"103"},u={"":"0",qfq:"1",hfq:"2"},c=`116.${l}`,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:a[s],fqt:u[r],secid:c,beg:o,end:i,lmt:"1000000"}),f=`${ht}?${d.toString()}`,h=await t.get(f,{responseType:"json"}),g=h?.data?.klines,b=h?.data?.name||"";return!Array.isArray(g)||g.length===0?[]:g.map(R=>{let[w,T,A,K,M,x,L,H,I,U,at]=R.split(",");return{date:w,code:l,name:b,open:p(T),close:p(A),high:p(K),low:p(M),volume:p(x),amount:p(L),amplitude:p(H),changePercent:p(I),change:p(U),turnoverRate:p(at)}})}async function $t(t,e,n={}){let{period:s="daily",adjust:r="hfq",startDate:o="19700101",endDate:i="20500101"}=n;P(s),k(r);let l={daily:"101",weekly:"102",monthly:"103"},a={"":"0",qfq:"1",hfq:"2"},u=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",ut:"7eea3edcaed734bea9cbfc24409ed989",klt:l[s],fqt:a[r],secid:e,beg:o,end:i,lmt:"1000000"}),c=`${gt}?${u.toString()}`,d=await t.get(c,{responseType:"json"}),f=d?.data?.klines,h=d?.data?.code||e.split(".")[1]||e,g=d?.data?.name||"";return!Array.isArray(f)||f.length===0?[]:f.map(b=>{let[R,w,T,A,K,M,x,L,H,I,U]=b.split(",");return{date:R,code:h,name:g,open:p(w),close:p(T),high:p(A),low:p(K),volume:p(M),amount:p(x),amplitude:p(L),changePercent:p(H),change:p(I),turnoverRate:p(U)}})}function v(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function Q(t,e){let n=[];for(let s=0;s<t.length;s++){if(s<e-1){n.push(null);continue}let r=0,o=0;for(let i=s-e+1;i<=s;i++)t[i]!==null&&(r+=t[i],o++);n.push(o===e?v(r/e):null)}return n}function j(t,e){let n=[],s=2/(e+1),r=null,o=!1;for(let i=0;i<t.length;i++){if(i<e-1){n.push(null);continue}if(!o){let a=0,u=0;for(let c=i-e+1;c<=i;c++)t[c]!==null&&(a+=t[c],u++);u===e&&(r=a/e,o=!0),n.push(r!==null?v(r):null);continue}let l=t[i];l===null?n.push(r!==null?v(r):null):(r=s*l+(1-s)*r,n.push(v(r)))}return n}function Mt(t,e){let n=[],s=Array.from({length:e},(o,i)=>i+1),r=s.reduce((o,i)=>o+i,0);for(let o=0;o<t.length;o++){if(o<e-1){n.push(null);continue}let i=0,l=!0;for(let a=0;a<e;a++){let u=t[o-e+1+a];if(u===null){l=!1;break}i+=u*s[a]}n.push(l?v(i/r):null)}return n}function Z(t,e={}){let{periods:n=[5,10,20,30,60,120,250],type:s="sma"}=e,r=s==="ema"?j:s==="wma"?Mt:Q,o={};for(let i of n)o[`ma${i}`]=r(t,i);return t.map((i,l)=>{let a={};for(let u of n)a[`ma${u}`]=o[`ma${u}`][l];return a})}function Wt(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function Y(t,e={}){let{short:n=12,long:s=26,signal:r=9}=e,o=j(t,n),i=j(t,s),l=t.map((u,c)=>o[c]===null||i[c]===null?null:o[c]-i[c]),a=j(l,r);return t.map((u,c)=>({dif:l[c]!==null?Wt(l[c]):null,dea:a[c],macd:l[c]!==null&&a[c]!==null?Wt((l[c]-a[c])*2):null}))}function xt(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function Zt(t,e,n){let s=[];for(let r=0;r<t.length;r++){if(r<e-1||n[r]===null){s.push(null);continue}let o=0,i=0;for(let l=r-e+1;l<=r;l++)t[l]!==null&&n[r]!==null&&(o+=Math.pow(t[l]-n[r],2),i++);s.push(i===e?Math.sqrt(o/e):null)}return s}function X(t,e={}){let{period:n=20,stdDev:s=2}=e,r=Q(t,n),o=Zt(t,n,r);return t.map((i,l)=>{if(r[l]===null||o[l]===null)return{mid:null,upper:null,lower:null,bandwidth:null};let a=r[l]+s*o[l],u=r[l]-s*o[l],c=r[l]!==0?xt((a-u)/r[l]*100):null;return{mid:r[l],upper:xt(a),lower:xt(u),bandwidth:c}})}function Lt(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function tt(t,e={}){let{period:n=9,kPeriod:s=3,dPeriod:r=3}=e,o=[],i=50,l=50;for(let a=0;a<t.length;a++){if(a<n-1){o.push({k:null,d:null,j:null});continue}let u=-1/0,c=1/0,d=!0;for(let b=a-n+1;b<=a;b++){if(t[b].high===null||t[b].low===null){d=!1;break}u=Math.max(u,t[b].high),c=Math.min(c,t[b].low)}let f=t[a].close;if(!d||f===null||u===c){o.push({k:null,d:null,j:null});continue}let h=(f-c)/(u-c)*100;i=(s-1)/s*i+1/s*h,l=(r-1)/r*l+1/r*i;let g=3*i-2*l;o.push({k:Lt(i),d:Lt(l),j:Lt(g)})}return o}function Yt(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function et(t,e={}){let{periods:n=[6,12,24]}=e,s=[null];for(let o=1;o<t.length;o++)t[o]===null||t[o-1]===null?s.push(null):s.push(t[o]-t[o-1]);let r={};for(let o of n){let i=[],l=0,a=0;for(let u=0;u<t.length;u++){if(u<o){i.push(null),s[u]!==null&&(s[u]>0?l+=s[u]:a+=Math.abs(s[u]));continue}if(u===o)l=l/o,a=a/o;else{let c=s[u]??0,d=c>0?c:0,f=c<0?Math.abs(c):0;l=(l*(o-1)+d)/o,a=(a*(o-1)+f)/o}if(a===0)i.push(100);else if(l===0)i.push(0);else{let c=l/a;i.push(Yt(100-100/(1+c)))}}r[`rsi${o}`]=i}return t.map((o,i)=>{let l={};for(let a of n)l[`rsi${a}`]=r[`rsi${a}`][i];return l})}function Xt(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function nt(t,e={}){let{periods:n=[6,10]}=e,s={};for(let r of n){let o=[];for(let i=0;i<t.length;i++){if(i<r-1){o.push(null);continue}let l=-1/0,a=1/0,u=!0;for(let f=i-r+1;f<=i;f++){if(t[f].high===null||t[f].low===null){u=!1;break}l=Math.max(l,t[f].high),a=Math.min(a,t[f].low)}let c=t[i].close;if(!u||c===null||l===a){o.push(null);continue}let d=(l-c)/(l-a)*100;o.push(Xt(d))}s[`wr${r}`]=o}return t.map((r,o)=>{let i={};for(let l of n)i[`wr${l}`]=s[`wr${l}`][o];return i})}function te(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function rt(t,e={}){let{periods:n=[6,12,24]}=e,s={};for(let r of n){let o=Q(t,r),i=[];for(let l=0;l<t.length;l++)if(t[l]===null||o[l]===null||o[l]===0)i.push(null);else{let a=(t[l]-o[l])/o[l]*100;i.push(te(a))}s[`bias${r}`]=i}return t.map((r,o)=>{let i={};for(let l of n)i[`bias${l}`]=s[`bias${l}`][o];return i})}function ee(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function ot(t,e={}){let{period:n=14}=e,s=[],r=t.map(o=>o.high===null||o.low===null||o.close===null?null:(o.high+o.low+o.close)/3);for(let o=0;o<t.length;o++){if(o<n-1){s.push({cci:null});continue}let i=0,l=0;for(let d=o-n+1;d<=o;d++)r[d]!==null&&(i+=r[d],l++);if(l!==n||r[o]===null){s.push({cci:null});continue}let a=i/n,u=0;for(let d=o-n+1;d<=o;d++)u+=Math.abs(r[d]-a);let c=u/n;if(c===0)s.push({cci:0});else{let d=(r[o]-a)/(.015*c);s.push({cci:ee(d)})}}return s}function kt(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function st(t,e={}){let{period:n=14}=e,s=[],r=[];for(let i=0;i<t.length;i++){let{high:l,low:a,close:u}=t[i];if(l===null||a===null||u===null){r.push(null);continue}if(i===0)r.push(l-a);else{let c=t[i-1].close;if(c===null)r.push(l-a);else{let d=l-a,f=Math.abs(l-c),h=Math.abs(a-c);r.push(Math.max(d,f,h))}}}let o=null;for(let i=0;i<t.length;i++){if(i<n-1){s.push({tr:r[i]!==null?kt(r[i]):null,atr:null});continue}if(i===n-1){let l=0,a=0;for(let u=0;u<n;u++)r[u]!==null&&(l+=r[u],a++);a===n&&(o=l/n)}else o!==null&&r[i]!==null&&(o=(o*(n-1)+r[i])/n);s.push({tr:r[i]!==null?kt(r[i]):null,atr:o!==null?kt(o):null})}return s}function it(t,e={}){if(t.length===0)return[];let n=t.map(h=>h.close),s=t.map(h=>({open:h.open,high:h.high,low:h.low,close:h.close,volume:h.volume})),r=e.ma?Z(n,typeof e.ma=="object"?e.ma:{}):null,o=e.macd?Y(n,typeof e.macd=="object"?e.macd:{}):null,i=e.boll?X(n,typeof e.boll=="object"?e.boll:{}):null,l=e.kdj?tt(s,typeof e.kdj=="object"?e.kdj:{}):null,a=e.rsi?et(n,typeof e.rsi=="object"?e.rsi:{}):null,u=e.wr?nt(s,typeof e.wr=="object"?e.wr:{}):null,c=e.bias?rt(n,typeof e.bias=="object"?e.bias:{}):null,d=e.cci?ot(s,typeof e.cci=="object"?e.cci:{}):null,f=e.atr?st(s,typeof e.atr=="object"?e.atr:{}):null;return t.map((h,g)=>({...h,...r&&{ma:r[g]},...o&&{macd:o[g]},...i&&{boll:i[g]},...l&&{kdj:l[g]},...a&&{rsi:a[g]},...u&&{wr:u[g]},...c&&{bias:c[g]},...d&&{cci:d[g]},...f&&{atr:f[g]}}))}var lt=class{constructor(e={}){this.client=new F(e)}getFullQuotes(e){return S.getFullQuotes(this.client,e)}getSimpleQuotes(e){return S.getSimpleQuotes(this.client,e)}getHKQuotes(e){return S.getHKQuotes(this.client,e)}getUSQuotes(e){return S.getUSQuotes(this.client,e)}getFundQuotes(e){return S.getFundQuotes(this.client,e)}getFundFlow(e){return S.getFundFlow(this.client,e)}getPanelLargeOrder(e){return S.getPanelLargeOrder(this.client,e)}getTodayTimeline(e){return S.getTodayTimeline(this.client,e)}getHistoryKline(e,n){return O.getHistoryKline(this.client,e,n)}getMinuteKline(e,n){return O.getMinuteKline(this.client,e,n)}getHKHistoryKline(e,n){return O.getHKHistoryKline(this.client,e,n)}getUSHistoryKline(e,n){return O.getUSHistoryKline(this.client,e,n)}getAShareCodeList(e=!0){return S.getAShareCodeList(this.client,e)}getUSCodeList(e=!0){return S.getUSCodeList(this.client,e)}getHKCodeList(){return S.getHKCodeList(this.client)}async getAllAShareQuotes(e={}){let n=await this.getAShareCodeList();return this.getAllQuotesByCodes(n,e)}async getAllHKShareQuotes(e={}){let n=await this.getHKCodeList();return S.getAllHKQuotesByCodes(this.client,n,e)}async getAllUSShareQuotes(e={}){let n=await this.getUSCodeList(!1);return S.getAllUSQuotesByCodes(this.client,n,e)}getAllQuotesByCodes(e,n={}){return S.getAllQuotesByCodes(this.client,e,n)}async batchRaw(e){return this.client.getTencentQuote(e)}detectMarket(e){return/^\d{3}\.[A-Z]+$/i.test(e)?"US":/^\d{5}$/.test(e)?"HK":"A"}safeMax(e,n=0){return!e||e.length===0?n:Math.max(...e)}calcRequiredLookback(e){let n=0,s=!1;if(e.ma){let o=typeof e.ma=="object"?e.ma:{},i=o.periods??[5,10,20,30,60,120,250],l=o.type??"sma";n=Math.max(n,this.safeMax(i,20)),l==="ema"&&(s=!0)}if(e.macd){let o=typeof e.macd=="object"?e.macd:{},i=o.long??26,l=o.signal??9;n=Math.max(n,i*3+l),s=!0}if(e.boll){let o=typeof e.boll=="object"&&e.boll.period?e.boll.period:20;n=Math.max(n,o)}if(e.kdj){let o=typeof e.kdj=="object"&&e.kdj.period?e.kdj.period:9;n=Math.max(n,o)}if(e.rsi){let o=typeof e.rsi=="object"&&e.rsi.periods?e.rsi.periods:[6,12,24];n=Math.max(n,this.safeMax(o,14)+1)}if(e.wr){let o=typeof e.wr=="object"&&e.wr.periods?e.wr.periods:[6,10];n=Math.max(n,this.safeMax(o,10))}if(e.bias){let o=typeof e.bias=="object"&&e.bias.periods?e.bias.periods:[6,12,24];n=Math.max(n,this.safeMax(o,12))}if(e.cci){let o=typeof e.cci=="object"&&e.cci.period?e.cci.period:14;n=Math.max(n,o)}if(e.atr){let o=typeof e.atr=="object"&&e.atr.period?e.atr.period:14;n=Math.max(n,o)}return Math.ceil(n*(s?1.5:1.2))}calcActualStartDate(e,n,s=1.5){let r=Math.ceil(n*s),o=new Date(parseInt(e.slice(0,4)),parseInt(e.slice(4,6))-1,parseInt(e.slice(6,8)));o.setDate(o.getDate()-r);let i=o.getFullYear(),l=String(o.getMonth()+1).padStart(2,"0"),a=String(o.getDate()).padStart(2,"0");return`${i}${l}${a}`}dateToTimestamp(e){let n=e.includes("-")?e:`${e.slice(0,4)}-${e.slice(4,6)}-${e.slice(6,8)}`;return new Date(n).getTime()}async getKlineWithIndicators(e,n={}){let{startDate:s,endDate:r,indicators:o={}}=n,i=n.market??this.detectMarket(e),l=this.calcRequiredLookback(o),u={A:1.5,HK:1.46,US:1.45}[i],c=s?this.calcActualStartDate(s,l,u):void 0,d={period:n.period,adjust:n.adjust,startDate:c,endDate:n.endDate},f;switch(i){case"HK":f=await this.getHKHistoryKline(e,d);break;case"US":f=await this.getUSHistoryKline(e,d);break;default:f=await this.getHistoryKline(e,d)}if(s&&f.length<l)switch(i){case"HK":f=await this.getHKHistoryKline(e,{...d,startDate:void 0});break;case"US":f=await this.getUSHistoryKline(e,{...d,startDate:void 0});break;default:f=await this.getHistoryKline(e,{...d,startDate:void 0})}let h=it(f,o);if(s){let g=this.dateToTimestamp(s),b=r?this.dateToTimestamp(r):1/0;return h.filter(R=>{let w=this.dateToTimestamp(R.date);return w>=g&&w<=b})}return h}},ne=lt;export{lt as StockSDK,it as addIndicators,q as asyncPool,st as calcATR,rt as calcBIAS,X as calcBOLL,ot as calcCCI,j as calcEMA,tt as calcKDJ,Z as calcMA,Y as calcMACD,et as calcRSI,Q as calcSMA,Mt as calcWMA,nt as calcWR,_ as chunkArray,B as decodeGBK,ne as default,$ as parseResponse,m as safeNumber,y as safeNumberOrNull};
|