MarketPulse

ابزاری شخصی، ساخته‌شده با کدنویسی عاملی، که هر ۵ دقیقه قیمت دلار آزاد، تتر، طلا، سکه، انس، PAXG و بیت‌کوین را می‌گیرد، حباب و پرمیوم هر کدام را حساب می‌کند و نشان می‌دهد امروز ارزان‌ترین راه حفظ ارزش دلاری کدام است. هشدارها کم و عددی‌اند؛ بقیه در یک خلاصهٔ تلگرامی ساعت ۹ صبح.

چرا ساختمش؟

اولویتم حفظ ارزش پس‌انداز در برابر تورم ریال است، نه سود سریع. سؤال همیشگی این بود: امروز تتر بخرم یا دلار؟ طلای ۱۸ عیار، سکه یا PAXG؟ هر بار با ماشین‌حساب انس و دلار و تتر را ضرب و تقسیم می‌کردم تا حباب‌ها را مقایسه کنم.

از طرف دیگر نمی‌خواستم هر ساعت قیمت چک کنم. MarketPulse همان محاسبه‌های دستی را هر ۵ دقیقه انجام می‌دهد، فقط وقتی چیزی واقعاً مهم است پیام می‌دهد و بقیه را برای ساعت ۹ صبح نگه می‌دارد.

قابلیت‌ها

  • ارزان‌ترین راه خرید طلا: طلای ۱۸ عیار، سکه امامی، بهار، نیم، ربع و PAXG بر اساس قیمت هر گرم طلای خالص رتبه‌بندی می‌شوند: با ۱۰۰ دلار امروز از هر مسیر چند گرم طلا می‌شود خرید.
  • اسکناس یا تتر؟ پرمیوم تتر نسبت به دلار آزاد؛ منفی یعنی تتر راه ارزان‌تر نگهداری دلار است.
  • حباب طلا و سکه: ارزش ذاتی از انس جهانی و دلار آزاد، با عیار و وزن رسمی هر سکه.
  • رژیم بیت‌کوین: روزانه بعد از بسته شدن کندل، SMA200 و RSI(14) و چهار حالت؛ برای PAXG روند ساده با SMA50 و SMA200.
  • هشدار لبه‌ای قیمت: هر قانون فقط هنگام عبور از آستانه یک بار پیام می‌دهد و تا برگشت قیمت ساکت می‌ماند.
  • ضد اسپم: ساعت سکوت ۲۳ تا ۸، حداکثر ۵ پیام در روز و هر دارایی حداکثر یک بار در ۶ ساعت؛ بقیه در خلاصهٔ ساعت ۹ صبح.
  • دادهٔ قدیمی هشدار نمی‌سازد: اگر منبعی جواب ندهد، آخرین قیمت با برچسب «قدیمی» نمایش داده می‌شود و هیچ هشداری از آن ساخته نمی‌شود.

امروز، ارزان‌ترین راه و هشدارها (قیمت‌های واقعی)

معماری

ساده، عمداً: یک اپ وب، یک دیتابیس، یک Worker.

  • اپ روی سرور ایران: ASP.NET Core 10 MVC، EF Core و SQL Server روی Plesk/IIS، با دو BackgroundService: دریافت قیمت هر ۵ دقیقه، و کار روزانه برای رژیم و خلاصه. رابط کاربری یک PWA راست‌به‌چپ (Razor + Tailwind) است و همهٔ منابعش روی خود سرور است.
  • Cloudflare Worker تنها راه خروج: قیمت و کندل LBank و ارسال تلگرام. منابع داخلی (والکس و TGJU) مستقیم از سرور خوانده می‌شوند.

چالش‌هایی که حل شد

  • هاست ایران، API خارجی: سرور داخل ایران به LBank و تلگرام دسترسی ندارد و صرافی‌های ایرانی IP خارجی را می‌بندند؛ فقط ترافیک خارجی از Worker عبور می‌کند.
  • Worker که پروکسی باز نیست: فقط چند مسیر و نماد مشخص با کلید مشترک در هدر؛ توکن بات تلگرام فقط داخل Worker است و همهٔ مسیرهای رد تست واحد دارند.
  • اتصال یکی در میان: از سرور ایران، هر درخواست دوم به Worker شکست می‌خورد؛ علت چرخش DNS بین چند IP کلادفلر بود. راه‌حل: اتصال فقط IPv4، سه ثانیه برای هر IP، شروع از آخرین IP سالم و یک تلاش مجدد امن (پیام تلگرام بعد از Timeout تکرار نمی‌شود تا تکراری نرسد).
  • زمان و تقویم: همهٔ زمان‌ها UTC ذخیره می‌شوند و فقط در نمایش به ساعت تهران و تقویم شمسی تبدیل می‌شوند. کندل روزانهٔ LBank ساعت ۱۹:۳۰ تهران بسته می‌شود و کندل در حال تشکیل در محاسبه نمی‌آید.
  • عدد درست، با تست: حباب‌ها با قیمت‌های واقعی یک روز با محاسبهٔ دستی مقایسه شدند و RSI و SMA200 با یک محاسبهٔ مستقل روی همان ۲۶۰ کندل. پاسخ واقعی هر منبع به‌عنوان Fixture تست ذخیره شده است.

وضعیت و محدودیت‌ها

ابزاری شخصی و تک‌کاربره است و ثبت‌نام عمومی ندارد؛ نسخهٔ نمایشی فقط‌خواندنی در /live است. هیچ معامله‌ای انجام نمی‌دهد و به هیچ حساب صرافی وصل نیست. هزینهٔ خرید و فروش و نقدشوندگی هر مسیر تخمینی و قابل تنظیم است. قانون‌محور و آموزشی است و توصیهٔ سرمایه‌گذاری نیست.