A client for fetching stock data from the Tehran Stock Exchange (TSETMC). Works in Browser, Node and as CLI.
Usage no npm install needed!
<script type="module">
import tseClient from 'https://cdn.skypack.dev/tse-client';
</script>
README
TSE Client
A client for fetching stock data from the Tehran Stock Exchange (TSETMC).
Works in Browser, Node, and as CLI.
The 0.x and 1.x versions were a direct port of the official Windows app.
tse ذوب -b 3m # سه ماه گذشته
tse ذوب -b 40d # چهل روز گذشته
tse ذوب -b 2y # دو سال گذشته
tse ذوب -b 13920101 # تاریخ شمسی
tse ذوب -b 20160101 # تاریخ میلادی
tse ذوب -b 13800101 # کمترین تاریخ ممکن (پیش فرض)
tse ذوب -b 20030123 # کمترین تاریخ ممکن به میلادی
# tse -f "t=نوع نماد i=کد گروه صنعت m=بازار b=کد تابلو y=کد بازار g=کد گروه نماد"
# tse -f "P=الگوی نماد D=الگوی تاریخ میلادی آخرین روز معامله نماد R حذف نمادهای تغییرنام داده شده"
tse -f "i=27" # گروه صنعت: فلزات اساسی
tse -f "i=27 t=300" # گروه صنعت: فلزات اساسی & نوع نماد: سهم بورس
tse -f "m=4 i=27,53,38 t=404" # بازار: پایه & گروه صنعت: فلزات و سیمان و قند & نوع نماد: حق تقدم
tse -f "t=300 i=43 b=1" # بازار: بورس & گروه صنعت: دارویی & کد تابلو: تابلوی اصلی
tse ls -T # نمایش کد انواع نماد
tse ls -I # نمایش کد گروههای صنعت
tse ls -B # نمایش کد تابلوها
tse ls -T -I -M -B -Y -G # نمایش همه
tse ls -F "i=27" # فقط نمایش دادن گروه فلزات
tse ls -F "i=27 t=300" # گروه فلزات بازار بورس
tse ls -F "i=27 t=303" # گروه فلزات بازار فرابورس
tse ls -F "i=27 t=309" # گروه فلزات بازار پایه
tse ls -F "i=34 t=300" # گروه خودرو بازار بورس
tse ls -F "i=34 t=303" # گروه خودرو بازار فرابورس
tse ls -F "i=34 t=309" # گروه خودرو بازار پایه
tse ls -F "t=68" # شاخص های بازار بورس
tse ls -F "t=69" # شاخص های بازار فرابورس
tse ls -F "i=43 b=3 t=300" # گروه دارویی تابلوی فرعی بازار بورس
tse ls -F "i=43 b=1 t=303" # گروه دارویی تابلوی اصلی بازار فرابورس
tse ls -F "i=44 b=5 t=300" # گروه شیمیایی بازار دوم بورس
tse ls -F "P=\d
quot; # نماد هایی که حرف آخرشان یک عدد (یک رقمی) است
tse ls -F "t=309 P=\dquot; # نمادهای بازار پایه که حرف آخرشان یک عدد (یک رقمی) است
tse ls -F "D=^2022" # نمادهایی که روز آخری که معامله شده اند در سال 2022 بوده است
tse ls -F "i=72 D=^2022" # نمادهای گروه رایانه که روز آخری که معامله شده اند در سال 2022 بوده است
tse ls -F "i=57 t=303" # گروه بانکی بازار فرابورس
tse ls -F "i=57 t=303 R" # گروه بانکی بازار فرابورس منهای نمادهای تغییرنام داده شده
tse ls -S
tse ls -D
tse ls -F "i=34"
tse ls -F "i=27 t=300"
tse ls -M -T -I
tse ls -T -O 1 # order by count (descending)
tse ls -T -O 1_ # order by count (ascending)
tse ls -h
Intraday crawler (Experimental):
tse itd ذوب -o ./mydata # basic (crawl last day)
tse itd ذوب # update but do not generate output
tse itd ذوب -b 6d # crawl last 6 days
tse itd ذوب -b 30d -m 20d # crawl 10 days (from 30 days ago to 20 days ago)
tse itd ذوب -b 13991201 -m 13991206 # crawl 6 days
tse itd ذوب -b 20210219 -m 20210224 # crawl 6 days (Western dates)
tse itd ذوب -k -o . # do not cache the data
tse itd ذوب -z -o . # output gzip files
tse itd ذوب -y -o . # generate results with Shamsi dates
tse itd ذوب -r # re-download already cached days that have no `trade` data
tse itd ذوب -o . -e ascii # file encoding
tse itd ذوب -o . -n 2 # directory name
tse itd ذوب -o . -H # file without headers
tse itd ذوب --retry 0 # only request once without any retrying
tse itd ذوب --retry-delay 5000 # wait 5 seconds between each retry
tse itd ذوب --chunk-delay 2000 # wait 2 seconds before requesting another day
tse itd ذوب --chunk-max-wait 20000 # force end a request if not finished in 20 seconds (only in Node v15+)
tse itd ذوب --servers "4 8" # only use "cdn4.tsetmc.com" and "cdn8.tsetmc.com" servers
tse itd ذوب --servers "7" # only use "cdn7.tsetmc.com" server
Node
Install:
npm i tse-client
Usage:
const tse = require('tse-client');
(async () => {
// basic
let res = await tse.getPrices(['ذوب', 'فولاد']);
if (!res.error) console.log(res.data);
// adjusted data
res = await tse.getPrices(['خساپا'], {adjustPrices: 1});
// select columns (default names)
res = await tse.getPrices(['شپنا'], {columns: [0,3,4]});
// select columns (custom names)
res = await tse.getPrices(['شپنا'], {columns: [[0,'DATE'],[3,'MAX'],[4,'MIN']]});
// view column info
console.table(tse.columnList);
// list of instruments
const instruments = await tse.getInstruments();
console.log(
instruments.filter(i => i.YVal === '300' && i.CSecVal === '27 ') // گروه فلزات بازار بورس
);
// intraday crawler
res = await tse.getIntraday(['ذوب', 'فولاد']), {
startDate: '20201122',
endDate: '20201122',
gzip: false
});
})();
The API URL to use for HTTP requests.
Only string and valid URL.
Default: http://service.tsetmc.com/tsev2/data/TseClient2.aspx
tse.UPDATE_INTERVAL
Update data only if these many days have passed since the last update.
Only integers.
Default: 1
tse.PRICES_UPDATE_CHUNK
Amount of instruments per request.
Only integers.
Min: 1
Max: 59
Default: 50
tse.PRICES_UPDATE_CHUNK_DELAY
Amount of delay (in ms) to wait before requesting another chunk of instruments.
Default: 300
tse.PRICES_UPDATE_RETRY_COUNT
Amount of retry attempts before giving up.
Only integers.
Default: 3
tse.PRICES_UPDATE_RETRY_DELAY
Amount of delay (in ms) to wait before making another retry.
Only integers.
Default: 1000
tse.CACHE_DIR
Only in Node.
Location of the cache directory.
If the location is changed, existing content is not moved to the new location.
Default: User's home directoy:require('os').homedir()
Update (if needed) and return prices of instruments.
symbols: An array of Farsi instrument symbols.
settings: A settings object.
columns: Select which ClosingPrice props to return and specify optional string for the prop.
For example: [ [0,'DATE'], [6,'CLOSE'], [7,'VOL'] ]
Default: [0,2,3,4,5,6,7,8,9]
See columnList for the list of all column indexes and their names.
adjustPrices: The type of adjustment applied to returned prices. 0: None (بدون تعدیل) 1: Capital Increase + Dividends (افزایش سرمایه + سود نقدی) 2: Capital Increase (افزایش سرمایه)
startDate: Only return prices after this date. Min: '20010321'. Default: '20010321'
daysWithoutTrade: Whether to include days that have 0 trades. Default: false
mergeSimilarSymbols: Whether to merge the data of similar renamed symbols. Default: true
cache: Whether to cache the downloaded data. Default: true
csv: Generate results as CSV strings. Default: false
csvHeaders: Include header row when generating CSV results. Default: true
csvDelimiter: A cell delimiter character to use when generating CSV results. Default: ','
onprogress: A callback function which gets called with a number indicating the progress. Default: undefined
progressTotal: A number to use as the completion point of progress. Default: 100
Amount of delay (in ms) to wait before requesting another chunk of dates.
Default: 100
tse.INTRADAY_UPDATE_CHUNK_MAX_WAIT
Max time (in ms) to wait for a request to finish before force ending it.
In Node, it needs Node v15+ or it has no effect.
Only integers.
Default: 60000
tse.INTRADAY_UPDATE_RETRY_COUNT
Amount of retry attempts before giving up.
Only integers.
Default: 3
tse.INTRADAY_UPDATE_RETRY_DELAY
Amount of delay (in ms) to wait before making another retry.
Only integers.
Default: 1000
tse.INTRADAY_UPDATE_SERVERS
Array of positive integers to use as CDN servers in the update process.
Note that 0 will result to tsetmc.com server.
Only an array of only positive integers.
Default: [0,7,8,9]
Instrument.Symbol characters are cleaned from zero-width characters, ك and ي.
The price adjustment algorithm is still a direct port of the official Windows app.
In Browser, the InstrumentAndShare data is stored in localStorage.
In Browser, the ClosingPrices data is stored in indexedDB.
In Node, data compression is done with the zlib module.
Renamed Symbols
:برای منحصر به فرد بودن تمامی نمادها، نمادهای متشابه بر اساس الگوریتم زیر تغییر داده می شوند
در صورت مواجه با نمادهای متشابه
نمادهای متشابه بر اساس آخرین روزی که فعال بوده اند مرتب شده، سپس
نمادی که دارای جدیدترین تاریخ است، دست نخورده باقی مانده، و
به باقی نمادها یک خط تیره "-" و حرف "ق" و عدد جایگاه نماد در لیست مرتب شده اضافه می شود
.نماد های تغییر داده شده را نمایش می دهد tse ls -R فرمان