pytse-client icon indicating copy to clipboard operation
pytse-client copied to clipboard

قابلیت آپدیت دیتای تاریخی دانلود شده

Open sfmqrb opened this issue 2 years ago • 8 comments

مشکلی که دارید چی هست؟ امکان بروزرسانی تاریخجه سهام به پکیج اضافه شود. در حال حاضر صرفا دانلود مجدد مقدور است. اما با روشهایی می شود دیتای تاریخی مورد نیاز چند روز اخیر را فقط درخواست داده و بعد به فایل csv مربوطه بیفراییم.

راه حل می توانیم از لینک استفاده کنیم

sfmqrb avatar May 13 '22 17:05 sfmqrb

اینو یه همت بکنیم بزنیم؟ @Glyphack

sfmqrb avatar Aug 10 '22 13:08 sfmqrb

آره ایده‌ی خوبیه

Glyphack avatar Aug 10 '22 14:08 Glyphack

سلام @Glyphack @sfmqrb

ایده خوبی است البته قرار بود در صورت امکان بتوان از منابع دیگری داده سهام را دریافت کنیم. یکی هم برنامه tsetmc client بود نسخه پایتون آن را میتوانید از اینجا ببینید: https://github.com/alised/tse-index مزایاش اینه که میشه مثلا دیتای ۵۰ نماد را با یک درخواست و همزمان دریافت کرد (فکر کنم حداکثر ۱۰۰ تا باشه یا بستگی به حجم دیتای برگشتی دارد دقیق خاطرم نیست) برای بروزرسانی هم که بر اساس تاریخ آخرین روز معاملاتی و دیتای آخرین روز هر سهم عمل می کند. اگر ایده ای برای مرج کردن و گنجاندن آن در این ماژول دارید بفرمایید.

اگر پیاده سازی پروتکل سوپ مشکل باشد یک نسخه وب سرویس هم دارد که با متد گت/پست کار می کند می تونم کدهامو نگاه کنم از اونها استفاده کنیم برنامه کلاینت اینجوریه که اگر متد سوپ کار نکرد از گت استفاده می کند.

alised avatar Sep 18 '22 09:09 alised

مرسی @alised ایده‌ی خوبیه، من کد رو نگاه میندازم ببینم چطوری داره کار میکنه. برای پیاده سازی چیزی که فکر میکنم منطقی باشه الان این هست که یه تابع جدید اضافه کنیم به برنامه که میتونه تاریخچه سهام رو برای روز‌های انتخابی یک سهام بگیره و بعد ازون تابع در دانلود استفاده کنیم.

اگر بشه که همین تابع history رو از https://github.com/alised/tse-index استفاده کنیم مشکلی نداره بنظرم چون همون کد یه جا باشه راحت‌تر هست تا دوتا جا.

صرفا باید توی تابع دانلود یه لاجیک اضافه کنیم که آپدیت کنه دیتا رو اگر دانلودی از قدیم موجوده که با تاریخ الان یکی نیست

Glyphack avatar Sep 18 '22 11:09 Glyphack

@Glyphack نباید از تاریخ الان استفاده کنیم توی تی اس ای هم میشه تاریخ آخرین روز معاملاتی را در آورد یا مثلا از دیتای شاخص کل استفاده کنیم ببینیم آخرین بروزرسانیش مربوط به کی است توی نرم افزار کلاینت از این آدرس تاریخ آخرین روز را میشه گرفت (توجه داشته باشید که دیتا ساعت ۵ عصر به بعد بروز میشود) http://service.tsetmc.com/tsev2/data/TseClient2.aspx?t=LastPossibleDeven الان خروجی این را میده 20220914;20220914

یعنی دیتای روز جاری هنوز بروز نشده است. فکر کنم اولی تاریخ بروزرسانی دیتای قیمتها باشد دومی مربوط به تغییرات افزایش سرمایه سهام

اینم اضافه کنم که برنامه دو متد سوپ و گت دارد که من توی ماژولی که فرستادم فقط روش سوپ را پیاده کردم چون تعداد بیشتری سهم را میتوان در یک درخواست ارسال کرد و از زیپ داده هم پشتیبانی می کند ولی در متد گت طول آدرس به ۲۰۴۸ محدود است. در هر صورت بجز متد دریافت داده برای بقیه میتوان از متد گت هم استفاده کرد که من لینک برخی از آنها را ارسال کردم. حداقل برای بررسی و مشاهده ریسپانس راحت تر است:

if instrument list == "*":
("بروز رسانی اطلاعات در حد فاصل ساعت هشت صبح تا یک بعد از ظهر روزهای شنبه تا چهارشنبه امکان پذیر نمی باشد. \nجهت مشاهده لیست فعلی نمادها روی دکمه مرحله بعد کلیک کنید.");

========================================================================= http://service.tsetmc.com/tsev2/data/TseClient2.aspx?t=ClosingPrices&a={inscode},0,0;{inscode2},0,0 http://service.tsetmc.com/tsev2/data/TseClient2.aspx?t=Instrument&a=0 http://service.tsetmc.com/tsev2/data/TseClient2.aspx?t=InstrumentAndShare&a=0&a2=0 http://service.tsetmc.com/tsev2/data/TseClient2.aspx?t=LastPossibleDeven

alised avatar Sep 18 '22 12:09 alised

این به نظرم ایشوی خیلی مهمیه @Glyphack @alised به نظرم سرعت دریافت دیتا تاریخی خوبه و نیازی به بهبود با استفاده از بقیه اندپوینت ها نیست میشه همین پیاده سازی حال خاضر رو تغییر داد همون طور که @alised گفت کافیه اخرین روز معاملاتی بازار رو بگیریم. با روزهای پایانی داخل csv ها قیاس کنیم. برای نمادهایی که این اختلاف غیر صفره دیتای روزهای اخیر رو بگیریم و داخل csv با فرمت مخصوص ستون‌های هر کدوم سطر های جدید رو اضافه کنیم.

sfmqrb avatar Apr 30 '23 08:04 sfmqrb

آره منم بنظرم بهبود سرعت لزوما لازم نیست اینجا باشه و کدی هم که بنویسیم برای آپدیت قاعدتا میشه توی یه پول ریکوئست دیگه سرعتشو برد بالا. هر دوتا بهبود خوبه بنظرم برای آسون تر کردنش میشه با چیزایی که فعلا هست همین لاجیک آپدیت کردن رو با چیزایی که موجوده اضافه کنیم.

من خودم ممکنه تا یکی دو هفته آینده وقت بکنم اینو انجام بدم اگر نشه میوفته برای ماه دیگه که بتونم یکم کار کنم خیلی درگیر چیزای دیگه‌ام این مدت ولی خوشحال میشم اگر کسی میتونه کمکی بکنه منم هستم سوالی بود یا کمکی لازم باشه انجام بدم.

Glyphack avatar May 02 '23 18:05 Glyphack

متاسفانه ایجاد درخواستهای متعدد همزمان نه تنها مشکل را رفع نمی کند بلکه مشکلات جدیدی هم ایجاد می کند مثل ریجکت شدن درخواست و حتی بن شدن آیپی. بنابراین نمی توان از یک حد مشخص سرعت دریافت دیتا را بیشتر کرد. همه روشهایی که در حال حاضر در پلاگین وجود دارد برای بروزرسانی دیتا مستلزم ایجاد ریکوئست مجزا برای هر نماد است. به نظرم میشه از این پلاگین برای بروزرسانی استفاده کرد: https://github.com/alised/tse-index تا آخر هفته نگاه میکنم ببینم میشه با تغییرات کم پیاده اش کرد.

alised avatar May 14 '23 07:05 alised