stock-sdk 1.3.0-beta.1 → 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 +125 -3
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +52 -6
- package/dist/index.d.ts +52 -6
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -145,7 +145,11 @@ console.log(`共获取 ${allQuotes.length} 只股票`);
|
|
|
145
145
|
| 方法 | 说明 |
|
|
146
146
|
|------|------|
|
|
147
147
|
| [`getAShareCodeList`](#getasharecodellistincludeexchange-promisestring) | 获取全部 A 股代码 |
|
|
148
|
+
| [`getUSCodeList`](#getuscodelistincludemarket-promisestring) | 获取全部美股代码 |
|
|
149
|
+
| [`getHKCodeList`](#gethkcodelist-promisestring) | 获取全部港股代码 |
|
|
148
150
|
| [`getAllAShareQuotes`](#getallasharequotesoptions-promisefullquote) | 获取全市场 A 股行情 |
|
|
151
|
+
| [`getAllHKShareQuotes`](#getallhksharequotesoptions-promisehkquote) | 获取全市场港股行情 |
|
|
152
|
+
| [`getAllUSShareQuotes`](#getallusssharequotesoptions-promiseusquote) | 获取全市场美股行情 |
|
|
149
153
|
| [`getAllQuotesByCodes`](#getallquotesbycodescodes-options-promisefullquote) | 批量获取指定股票行情 |
|
|
150
154
|
|
|
151
155
|
---
|
|
@@ -490,6 +494,45 @@ const pureCodes = await sdk.getAShareCodeList(false);
|
|
|
490
494
|
|
|
491
495
|
---
|
|
492
496
|
|
|
497
|
+
### `getUSCodeList(includeMarket?): Promise<string[]>`
|
|
498
|
+
|
|
499
|
+
获取全部美股代码列表。
|
|
500
|
+
|
|
501
|
+
**参数**
|
|
502
|
+
|
|
503
|
+
| 参数 | 类型 | 说明 |
|
|
504
|
+
|------|------|------|
|
|
505
|
+
| `includeMarket` | `boolean` | 是否包含市场前缀(如 `105.`),默认 `true` |
|
|
506
|
+
|
|
507
|
+
**示例**
|
|
508
|
+
|
|
509
|
+
```typescript
|
|
510
|
+
// 包含市场前缀
|
|
511
|
+
const codes = await sdk.getUSCodeList();
|
|
512
|
+
// ['105.MSFT', '105.AAPL', '106.BABA', ...]
|
|
513
|
+
|
|
514
|
+
// 不包含市场前缀
|
|
515
|
+
const pureCodes = await sdk.getUSCodeList(false);
|
|
516
|
+
// ['MSFT', 'AAPL', 'BABA', ...]
|
|
517
|
+
```
|
|
518
|
+
|
|
519
|
+
> 市场代码说明:`105` = 纳斯达克,`106` = 纽交所,`107` = 其他
|
|
520
|
+
|
|
521
|
+
---
|
|
522
|
+
|
|
523
|
+
### `getHKCodeList(): Promise<string[]>`
|
|
524
|
+
|
|
525
|
+
获取全部港股代码列表。
|
|
526
|
+
|
|
527
|
+
**示例**
|
|
528
|
+
|
|
529
|
+
```typescript
|
|
530
|
+
const codes = await sdk.getHKCodeList();
|
|
531
|
+
// ['00700', '09988', '03690', ...]
|
|
532
|
+
```
|
|
533
|
+
|
|
534
|
+
---
|
|
535
|
+
|
|
493
536
|
### `getAllAShareQuotes(options?): Promise<FullQuote[]>`
|
|
494
537
|
|
|
495
538
|
获取全市场 A 股实时行情(5000+ 只股票),返回格式同 `getFullQuotes`。
|
|
@@ -500,7 +543,7 @@ const pureCodes = await sdk.getAShareCodeList(false);
|
|
|
500
543
|
|
|
501
544
|
| 参数 | 类型 | 说明 |
|
|
502
545
|
|------|------|------|
|
|
503
|
-
| `options.batchSize` | `number` | 单次请求股票数量,默认 `500` |
|
|
546
|
+
| `options.batchSize` | `number` | 单次请求股票数量,默认 `500`,最大 `500` |
|
|
504
547
|
| `options.concurrency` | `number` | 最大并发数,默认 `7` |
|
|
505
548
|
| `options.onProgress` | `(completed, total) => void` | 进度回调 |
|
|
506
549
|
|
|
@@ -519,6 +562,54 @@ console.log(`共获取 ${allQuotes.length} 只股票`);
|
|
|
519
562
|
|
|
520
563
|
---
|
|
521
564
|
|
|
565
|
+
### `getAllHKShareQuotes(options?): Promise<HKQuote[]>`
|
|
566
|
+
|
|
567
|
+
获取全市场港股实时行情,返回格式同 `getHKQuotes`。
|
|
568
|
+
|
|
569
|
+
**参数**
|
|
570
|
+
|
|
571
|
+
| 参数 | 类型 | 说明 |
|
|
572
|
+
|------|------|------|
|
|
573
|
+
| `options.batchSize` | `number` | 单次请求股票数量,默认 `500`,最大 `500` |
|
|
574
|
+
| `options.concurrency` | `number` | 最大并发数,默认 `7` |
|
|
575
|
+
| `options.onProgress` | `(completed, total) => void` | 进度回调 |
|
|
576
|
+
|
|
577
|
+
**示例**
|
|
578
|
+
|
|
579
|
+
```typescript
|
|
580
|
+
const allHKQuotes = await sdk.getAllHKShareQuotes({
|
|
581
|
+
batchSize: 300,
|
|
582
|
+
concurrency: 3,
|
|
583
|
+
});
|
|
584
|
+
console.log(`共获取 ${allHKQuotes.length} 只港股`);
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
---
|
|
588
|
+
|
|
589
|
+
### `getAllUSShareQuotes(options?): Promise<USQuote[]>`
|
|
590
|
+
|
|
591
|
+
获取全市场美股实时行情,返回格式同 `getUSQuotes`。
|
|
592
|
+
|
|
593
|
+
**参数**
|
|
594
|
+
|
|
595
|
+
| 参数 | 类型 | 说明 |
|
|
596
|
+
|------|------|------|
|
|
597
|
+
| `options.batchSize` | `number` | 单次请求股票数量,默认 `500`,最大 `500` |
|
|
598
|
+
| `options.concurrency` | `number` | 最大并发数,默认 `7` |
|
|
599
|
+
| `options.onProgress` | `(completed, total) => void` | 进度回调 |
|
|
600
|
+
|
|
601
|
+
**示例**
|
|
602
|
+
|
|
603
|
+
```typescript
|
|
604
|
+
const allUSQuotes = await sdk.getAllUSShareQuotes({
|
|
605
|
+
batchSize: 300,
|
|
606
|
+
concurrency: 3,
|
|
607
|
+
});
|
|
608
|
+
console.log(`共获取 ${allUSQuotes.length} 只美股`);
|
|
609
|
+
```
|
|
610
|
+
|
|
611
|
+
---
|
|
612
|
+
|
|
522
613
|
### `getAllQuotesByCodes(codes, options?): Promise<FullQuote[]>`
|
|
523
614
|
|
|
524
615
|
批量获取指定股票的全量行情,参数同 `getAllAShareQuotes`。
|
|
@@ -615,11 +706,42 @@ console.log(quotes[0].name); // 阿里巴巴-W
|
|
|
615
706
|
|------|------|------|
|
|
616
707
|
| `codes` | `string[]` | 美股代码数组,如 `['BABA', 'AAPL']` |
|
|
617
708
|
|
|
709
|
+
**返回类型**
|
|
710
|
+
|
|
711
|
+
```typescript
|
|
712
|
+
interface USQuote {
|
|
713
|
+
marketId: string; // 市场标识
|
|
714
|
+
name: string; // 名称
|
|
715
|
+
code: string; // 股票代码
|
|
716
|
+
price: number; // 最新价
|
|
717
|
+
prevClose: number; // 昨收
|
|
718
|
+
open: number; // 今开
|
|
719
|
+
volume: number; // 成交量
|
|
720
|
+
time: string; // 时间
|
|
721
|
+
change: number; // 涨跌额
|
|
722
|
+
changePercent: number; // 涨跌幅%
|
|
723
|
+
high: number; // 最高
|
|
724
|
+
low: number; // 最低
|
|
725
|
+
amount: number; // 成交额
|
|
726
|
+
turnoverRate: number | null; // 换手率%
|
|
727
|
+
pe: number | null; // 市盈率
|
|
728
|
+
amplitude: number | null; // 振幅%
|
|
729
|
+
totalMarketCap: number | null; // 总市值(亿)
|
|
730
|
+
pb: number | null; // 市净率
|
|
731
|
+
high52w: number | null; // 52周最高价
|
|
732
|
+
low52w: number | null; // 52周最低价
|
|
733
|
+
raw: string[]; // 原始字段数组
|
|
734
|
+
}
|
|
735
|
+
```
|
|
736
|
+
|
|
618
737
|
**示例**
|
|
619
738
|
|
|
620
739
|
```typescript
|
|
621
|
-
const quotes = await sdk.getUSQuotes(['
|
|
622
|
-
console.log(quotes[0].code);
|
|
740
|
+
const quotes = await sdk.getUSQuotes(['AAPL', 'MSFT']);
|
|
741
|
+
console.log(quotes[0].code); // AAPL.OQ
|
|
742
|
+
console.log(quotes[0].price); // 270.97
|
|
743
|
+
console.log(quotes[0].high52w); // 288.62
|
|
744
|
+
console.log(quotes[0].low52w); // 168.64
|
|
623
745
|
```
|
|
624
746
|
|
|
625
747
|
---
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var te=Object.defineProperty;var Qe=Object.getOwnPropertyDescriptor;var qe=Object.getOwnPropertyNames;var Ue=Object.prototype.hasOwnProperty;var ne=(t,e)=>{for(var n in e)te(t,n,{get:e[n],enumerable:!0})},De=(t,e,n,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of qe(e))!Ue.call(t,r)&&r!==n&&te(t,r,{get:()=>e[r],enumerable:!(s=Qe(e,r))||s.enumerable});return t};var Fe=t=>De(te({},"__esModule",{value:!0}),t);var Ge={};ne(Ge,{StockSDK:()=>z,addIndicators:()=>J,asyncPool:()=>D,calcATR:()=>G,calcBIAS:()=>W,calcBOLL:()=>_,calcCCI:()=>V,calcEMA:()=>O,calcKDJ:()=>E,calcMA:()=>v,calcMACD:()=>N,calcRSI:()=>$,calcSMA:()=>k,calcWMA:()=>X,calcWR:()=>B,chunkArray:()=>U,decodeGBK:()=>L,default:()=>Le,parseResponse:()=>Q,safeNumber:()=>m,safeNumberOrNull:()=>b});module.exports=Fe(Ge);function L(t){return new TextDecoder("gbk").decode(t)}function Q(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 b(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 de="https://qt.gtimg.cn",he="https://web.ifzq.gtimg.cn/appstock/app/minute/query",ge="https://assets.linkdiary.cn/shares/ashare-code.json",re="https://push2his.eastmoney.com/api/qt/stock/kline/get",ye="https://push2his.eastmoney.com/api/qt/stock/trends2/get",be="https://33.push2his.eastmoney.com/api/qt/stock/kline/get",Re="https://63.push2his.eastmoney.com/api/qt/stock/kline/get";var q=class{constructor(e={}){this.baseUrl=e.baseUrl??de,this.timeout=e.timeout??3e4}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=L(s);return Q(r)}};function U(t,e){let n=[];for(let s=0;s<t.length;s+=e)n.push(t.slice(s,s+e));return n}async function D(t,e){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 Y(t){return t.startsWith("sh")?"1":t.startsWith("sz")||t.startsWith("bj")?"0":t.startsWith("6")?"1":"0"}var K={};ne(K,{getAShareCodeList:()=>Ce,getAllQuotesByCodes:()=>ke,getFullQuotes:()=>Z,getFundFlow:()=>Me,getFundQuotes:()=>Se,getHKQuotes:()=>xe,getPanelLargeOrder:()=>Ke,getSimpleQuotes:()=>we,getTodayTimeline:()=>Ae,getUSQuotes:()=>Te,parseFullQuote:()=>oe,parseFundFlow:()=>ie,parseFundQuote:()=>ce,parseHKQuote:()=>ae,parsePanelLargeOrder:()=>le,parseSimpleQuote:()=>se,parseUSQuote:()=>ue});function oe(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:b(t[38]),pe:b(t[39]),amplitude:b(t[43]),circulatingMarketCap:b(t[44]),totalMarketCap:b(t[45]),pb:b(t[46]),limitUp:b(t[47]),limitDown:b(t[48]),volumeRatio:b(t[49]),avgPrice:b(t[51]),peStatic:b(t[52]),peDynamic:b(t[53]),high52w:b(t[67]),low52w:b(t[68]),circulatingShares:b(t[72]),totalShares:b(t[73]),raw:t}}function se(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:b(t[9]),marketType:t[10]??"",raw:t}}function ie(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 le(t){return{buyLargeRatio:m(t[0]),buySmallRatio:m(t[1]),sellLargeRatio:m(t[2]),sellSmallRatio:m(t[3]),raw:t}}function ae(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[36]),lotSize:b(t[40]),circulatingMarketCap:b(t[46]),totalMarketCap:b(t[47]),currency:t[t.length-3]??"",raw:t}}function ue(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:b(t[8]),raw:t}}function ce(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 Z(t,e){return!e||e.length===0?[]:(await t.getTencentQuote(e.join(","))).filter(s=>s.fields&&s.fields.length>0&&s.fields[0]!=="").map(s=>oe(s.fields))}async function we(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=>se(r.fields))}async function Me(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=>ie(r.fields))}async function Ke(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=>le(r.fields))}async function xe(t,e){if(!e||e.length===0)return[];let n=e.map(r=>`r_hk${r}`);return(await t.getTencentQuote(n.join(","))).filter(r=>r.fields&&r.fields.length>0&&r.fields[0]!=="").map(r=>ae(r.fields))}async function Te(t,e){if(!e||e.length===0)return[];let n=e.map(r=>`s_us${r}`);return(await t.getTencentQuote(n.join(","))).filter(r=>r.fields&&r.fields.length>0&&r.fields[0]!=="").map(r=>ue(r.fields))}async function Se(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=>ce(r.fields))}async function Ae(t,e){let n=t.getTimeout(),s=new AbortController,r=setTimeout(()=>s.abort(),n);try{let o=await fetch(`${he}?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||[],c=l.data?.date||"",u=!1;if(a.length>0){let f=a[0].split(" "),h=parseFloat(f[1])||0,g=parseInt(f[2],10)||0,y=parseFloat(f[3])||0;g>0&&h>0&&y/g>h*50&&(u=!0)}let d=a.map(f=>{let h=f.split(" "),g=h[0],y=`${g.slice(0,2)}:${g.slice(2,4)}`,R=parseInt(h[2],10)||0,w=parseFloat(h[3])||0,M=u?R*100:R,x=M>0?w/M:0;return{time:y,price:parseFloat(h[1])||0,volume:M,amount:w,avgPrice:Math.round(x*100)/100}});return{code:e,date:c,data:d}}finally{clearTimeout(r)}}async function Ce(t,e=!0){let n=t.getTimeout(),s=new AbortController,r=setTimeout(()=>s.abort(),n);try{let o=await fetch(ge,{signal:s.signal});if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);let i=await o.json();return e?i:i.map(l=>l.replace(/^(sh|sz|bj)/,""))}finally{clearTimeout(r)}}async function ke(t,e,n={}){let{batchSize:s=500,concurrency:r=7,onProgress:o}=n,i=U(e,s),l=i.length,a=0,c=i.map(d=>async()=>{let f=await Z(t,d);return a++,o&&o(a,l),f});return(await D(c,r)).flat()}var P={};ne(P,{getHKHistoryKline:()=>je,getHistoryKline:()=>Oe,getMinuteKline:()=>He,getUSHistoryKline:()=>Ie});async function Oe(t,e,n={}){let{period:s="daily",adjust:r="hfq",startDate:o="19700101",endDate:i="20500101"}=n,l=e.replace(/^(sh|sz|bj)/,""),a={daily:"101",weekly:"102",monthly:"103"},c={"":"0",qfq:"1",hfq:"2"},u=`${Y(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:c[r],secid:u,beg:o,end:i}),f=`${re}?${d.toString()}`,g=(await t.get(f,{responseType:"json"}))?.data?.klines;return!Array.isArray(g)||g.length===0?[]:g.map(y=>{let[R,w,M,x,T,S,A,C,H,j,I]=y.split(",");return{date:R,code:l,open:p(w),close:p(M),high:p(x),low:p(T),volume:p(S),amount:p(A),amplitude:p(C),changePercent:p(H),change:p(j),turnoverRate:p(I)}})}async function He(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,l=e.replace(/^(sh|sz|bj)/,""),a=`${Y(e)}.${l}`;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:a}),u=`${ye}?${c.toString()}`,f=(await t.get(u,{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(y=>{let[R,w,M,x,T,S,A,C]=y.split(",");return{time:R,open:p(w),close:p(M),high:p(x),low:p(T),volume:p(S),amount:p(A),avgPrice:p(C)}}).filter(y=>y.time>=h&&y.time<=g)}else{let c={"":"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:s,fqt:c[r],secid:a,beg:"0",end:"20500000"}),d=`${re}?${u.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),y=i.replace("T"," ").slice(0,16);return h.map(R=>{let[w,M,x,T,S,A,C,H,j,I,ee]=R.split(",");return{time:w,open:p(M),close:p(x),high:p(T),low:p(S),changePercent:p(j),change:p(I),volume:p(A),amount:p(C),amplitude:p(H),turnoverRate:p(ee)}}).filter(R=>R.time>=g&&R.time<=y)}}async function je(t,e,n={}){let{period:s="daily",adjust:r="hfq",startDate:o="19700101",endDate:i="20500101"}=n,l=e.replace(/^hk/i,"").padStart(5,"0"),a={daily:"101",weekly:"102",monthly:"103"},c={"":"0",qfq:"1",hfq:"2"},u=`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:c[r],secid:u,beg:o,end:i,lmt:"1000000"}),f=`${be}?${d.toString()}`,h=await t.get(f,{responseType:"json"}),g=h?.data?.klines,y=h?.data?.name||"";return!Array.isArray(g)||g.length===0?[]:g.map(R=>{let[w,M,x,T,S,A,C,H,j,I,ee]=R.split(",");return{date:w,code:l,name:y,open:p(M),close:p(x),high:p(T),low:p(S),volume:p(A),amount:p(C),amplitude:p(H),changePercent:p(j),change:p(I),turnoverRate:p(ee)}})}async function Ie(t,e,n={}){let{period:s="daily",adjust:r="hfq",startDate:o="19700101",endDate:i="20500101"}=n,l={daily:"101",weekly:"102",monthly:"103"},a={"":"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:l[s],fqt:a[r],secid:e,beg:o,end:i,lmt:"1000000"}),u=`${Re}?${c.toString()}`,d=await t.get(u,{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(y=>{let[R,w,M,x,T,S,A,C,H,j,I]=y.split(",");return{date:R,code:h,name:g,open:p(w),close:p(M),high:p(x),low:p(T),volume:p(S),amount:p(A),amplitude:p(C),changePercent:p(H),change:p(j),turnoverRate:p(I)}})}function F(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function k(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?F(r/e):null)}return n}function O(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,c=0;for(let u=i-e+1;u<=i;u++)t[u]!==null&&(a+=t[u],c++);c===e&&(r=a/e,o=!0),n.push(r!==null?F(r):null);continue}let l=t[i];l===null?n.push(r!==null?F(r):null):(r=s*l+(1-s)*r,n.push(F(r)))}return n}function X(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 c=t[o-e+1+a];if(c===null){l=!1;break}i+=c*s[a]}n.push(l?F(i/r):null)}return n}function v(t,e={}){let{periods:n=[5,10,20,30,60,120,250],type:s="sma"}=e,r=s==="ema"?O:s==="wma"?X:k,o={};for(let i of n)o[`ma${i}`]=r(t,i);return t.map((i,l)=>{let a={};for(let c of n)a[`ma${c}`]=o[`ma${c}`][l];return a})}function Pe(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function N(t,e={}){let{short:n=12,long:s=26,signal:r=9}=e,o=O(t,n),i=O(t,s),l=t.map((c,u)=>o[u]===null||i[u]===null?null:o[u]-i[u]),a=O(l,r);return t.map((c,u)=>({dif:l[u]!==null?Pe(l[u]):null,dea:a[u],macd:l[u]!==null&&a[u]!==null?Pe((l[u]-a[u])*2):null}))}function me(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function Ee(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 _(t,e={}){let{period:n=20,stdDev:s=2}=e,r=k(t,n),o=Ee(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],c=r[l]-s*o[l],u=r[l]!==0?me((a-c)/r[l]*100):null;return{mid:r[l],upper:me(a),lower:me(c),bandwidth:u}})}function pe(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function E(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 c=-1/0,u=1/0,d=!0;for(let y=a-n+1;y<=a;y++){if(t[y].high===null||t[y].low===null){d=!1;break}c=Math.max(c,t[y].high),u=Math.min(u,t[y].low)}let f=t[a].close;if(!d||f===null||c===u){o.push({k:null,d:null,j:null});continue}let h=(f-u)/(c-u)*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:pe(i),d:pe(l),j:pe(g)})}return o}function $e(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function $(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 c=0;c<t.length;c++){if(c<o){i.push(null),s[c]!==null&&(s[c]>0?l+=s[c]:a+=Math.abs(s[c]));continue}if(c===o)l=l/o,a=a/o;else{let u=s[c]??0,d=u>0?u:0,f=u<0?Math.abs(u):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 u=l/a;i.push($e(100-100/(1+u)))}}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 Be(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function B(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,c=!0;for(let f=i-r+1;f<=i;f++){if(t[f].high===null||t[f].low===null){c=!1;break}l=Math.max(l,t[f].high),a=Math.min(a,t[f].low)}let u=t[i].close;if(!c||u===null||l===a){o.push(null);continue}let d=(l-u)/(l-a)*100;o.push(Be(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 We(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function W(t,e={}){let{periods:n=[6,12,24]}=e,s={};for(let r of n){let o=k(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(We(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 Ve(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function V(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,c=0;for(let d=o-n+1;d<=o;d++)c+=Math.abs(r[d]-a);let u=c/n;if(u===0)s.push({cci:0});else{let d=(r[o]-a)/(.015*u);s.push({cci:Ve(d)})}}return s}function fe(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function G(t,e={}){let{period:n=14}=e,s=[],r=[];for(let i=0;i<t.length;i++){let{high:l,low:a,close:c}=t[i];if(l===null||a===null||c===null){r.push(null);continue}if(i===0)r.push(l-a);else{let u=t[i-1].close;if(u===null)r.push(l-a);else{let d=l-a,f=Math.abs(l-u),h=Math.abs(a-u);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?fe(r[i]):null,atr:null});continue}if(i===n-1){let l=0,a=0;for(let c=0;c<n;c++)r[c]!==null&&(l+=r[c],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?fe(r[i]):null,atr:o!==null?fe(o):null})}return s}function J(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?v(n,typeof e.ma=="object"?e.ma:{}):null,o=e.macd?N(n,typeof e.macd=="object"?e.macd:{}):null,i=e.boll?_(n,typeof e.boll=="object"?e.boll:{}):null,l=e.kdj?E(s,typeof e.kdj=="object"?e.kdj:{}):null,a=e.rsi?$(n,typeof e.rsi=="object"?e.rsi:{}):null,c=e.wr?B(s,typeof e.wr=="object"?e.wr:{}):null,u=e.bias?W(n,typeof e.bias=="object"?e.bias:{}):null,d=e.cci?V(s,typeof e.cci=="object"?e.cci:{}):null,f=e.atr?G(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]},...c&&{wr:c[g]},...u&&{bias:u[g]},...d&&{cci:d[g]},...f&&{atr:f[g]}}))}var z=class{constructor(e={}){this.client=new q(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)}getHistoryKline(e,n){return P.getHistoryKline(this.client,e,n)}getMinuteKline(e,n){return P.getMinuteKline(this.client,e,n)}getHKHistoryKline(e,n){return P.getHKHistoryKline(this.client,e,n)}getUSHistoryKline(e,n){return P.getUSHistoryKline(this.client,e,n)}getAShareCodeList(e=!0){return K.getAShareCodeList(this.client,e)}async getAllAShareQuotes(e={}){let n=await this.getAShareCodeList();return this.getAllQuotesByCodes(n,e)}getAllQuotesByCodes(e,n={}){return K.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),c={A:1.5,HK:1.46,US:1.45}[i],u=s?this.calcActualStartDate(s,l,c):void 0,d={period:n.period,adjust:n.adjust,startDate:u,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=J(f,o);if(s){let g=this.dateToTimestamp(s),y=r?this.dateToTimestamp(r):1/0;return h.filter(R=>{let w=this.dateToTimestamp(R.date);return w>=g&&w<=y})}return h}},Le=z;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 ct=Object.defineProperty;var Gt=Object.getOwnPropertyDescriptor;var Jt=Object.getOwnPropertyNames;var Zt=Object.prototype.hasOwnProperty;var mt=(t,e)=>{for(var n in e)ct(t,n,{get:e[n],enumerable:!0})},Yt=(t,e,n,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Jt(e))!Zt.call(t,r)&&r!==n&&ct(t,r,{get:()=>e[r],enumerable:!(s=Gt(e,r))||s.enumerable});return t};var Xt=t=>Yt(ct({},"__esModule",{value:!0}),t);var ae={};mt(ae,{StockSDK:()=>nt,addIndicators:()=>et,asyncPool:()=>_,calcATR:()=>tt,calcBIAS:()=>Y,calcBOLL:()=>V,calcCCI:()=>X,calcEMA:()=>I,calcKDJ:()=>G,calcMA:()=>W,calcMACD:()=>z,calcRSI:()=>J,calcSMA:()=>H,calcWMA:()=>at,calcWR:()=>Z,chunkArray:()=>j,decodeGBK:()=>E,default:()=>Vt,parseResponse:()=>D,safeNumber:()=>m,safeNumberOrNull:()=>y});module.exports=Xt(ae);function E(t){return new TextDecoder("gbk").decode(t)}function D(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 pt="https://qt.gtimg.cn",ft="https://web.ifzq.gtimg.cn/appstock/app/minute/query",dt="https://assets.linkdiary.cn/shares/zh_a_list.json",ht="https://assets.linkdiary.cn/shares/us_list.json",gt="https://assets.linkdiary.cn/shares/hk_list.json";var rt="https://push2his.eastmoney.com/api/qt/stock/kline/get",yt="https://push2his.eastmoney.com/api/qt/stock/trends2/get",bt="https://33.push2his.eastmoney.com/api/qt/stock/kline/get",Rt="https://63.push2his.eastmoney.com/api/qt/stock/kline/get",St=3e4,N=500,F=500,v=7;var B=class{constructor(e={}){this.baseUrl=e.baseUrl??pt,this.timeout=e.timeout??St}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=E(s);return D(r)}};var te=new Set(["daily","weekly","monthly"]),ee=new Set(["1","5","15","30","60"]),ne=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 Q(t){if(!te.has(t))throw new RangeError("period must be one of: daily, weekly, monthly")}function wt(t){if(!ee.has(t))throw new RangeError("period must be one of: 1, 5, 15, 30, 60")}function k(t){if(!ne.has(t))throw new RangeError("adjust must be one of: '', 'qfq', 'hfq'")}function j(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 _(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 ot(t){return t.startsWith("sh")?"1":t.startsWith("sz")||t.startsWith("bj")?"0":t.startsWith("6")?"1":"0"}var S={};mt(S,{getAShareCodeList:()=>_t,getAllHKQuotesByCodes:()=>Nt,getAllQuotesByCodes:()=>Dt,getAllUSQuotesByCodes:()=>Ft,getFullQuotes:()=>st,getFundFlow:()=>Pt,getFundQuotes:()=>Qt,getHKCodeList:()=>Et,getHKQuotes:()=>it,getPanelLargeOrder:()=>Ot,getSimpleQuotes:()=>Ut,getTodayTimeline:()=>jt,getUSCodeList:()=>qt,getUSQuotes:()=>lt,parseFullQuote:()=>Tt,parseFundFlow:()=>Ct,parseFundQuote:()=>Lt,parseHKQuote:()=>Mt,parsePanelLargeOrder:()=>Kt,parseSimpleQuote:()=>At,parseUSQuote:()=>xt});function Tt(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 At(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 Ct(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 Kt(t){return{buyLargeRatio:m(t[0]),buySmallRatio:m(t[1]),sellLargeRatio:m(t[2]),sellSmallRatio:m(t[3]),raw:t}}function Mt(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 xt(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 Lt(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 st(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=>Tt(s.fields))}async function Ut(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=>At(r.fields))}async function Pt(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=>Ct(r.fields))}async function Ot(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=>Kt(r.fields))}async function it(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=>Mt(r.fields))}async function lt(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=>xt(r.fields))}async function Qt(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=>Lt(r.fields))}async function jt(t,e){let n=t.getTimeout(),s=new AbortController,r=setTimeout(()=>s.abort(),n);try{let o=await fetch(`${ft}?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 _t(t,e=!0){let n=t.getTimeout(),s=new AbortController,r=setTimeout(()=>s.abort(),n);try{let o=await fetch(dt,{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 qt(t,e=!0){let n=t.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 l=(await o.json()).list||[];return e?l:l.map(a=>a.replace(/^\d{3}\./,""))}finally{clearTimeout(r)}}async function Et(t){let e=t.getTimeout(),n=new AbortController,s=setTimeout(()=>n.abort(),e);try{let r=await fetch(gt,{signal:n.signal});if(!r.ok)throw new Error(`HTTP error! status: ${r.status}`);return(await r.json()).list||[]}finally{clearTimeout(s)}}async function Dt(t,e,n={}){let{batchSize:s=N,concurrency:r=v,onProgress:o}=n;C(s,"batchSize"),C(r,"concurrency");let i=Math.min(s,F),l=j(e,i),a=l.length,u=0,c=l.map(f=>async()=>{let h=await st(t,f);return u++,o&&o(u,a),h});return(await _(c,r)).flat()}async function Nt(t,e,n={}){let{batchSize:s=N,concurrency:r=v,onProgress:o}=n;C(s,"batchSize"),C(r,"concurrency");let i=Math.min(s,F),l=j(e,i),a=l.length,u=0,c=l.map(f=>async()=>{let h=await it(t,f);return u++,o&&o(u,a),h});return(await _(c,r)).flat()}async function Ft(t,e,n={}){let{batchSize:s=N,concurrency:r=v,onProgress:o}=n;C(s,"batchSize"),C(r,"concurrency");let i=Math.min(s,F),l=j(e,i),a=l.length,u=0,c=l.map(f=>async()=>{let h=await lt(t,f);return u++,o&&o(u,a),h});return(await _(c,r)).flat()}var q={};mt(q,{getHKHistoryKline:()=>$t,getHistoryKline:()=>vt,getMinuteKline:()=>Bt,getUSHistoryKline:()=>Wt});async function vt(t,e,n={}){let{period:s="daily",adjust:r="hfq",startDate:o="19700101",endDate:i="20500101"}=n;Q(s),k(r);let l=e.replace(/^(sh|sz|bj)/,""),a={daily:"101",weekly:"102",monthly:"103"},u={"":"0",qfq:"1",hfq:"2"},c=`${ot(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=`${rt}?${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,U,P,O]=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(U),change:p(P),turnoverRate:p(O)}})}async function Bt(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;wt(s),k(r);let l=e.replace(/^(sh|sz|bj)/,""),a=`${ot(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=`${yt}?${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=`${rt}?${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,U,P,O,ut]=R.split(",");return{time:w,open:p(T),close:p(A),high:p(K),low:p(M),changePercent:p(P),change:p(O),volume:p(x),amount:p(L),amplitude:p(U),turnoverRate:p(ut)}}).filter(R=>R.time>=g&&R.time<=b)}}async function $t(t,e,n={}){let{period:s="daily",adjust:r="hfq",startDate:o="19700101",endDate:i="20500101"}=n;Q(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=`${bt}?${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,U,P,O,ut]=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(U),changePercent:p(P),change:p(O),turnoverRate:p(ut)}})}async function Wt(t,e,n={}){let{period:s="daily",adjust:r="hfq",startDate:o="19700101",endDate:i="20500101"}=n;Q(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=`${Rt}?${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,U,P,O]=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(U),change:p(P),turnoverRate:p(O)}})}function $(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function H(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?$(r/e):null)}return n}function I(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?$(r):null);continue}let l=t[i];l===null?n.push(r!==null?$(r):null):(r=s*l+(1-s)*r,n.push($(r)))}return n}function at(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?$(i/r):null)}return n}function W(t,e={}){let{periods:n=[5,10,20,30,60,120,250],type:s="sma"}=e,r=s==="ema"?I:s==="wma"?at:H,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 zt(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function z(t,e={}){let{short:n=12,long:s=26,signal:r=9}=e,o=I(t,n),i=I(t,s),l=t.map((u,c)=>o[c]===null||i[c]===null?null:o[c]-i[c]),a=I(l,r);return t.map((u,c)=>({dif:l[c]!==null?zt(l[c]):null,dea:a[c],macd:l[c]!==null&&a[c]!==null?zt((l[c]-a[c])*2):null}))}function kt(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function re(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 V(t,e={}){let{period:n=20,stdDev:s=2}=e,r=H(t,n),o=re(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?kt((a-u)/r[l]*100):null;return{mid:r[l],upper:kt(a),lower:kt(u),bandwidth:c}})}function Ht(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function G(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:Ht(i),d:Ht(l),j:Ht(g)})}return o}function oe(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function J(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(oe(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 se(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function Z(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(se(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 ie(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function Y(t,e={}){let{periods:n=[6,12,24]}=e,s={};for(let r of n){let o=H(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(ie(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 le(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function X(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:le(d)})}}return s}function It(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function tt(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?It(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?It(r[i]):null,atr:o!==null?It(o):null})}return s}function et(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?W(n,typeof e.ma=="object"?e.ma:{}):null,o=e.macd?z(n,typeof e.macd=="object"?e.macd:{}):null,i=e.boll?V(n,typeof e.boll=="object"?e.boll:{}):null,l=e.kdj?G(s,typeof e.kdj=="object"?e.kdj:{}):null,a=e.rsi?J(n,typeof e.rsi=="object"?e.rsi:{}):null,u=e.wr?Z(s,typeof e.wr=="object"?e.wr:{}):null,c=e.bias?Y(n,typeof e.bias=="object"?e.bias:{}):null,d=e.cci?X(s,typeof e.cci=="object"?e.cci:{}):null,f=e.atr?tt(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 nt=class{constructor(e={}){this.client=new B(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 q.getHistoryKline(this.client,e,n)}getMinuteKline(e,n){return q.getMinuteKline(this.client,e,n)}getHKHistoryKline(e,n){return q.getHKHistoryKline(this.client,e,n)}getUSHistoryKline(e,n){return q.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=et(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}},Vt=nt;0&&(module.exports={StockSDK,addIndicators,asyncPool,calcATR,calcBIAS,calcBOLL,calcCCI,calcEMA,calcKDJ,calcMA,calcMACD,calcRSI,calcSMA,calcWMA,calcWR,chunkArray,decodeGBK,parseResponse,safeNumber,safeNumberOrNull});
|
package/dist/index.d.cts
CHANGED
|
@@ -28,9 +28,6 @@ declare function safeNumber(val: string | undefined): number;
|
|
|
28
28
|
*/
|
|
29
29
|
declare function safeNumberOrNull(val: string | undefined): number | null;
|
|
30
30
|
|
|
31
|
-
/**
|
|
32
|
-
* 工具函数
|
|
33
|
-
*/
|
|
34
31
|
/**
|
|
35
32
|
* 将数组分割成指定大小的块
|
|
36
33
|
*/
|
|
@@ -206,18 +203,50 @@ interface HKQuote {
|
|
|
206
203
|
raw: string[];
|
|
207
204
|
}
|
|
208
205
|
/**
|
|
209
|
-
*
|
|
206
|
+
* 美股行情
|
|
210
207
|
*/
|
|
211
208
|
interface USQuote {
|
|
209
|
+
/** 市场标识 */
|
|
212
210
|
marketId: string;
|
|
211
|
+
/** 名称 */
|
|
213
212
|
name: string;
|
|
213
|
+
/** 股票代码 */
|
|
214
214
|
code: string;
|
|
215
|
+
/** 最新价 */
|
|
215
216
|
price: number;
|
|
217
|
+
/** 昨收 */
|
|
218
|
+
prevClose: number;
|
|
219
|
+
/** 今开 */
|
|
220
|
+
open: number;
|
|
221
|
+
/** 成交量 */
|
|
222
|
+
volume: number;
|
|
223
|
+
/** 时间 */
|
|
224
|
+
time: string;
|
|
225
|
+
/** 涨跌额 */
|
|
216
226
|
change: number;
|
|
227
|
+
/** 涨跌幅% */
|
|
217
228
|
changePercent: number;
|
|
218
|
-
|
|
229
|
+
/** 最高 */
|
|
230
|
+
high: number;
|
|
231
|
+
/** 最低 */
|
|
232
|
+
low: number;
|
|
233
|
+
/** 成交额 */
|
|
219
234
|
amount: number;
|
|
220
|
-
|
|
235
|
+
/** 换手率% */
|
|
236
|
+
turnoverRate: number | null;
|
|
237
|
+
/** 市盈率 */
|
|
238
|
+
pe: number | null;
|
|
239
|
+
/** 振幅% */
|
|
240
|
+
amplitude: number | null;
|
|
241
|
+
/** 总市值(亿) */
|
|
242
|
+
totalMarketCap: number | null;
|
|
243
|
+
/** 市净率 */
|
|
244
|
+
pb: number | null;
|
|
245
|
+
/** 52周最高价 */
|
|
246
|
+
high52w: number | null;
|
|
247
|
+
/** 52周最低价 */
|
|
248
|
+
low52w: number | null;
|
|
249
|
+
/** 原始字段数组 */
|
|
221
250
|
raw: string[];
|
|
222
251
|
}
|
|
223
252
|
/**
|
|
@@ -726,10 +755,27 @@ declare class StockSDK {
|
|
|
726
755
|
* @param includeExchange 是否包含交易所前缀(如 sh、sz、bj),默认 true
|
|
727
756
|
*/
|
|
728
757
|
getAShareCodeList(includeExchange?: boolean): Promise<string[]>;
|
|
758
|
+
/**
|
|
759
|
+
* 从远程获取美股代码列表
|
|
760
|
+
* @param includeMarket 是否包含市场前缀(如 105.、106.),默认 true
|
|
761
|
+
*/
|
|
762
|
+
getUSCodeList(includeMarket?: boolean): Promise<string[]>;
|
|
763
|
+
/**
|
|
764
|
+
* 从远程获取港股代码列表
|
|
765
|
+
*/
|
|
766
|
+
getHKCodeList(): Promise<string[]>;
|
|
729
767
|
/**
|
|
730
768
|
* 获取全部 A 股实时行情
|
|
731
769
|
*/
|
|
732
770
|
getAllAShareQuotes(options?: GetAllAShareQuotesOptions): Promise<FullQuote[]>;
|
|
771
|
+
/**
|
|
772
|
+
* 获取全部港股实时行情
|
|
773
|
+
*/
|
|
774
|
+
getAllHKShareQuotes(options?: GetAllAShareQuotesOptions): Promise<HKQuote[]>;
|
|
775
|
+
/**
|
|
776
|
+
* 获取全部美股实时行情
|
|
777
|
+
*/
|
|
778
|
+
getAllUSShareQuotes(options?: GetAllAShareQuotesOptions): Promise<USQuote[]>;
|
|
733
779
|
/**
|
|
734
780
|
* 获取全部股票实时行情(使用自定义股票代码列表)
|
|
735
781
|
*/
|
package/dist/index.d.ts
CHANGED
|
@@ -28,9 +28,6 @@ declare function safeNumber(val: string | undefined): number;
|
|
|
28
28
|
*/
|
|
29
29
|
declare function safeNumberOrNull(val: string | undefined): number | null;
|
|
30
30
|
|
|
31
|
-
/**
|
|
32
|
-
* 工具函数
|
|
33
|
-
*/
|
|
34
31
|
/**
|
|
35
32
|
* 将数组分割成指定大小的块
|
|
36
33
|
*/
|
|
@@ -206,18 +203,50 @@ interface HKQuote {
|
|
|
206
203
|
raw: string[];
|
|
207
204
|
}
|
|
208
205
|
/**
|
|
209
|
-
*
|
|
206
|
+
* 美股行情
|
|
210
207
|
*/
|
|
211
208
|
interface USQuote {
|
|
209
|
+
/** 市场标识 */
|
|
212
210
|
marketId: string;
|
|
211
|
+
/** 名称 */
|
|
213
212
|
name: string;
|
|
213
|
+
/** 股票代码 */
|
|
214
214
|
code: string;
|
|
215
|
+
/** 最新价 */
|
|
215
216
|
price: number;
|
|
217
|
+
/** 昨收 */
|
|
218
|
+
prevClose: number;
|
|
219
|
+
/** 今开 */
|
|
220
|
+
open: number;
|
|
221
|
+
/** 成交量 */
|
|
222
|
+
volume: number;
|
|
223
|
+
/** 时间 */
|
|
224
|
+
time: string;
|
|
225
|
+
/** 涨跌额 */
|
|
216
226
|
change: number;
|
|
227
|
+
/** 涨跌幅% */
|
|
217
228
|
changePercent: number;
|
|
218
|
-
|
|
229
|
+
/** 最高 */
|
|
230
|
+
high: number;
|
|
231
|
+
/** 最低 */
|
|
232
|
+
low: number;
|
|
233
|
+
/** 成交额 */
|
|
219
234
|
amount: number;
|
|
220
|
-
|
|
235
|
+
/** 换手率% */
|
|
236
|
+
turnoverRate: number | null;
|
|
237
|
+
/** 市盈率 */
|
|
238
|
+
pe: number | null;
|
|
239
|
+
/** 振幅% */
|
|
240
|
+
amplitude: number | null;
|
|
241
|
+
/** 总市值(亿) */
|
|
242
|
+
totalMarketCap: number | null;
|
|
243
|
+
/** 市净率 */
|
|
244
|
+
pb: number | null;
|
|
245
|
+
/** 52周最高价 */
|
|
246
|
+
high52w: number | null;
|
|
247
|
+
/** 52周最低价 */
|
|
248
|
+
low52w: number | null;
|
|
249
|
+
/** 原始字段数组 */
|
|
221
250
|
raw: string[];
|
|
222
251
|
}
|
|
223
252
|
/**
|
|
@@ -726,10 +755,27 @@ declare class StockSDK {
|
|
|
726
755
|
* @param includeExchange 是否包含交易所前缀(如 sh、sz、bj),默认 true
|
|
727
756
|
*/
|
|
728
757
|
getAShareCodeList(includeExchange?: boolean): Promise<string[]>;
|
|
758
|
+
/**
|
|
759
|
+
* 从远程获取美股代码列表
|
|
760
|
+
* @param includeMarket 是否包含市场前缀(如 105.、106.),默认 true
|
|
761
|
+
*/
|
|
762
|
+
getUSCodeList(includeMarket?: boolean): Promise<string[]>;
|
|
763
|
+
/**
|
|
764
|
+
* 从远程获取港股代码列表
|
|
765
|
+
*/
|
|
766
|
+
getHKCodeList(): Promise<string[]>;
|
|
729
767
|
/**
|
|
730
768
|
* 获取全部 A 股实时行情
|
|
731
769
|
*/
|
|
732
770
|
getAllAShareQuotes(options?: GetAllAShareQuotesOptions): Promise<FullQuote[]>;
|
|
771
|
+
/**
|
|
772
|
+
* 获取全部港股实时行情
|
|
773
|
+
*/
|
|
774
|
+
getAllHKShareQuotes(options?: GetAllAShareQuotesOptions): Promise<HKQuote[]>;
|
|
775
|
+
/**
|
|
776
|
+
* 获取全部美股实时行情
|
|
777
|
+
*/
|
|
778
|
+
getAllUSShareQuotes(options?: GetAllAShareQuotesOptions): Promise<USQuote[]>;
|
|
733
779
|
/**
|
|
734
780
|
* 获取全部股票实时行情(使用自定义股票代码列表)
|
|
735
781
|
*/
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var Pe=Object.defineProperty;var pe=(t,e)=>{for(var n in e)Pe(t,n,{get:e[n],enumerable:!0})};function q(t){return new TextDecoder("gbk").decode(t)}function U(t){let e=t.split(";").map(s=>s.trim()).filter(Boolean),n=[];for(let s of e){let o=s.indexOf("=");if(o<0)continue;let r=s.slice(0,o).trim();r.startsWith("v_")&&(r=r.slice(2));let i=s.slice(o+1).trim();i.startsWith('"')&&i.endsWith('"')&&(i=i.slice(1,-1));let l=i.split("~");n.push({key:r,fields:l})}return n}function m(t){if(!t||t==="")return 0;let e=parseFloat(t);return Number.isNaN(e)?0:e}function b(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 fe="https://qt.gtimg.cn",de="https://web.ifzq.gtimg.cn/appstock/app/minute/query",he="https://assets.linkdiary.cn/shares/ashare-code.json",ee="https://push2his.eastmoney.com/api/qt/stock/kline/get",ge="https://push2his.eastmoney.com/api/qt/stock/trends2/get",ye="https://33.push2his.eastmoney.com/api/qt/stock/kline/get",be="https://63.push2his.eastmoney.com/api/qt/stock/kline/get";var L=class{constructor(e={}){this.baseUrl=e.baseUrl??fe,this.timeout=e.timeout??3e4}getTimeout(){return this.timeout}async get(e,n={}){let s=new AbortController,o=setTimeout(()=>s.abort(),this.timeout);try{let r=await fetch(e,{signal:s.signal});if(!r.ok)throw new Error(`HTTP error! status: ${r.status}`);switch(n.responseType){case"json":return await r.json();case"arraybuffer":return await r.arrayBuffer();default:return await r.text()}}finally{clearTimeout(o)}}async getTencentQuote(e){let n=`${this.baseUrl}/?q=${encodeURIComponent(e)}`,s=await this.get(n,{responseType:"arraybuffer"}),o=q(s);return U(o)}};function D(t,e){let n=[];for(let s=0;s<t.length;s+=e)n.push(t.slice(s,s+e));return n}async function F(t,e){let n=[],s=[];for(let o of t){let r=Promise.resolve().then(()=>o()).then(i=>{n.push(i)});if(s.push(r),s.length>=e){await Promise.race(s);for(let i=s.length-1;i>=0;i--)await Promise.race([s[i].then(()=>"fulfilled"),Promise.resolve("pending")])==="fulfilled"&&s.splice(i,1)}}return await Promise.all(s),n}function v(t){return t.startsWith("sh")?"1":t.startsWith("sz")||t.startsWith("bj")?"0":t.startsWith("6")?"1":"0"}var K={};pe(K,{getAShareCodeList:()=>Ae,getAllQuotesByCodes:()=>Ce,getFullQuotes:()=>N,getFundFlow:()=>we,getFundQuotes:()=>Te,getHKQuotes:()=>Ke,getPanelLargeOrder:()=>Me,getSimpleQuotes:()=>Re,getTodayTimeline:()=>Se,getUSQuotes:()=>xe,parseFullQuote:()=>te,parseFundFlow:()=>re,parseFundQuote:()=>le,parseHKQuote:()=>se,parsePanelLargeOrder:()=>oe,parseSimpleQuote:()=>ne,parseUSQuote:()=>ie});function te(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:b(t[38]),pe:b(t[39]),amplitude:b(t[43]),circulatingMarketCap:b(t[44]),totalMarketCap:b(t[45]),pb:b(t[46]),limitUp:b(t[47]),limitDown:b(t[48]),volumeRatio:b(t[49]),avgPrice:b(t[51]),peStatic:b(t[52]),peDynamic:b(t[53]),high52w:b(t[67]),low52w:b(t[68]),circulatingShares:b(t[72]),totalShares:b(t[73]),raw:t}}function ne(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:b(t[9]),marketType:t[10]??"",raw:t}}function re(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 oe(t){return{buyLargeRatio:m(t[0]),buySmallRatio:m(t[1]),sellLargeRatio:m(t[2]),sellSmallRatio:m(t[3]),raw:t}}function se(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[36]),lotSize:b(t[40]),circulatingMarketCap:b(t[46]),totalMarketCap:b(t[47]),currency:t[t.length-3]??"",raw:t}}function ie(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:b(t[8]),raw:t}}function le(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 N(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=>te(s.fields))}async function Re(t,e){if(!e||e.length===0)return[];let n=e.map(o=>`s_${o}`);return(await t.getTencentQuote(n.join(","))).filter(o=>o.fields&&o.fields.length>0&&o.fields[0]!=="").map(o=>ne(o.fields))}async function we(t,e){if(!e||e.length===0)return[];let n=e.map(o=>`ff_${o}`);return(await t.getTencentQuote(n.join(","))).filter(o=>o.fields&&o.fields.length>0&&o.fields[0]!=="").map(o=>re(o.fields))}async function Me(t,e){if(!e||e.length===0)return[];let n=e.map(o=>`s_pk${o}`);return(await t.getTencentQuote(n.join(","))).filter(o=>o.fields&&o.fields.length>0&&o.fields[0]!=="").map(o=>oe(o.fields))}async function Ke(t,e){if(!e||e.length===0)return[];let n=e.map(o=>`r_hk${o}`);return(await t.getTencentQuote(n.join(","))).filter(o=>o.fields&&o.fields.length>0&&o.fields[0]!=="").map(o=>se(o.fields))}async function xe(t,e){if(!e||e.length===0)return[];let n=e.map(o=>`s_us${o}`);return(await t.getTencentQuote(n.join(","))).filter(o=>o.fields&&o.fields.length>0&&o.fields[0]!=="").map(o=>ie(o.fields))}async function Te(t,e){if(!e||e.length===0)return[];let n=e.map(o=>`jj${o}`);return(await t.getTencentQuote(n.join(","))).filter(o=>o.fields&&o.fields.length>0&&o.fields[0]!=="").map(o=>le(o.fields))}async function Se(t,e){let n=t.getTimeout(),s=new AbortController,o=setTimeout(()=>s.abort(),n);try{let r=await fetch(`${de}?code=${e}`,{signal:s.signal});if(!r.ok)throw new Error(`HTTP error! status: ${r.status}`);let i=await r.json();if(i.code!==0)throw new Error(i.msg||"API error");let l=i.data?.[e];if(!l)return{code:e,date:"",data:[]};let a=l.data?.data||[],c=l.data?.date||"",u=!1;if(a.length>0){let f=a[0].split(" "),h=parseFloat(f[1])||0,g=parseInt(f[2],10)||0,y=parseFloat(f[3])||0;g>0&&h>0&&y/g>h*50&&(u=!0)}let d=a.map(f=>{let h=f.split(" "),g=h[0],y=`${g.slice(0,2)}:${g.slice(2,4)}`,R=parseInt(h[2],10)||0,w=parseFloat(h[3])||0,M=u?R*100:R,x=M>0?w/M:0;return{time:y,price:parseFloat(h[1])||0,volume:M,amount:w,avgPrice:Math.round(x*100)/100}});return{code:e,date:c,data:d}}finally{clearTimeout(o)}}async function Ae(t,e=!0){let n=t.getTimeout(),s=new AbortController,o=setTimeout(()=>s.abort(),n);try{let r=await fetch(he,{signal:s.signal});if(!r.ok)throw new Error(`HTTP error! status: ${r.status}`);let i=await r.json();return e?i:i.map(l=>l.replace(/^(sh|sz|bj)/,""))}finally{clearTimeout(o)}}async function Ce(t,e,n={}){let{batchSize:s=500,concurrency:o=7,onProgress:r}=n,i=D(e,s),l=i.length,a=0,c=i.map(d=>async()=>{let f=await N(t,d);return a++,r&&r(a,l),f});return(await F(c,o)).flat()}var j={};pe(j,{getHKHistoryKline:()=>He,getHistoryKline:()=>ke,getMinuteKline:()=>Oe,getUSHistoryKline:()=>je});async function ke(t,e,n={}){let{period:s="daily",adjust:o="hfq",startDate:r="19700101",endDate:i="20500101"}=n,l=e.replace(/^(sh|sz|bj)/,""),a={daily:"101",weekly:"102",monthly:"103"},c={"":"0",qfq:"1",hfq:"2"},u=`${v(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:c[o],secid:u,beg:r,end:i}),f=`${ee}?${d.toString()}`,g=(await t.get(f,{responseType:"json"}))?.data?.klines;return!Array.isArray(g)||g.length===0?[]:g.map(y=>{let[R,w,M,x,T,S,A,C,k,O,H]=y.split(",");return{date:R,code:l,open:p(w),close:p(M),high:p(x),low:p(T),volume:p(S),amount:p(A),amplitude:p(C),changePercent:p(k),change:p(O),turnoverRate:p(H)}})}async function Oe(t,e,n={}){let{period:s="1",adjust:o="hfq",startDate:r="1979-09-01 09:32:00",endDate:i="2222-01-01 09:32:00"}=n,l=e.replace(/^(sh|sz|bj)/,""),a=`${v(e)}.${l}`;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:a}),u=`${ge}?${c.toString()}`,f=(await t.get(u,{responseType:"json"}))?.data?.trends;if(!Array.isArray(f)||f.length===0)return[];let h=r.replace("T"," ").slice(0,16),g=i.replace("T"," ").slice(0,16);return f.map(y=>{let[R,w,M,x,T,S,A,C]=y.split(",");return{time:R,open:p(w),close:p(M),high:p(x),low:p(T),volume:p(S),amount:p(A),avgPrice:p(C)}}).filter(y=>y.time>=h&&y.time<=g)}else{let c={"":"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:s,fqt:c[o],secid:a,beg:"0",end:"20500000"}),d=`${ee}?${u.toString()}`,h=(await t.get(d,{responseType:"json"}))?.data?.klines;if(!Array.isArray(h)||h.length===0)return[];let g=r.replace("T"," ").slice(0,16),y=i.replace("T"," ").slice(0,16);return h.map(R=>{let[w,M,x,T,S,A,C,k,O,H,X]=R.split(",");return{time:w,open:p(M),close:p(x),high:p(T),low:p(S),changePercent:p(O),change:p(H),volume:p(A),amount:p(C),amplitude:p(k),turnoverRate:p(X)}}).filter(R=>R.time>=g&&R.time<=y)}}async function He(t,e,n={}){let{period:s="daily",adjust:o="hfq",startDate:r="19700101",endDate:i="20500101"}=n,l=e.replace(/^hk/i,"").padStart(5,"0"),a={daily:"101",weekly:"102",monthly:"103"},c={"":"0",qfq:"1",hfq:"2"},u=`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:c[o],secid:u,beg:r,end:i,lmt:"1000000"}),f=`${ye}?${d.toString()}`,h=await t.get(f,{responseType:"json"}),g=h?.data?.klines,y=h?.data?.name||"";return!Array.isArray(g)||g.length===0?[]:g.map(R=>{let[w,M,x,T,S,A,C,k,O,H,X]=R.split(",");return{date:w,code:l,name:y,open:p(M),close:p(x),high:p(T),low:p(S),volume:p(A),amount:p(C),amplitude:p(k),changePercent:p(O),change:p(H),turnoverRate:p(X)}})}async function je(t,e,n={}){let{period:s="daily",adjust:o="hfq",startDate:r="19700101",endDate:i="20500101"}=n,l={daily:"101",weekly:"102",monthly:"103"},a={"":"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:l[s],fqt:a[o],secid:e,beg:r,end:i,lmt:"1000000"}),u=`${be}?${c.toString()}`,d=await t.get(u,{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(y=>{let[R,w,M,x,T,S,A,C,k,O,H]=y.split(",");return{date:R,code:h,name:g,open:p(w),close:p(M),high:p(x),low:p(T),volume:p(S),amount:p(A),amplitude:p(C),changePercent:p(k),change:p(O),turnoverRate:p(H)}})}function Q(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function I(t,e){let n=[];for(let s=0;s<t.length;s++){if(s<e-1){n.push(null);continue}let o=0,r=0;for(let i=s-e+1;i<=s;i++)t[i]!==null&&(o+=t[i],r++);n.push(r===e?Q(o/e):null)}return n}function P(t,e){let n=[],s=2/(e+1),o=null,r=!1;for(let i=0;i<t.length;i++){if(i<e-1){n.push(null);continue}if(!r){let a=0,c=0;for(let u=i-e+1;u<=i;u++)t[u]!==null&&(a+=t[u],c++);c===e&&(o=a/e,r=!0),n.push(o!==null?Q(o):null);continue}let l=t[i];l===null?n.push(o!==null?Q(o):null):(o=s*l+(1-s)*o,n.push(Q(o)))}return n}function ae(t,e){let n=[],s=Array.from({length:e},(r,i)=>i+1),o=s.reduce((r,i)=>r+i,0);for(let r=0;r<t.length;r++){if(r<e-1){n.push(null);continue}let i=0,l=!0;for(let a=0;a<e;a++){let c=t[r-e+1+a];if(c===null){l=!1;break}i+=c*s[a]}n.push(l?Q(i/o):null)}return n}function _(t,e={}){let{periods:n=[5,10,20,30,60,120,250],type:s="sma"}=e,o=s==="ema"?P:s==="wma"?ae:I,r={};for(let i of n)r[`ma${i}`]=o(t,i);return t.map((i,l)=>{let a={};for(let c of n)a[`ma${c}`]=r[`ma${c}`][l];return a})}function Ie(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function E(t,e={}){let{short:n=12,long:s=26,signal:o=9}=e,r=P(t,n),i=P(t,s),l=t.map((c,u)=>r[u]===null||i[u]===null?null:r[u]-i[u]),a=P(l,o);return t.map((c,u)=>({dif:l[u]!==null?Ie(l[u]):null,dea:a[u],macd:l[u]!==null&&a[u]!==null?Ie((l[u]-a[u])*2):null}))}function ue(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function Ue(t,e,n){let s=[];for(let o=0;o<t.length;o++){if(o<e-1||n[o]===null){s.push(null);continue}let r=0,i=0;for(let l=o-e+1;l<=o;l++)t[l]!==null&&n[o]!==null&&(r+=Math.pow(t[l]-n[o],2),i++);s.push(i===e?Math.sqrt(r/e):null)}return s}function $(t,e={}){let{period:n=20,stdDev:s=2}=e,o=I(t,n),r=Ue(t,n,o);return t.map((i,l)=>{if(o[l]===null||r[l]===null)return{mid:null,upper:null,lower:null,bandwidth:null};let a=o[l]+s*r[l],c=o[l]-s*r[l],u=o[l]!==0?ue((a-c)/o[l]*100):null;return{mid:o[l],upper:ue(a),lower:ue(c),bandwidth:u}})}function ce(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function B(t,e={}){let{period:n=9,kPeriod:s=3,dPeriod:o=3}=e,r=[],i=50,l=50;for(let a=0;a<t.length;a++){if(a<n-1){r.push({k:null,d:null,j:null});continue}let c=-1/0,u=1/0,d=!0;for(let y=a-n+1;y<=a;y++){if(t[y].high===null||t[y].low===null){d=!1;break}c=Math.max(c,t[y].high),u=Math.min(u,t[y].low)}let f=t[a].close;if(!d||f===null||c===u){r.push({k:null,d:null,j:null});continue}let h=(f-u)/(c-u)*100;i=(s-1)/s*i+1/s*h,l=(o-1)/o*l+1/o*i;let g=3*i-2*l;r.push({k:ce(i),d:ce(l),j:ce(g)})}return r}function De(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function W(t,e={}){let{periods:n=[6,12,24]}=e,s=[null];for(let r=1;r<t.length;r++)t[r]===null||t[r-1]===null?s.push(null):s.push(t[r]-t[r-1]);let o={};for(let r of n){let i=[],l=0,a=0;for(let c=0;c<t.length;c++){if(c<r){i.push(null),s[c]!==null&&(s[c]>0?l+=s[c]:a+=Math.abs(s[c]));continue}if(c===r)l=l/r,a=a/r;else{let u=s[c]??0,d=u>0?u:0,f=u<0?Math.abs(u):0;l=(l*(r-1)+d)/r,a=(a*(r-1)+f)/r}if(a===0)i.push(100);else if(l===0)i.push(0);else{let u=l/a;i.push(De(100-100/(1+u)))}}o[`rsi${r}`]=i}return t.map((r,i)=>{let l={};for(let a of n)l[`rsi${a}`]=o[`rsi${a}`][i];return l})}function Fe(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function V(t,e={}){let{periods:n=[6,10]}=e,s={};for(let o of n){let r=[];for(let i=0;i<t.length;i++){if(i<o-1){r.push(null);continue}let l=-1/0,a=1/0,c=!0;for(let f=i-o+1;f<=i;f++){if(t[f].high===null||t[f].low===null){c=!1;break}l=Math.max(l,t[f].high),a=Math.min(a,t[f].low)}let u=t[i].close;if(!c||u===null||l===a){r.push(null);continue}let d=(l-u)/(l-a)*100;r.push(Fe(d))}s[`wr${o}`]=r}return t.map((o,r)=>{let i={};for(let l of n)i[`wr${l}`]=s[`wr${l}`][r];return i})}function ve(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function G(t,e={}){let{periods:n=[6,12,24]}=e,s={};for(let o of n){let r=I(t,o),i=[];for(let l=0;l<t.length;l++)if(t[l]===null||r[l]===null||r[l]===0)i.push(null);else{let a=(t[l]-r[l])/r[l]*100;i.push(ve(a))}s[`bias${o}`]=i}return t.map((o,r)=>{let i={};for(let l of n)i[`bias${l}`]=s[`bias${l}`][r];return i})}function Ne(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function J(t,e={}){let{period:n=14}=e,s=[],o=t.map(r=>r.high===null||r.low===null||r.close===null?null:(r.high+r.low+r.close)/3);for(let r=0;r<t.length;r++){if(r<n-1){s.push({cci:null});continue}let i=0,l=0;for(let d=r-n+1;d<=r;d++)o[d]!==null&&(i+=o[d],l++);if(l!==n||o[r]===null){s.push({cci:null});continue}let a=i/n,c=0;for(let d=r-n+1;d<=r;d++)c+=Math.abs(o[d]-a);let u=c/n;if(u===0)s.push({cci:0});else{let d=(o[r]-a)/(.015*u);s.push({cci:Ne(d)})}}return s}function me(t,e=2){let n=Math.pow(10,e);return Math.round(t*n)/n}function z(t,e={}){let{period:n=14}=e,s=[],o=[];for(let i=0;i<t.length;i++){let{high:l,low:a,close:c}=t[i];if(l===null||a===null||c===null){o.push(null);continue}if(i===0)o.push(l-a);else{let u=t[i-1].close;if(u===null)o.push(l-a);else{let d=l-a,f=Math.abs(l-u),h=Math.abs(a-u);o.push(Math.max(d,f,h))}}}let r=null;for(let i=0;i<t.length;i++){if(i<n-1){s.push({tr:o[i]!==null?me(o[i]):null,atr:null});continue}if(i===n-1){let l=0,a=0;for(let c=0;c<n;c++)o[c]!==null&&(l+=o[c],a++);a===n&&(r=l/n)}else r!==null&&o[i]!==null&&(r=(r*(n-1)+o[i])/n);s.push({tr:o[i]!==null?me(o[i]):null,atr:r!==null?me(r):null})}return s}function Y(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})),o=e.ma?_(n,typeof e.ma=="object"?e.ma:{}):null,r=e.macd?E(n,typeof e.macd=="object"?e.macd:{}):null,i=e.boll?$(n,typeof e.boll=="object"?e.boll:{}):null,l=e.kdj?B(s,typeof e.kdj=="object"?e.kdj:{}):null,a=e.rsi?W(n,typeof e.rsi=="object"?e.rsi:{}):null,c=e.wr?V(s,typeof e.wr=="object"?e.wr:{}):null,u=e.bias?G(n,typeof e.bias=="object"?e.bias:{}):null,d=e.cci?J(s,typeof e.cci=="object"?e.cci:{}):null,f=e.atr?z(s,typeof e.atr=="object"?e.atr:{}):null;return t.map((h,g)=>({...h,...o&&{ma:o[g]},...r&&{macd:r[g]},...i&&{boll:i[g]},...l&&{kdj:l[g]},...a&&{rsi:a[g]},...c&&{wr:c[g]},...u&&{bias:u[g]},...d&&{cci:d[g]},...f&&{atr:f[g]}}))}var Z=class{constructor(e={}){this.client=new L(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)}getHistoryKline(e,n){return j.getHistoryKline(this.client,e,n)}getMinuteKline(e,n){return j.getMinuteKline(this.client,e,n)}getHKHistoryKline(e,n){return j.getHKHistoryKline(this.client,e,n)}getUSHistoryKline(e,n){return j.getUSHistoryKline(this.client,e,n)}getAShareCodeList(e=!0){return K.getAShareCodeList(this.client,e)}async getAllAShareQuotes(e={}){let n=await this.getAShareCodeList();return this.getAllQuotesByCodes(n,e)}getAllQuotesByCodes(e,n={}){return K.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 r=typeof e.ma=="object"?e.ma:{},i=r.periods??[5,10,20,30,60,120,250],l=r.type??"sma";n=Math.max(n,this.safeMax(i,20)),l==="ema"&&(s=!0)}if(e.macd){let r=typeof e.macd=="object"?e.macd:{},i=r.long??26,l=r.signal??9;n=Math.max(n,i*3+l),s=!0}if(e.boll){let r=typeof e.boll=="object"&&e.boll.period?e.boll.period:20;n=Math.max(n,r)}if(e.kdj){let r=typeof e.kdj=="object"&&e.kdj.period?e.kdj.period:9;n=Math.max(n,r)}if(e.rsi){let r=typeof e.rsi=="object"&&e.rsi.periods?e.rsi.periods:[6,12,24];n=Math.max(n,this.safeMax(r,14)+1)}if(e.wr){let r=typeof e.wr=="object"&&e.wr.periods?e.wr.periods:[6,10];n=Math.max(n,this.safeMax(r,10))}if(e.bias){let r=typeof e.bias=="object"&&e.bias.periods?e.bias.periods:[6,12,24];n=Math.max(n,this.safeMax(r,12))}if(e.cci){let r=typeof e.cci=="object"&&e.cci.period?e.cci.period:14;n=Math.max(n,r)}if(e.atr){let r=typeof e.atr=="object"&&e.atr.period?e.atr.period:14;n=Math.max(n,r)}return Math.ceil(n*(s?1.5:1.2))}calcActualStartDate(e,n,s=1.5){let o=Math.ceil(n*s),r=new Date(parseInt(e.slice(0,4)),parseInt(e.slice(4,6))-1,parseInt(e.slice(6,8)));r.setDate(r.getDate()-o);let i=r.getFullYear(),l=String(r.getMonth()+1).padStart(2,"0"),a=String(r.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:o,indicators:r={}}=n,i=n.market??this.detectMarket(e),l=this.calcRequiredLookback(r),c={A:1.5,HK:1.46,US:1.45}[i],u=s?this.calcActualStartDate(s,l,c):void 0,d={period:n.period,adjust:n.adjust,startDate:u,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=Y(f,r);if(s){let g=this.dateToTimestamp(s),y=o?this.dateToTimestamp(o):1/0;return h.filter(R=>{let w=this.dateToTimestamp(R.date);return w>=g&&w<=y})}return h}},_e=Z;export{Z as StockSDK,Y as addIndicators,F as asyncPool,z as calcATR,G as calcBIAS,$ as calcBOLL,J as calcCCI,P as calcEMA,B as calcKDJ,_ as calcMA,E as calcMACD,W as calcRSI,I as calcSMA,ae as calcWMA,V as calcWR,D as chunkArray,q as decodeGBK,_e as default,U as parseResponse,m as safeNumber,b as safeNumberOrNull};
|
|
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};
|