پنل فراز گلد چیست؟
پنل فراز گلد که نام رسمیاش فرازگلد تریدر است، یک سامانهی کامل «سیگنال تا اجرا» است: معاملهگر سیگنال را یک بار ثبت میکند و همان سیگنال، در همان لحظه، روی حساب همهی کاربران فعال بهصورت خودکار اجرا میشود. کاربر لازم نیست پای سیستم بنشیند یا سفارش را دستی بگذارد.
سامانه دو تکه دارد: یک بکاند که سیگنال را پخش میکند و اشتراکها را مدیریت میکند، و یک برنامهی ویندوزی روی دستگاه کاربر که معامله را واقعاً باز میکند.
چرا وبسوکت، نه بررسی دورهای
قلب سامانه یک بکاند Django با Django REST Framework و Django Channels است. سیگنالها بهجای اینکه کاربر مدام سرور را صدا بزند، از سمت سرور و روی یک اتصال وبسوکت پایدار هل داده میشوند.
همین یک تصمیم معماری، فاصلهی میان ثبت سیگنال و رسیدن آن به کاربر را به کمترین حد میرساند. در بازار طلا، جایی که قیمت ورود چند ثانیه بیشتر معتبر نیست، این تعیینکننده است: سیگنالی که با تأخیر برسد عملاً بیارزش است.
ورود با پیامک و اشتراکی که زنده اعمال میشود
ورود کاربران با شمارهی موبایل و کد یکبارمصرف پیامکی انجام میشود و نشستها با JWT و توکن تازهسازی مدیریت میشوند. نه نام کاربری لازم است و نه رمز عبور.
هر کاربر یک وضعیت فعال و یک تاریخ انقضای اشتراک دارد، و نکتهی مهم اینجاست که این وضعیت بهصورت زنده اعمال میشود: اگر اشتراک کاربری در پنل مدیریت تمام یا لغو شود، همان لحظه از کانال پخش سیگنال کنار گذاشته میشود، بیآنکه لازم باشد اتصالش قطع شود یا برنامه را ببندد و باز کند.
موتور اجرا روی دستگاه کاربر
سمت کاربر یک اپلیکیشن دسکتاپ ویندوز با PySide6 است. کاربر یک بار حساب پلتفرم معاملاتی خودش را در برنامه ثبت میکند، روی حساب آزمایشی یا حساب واقعی، و از آن پس موتور اجرا کار را در دست میگیرد:
- سیگنال را میگیرد و تا رسیدن قیمت به نقطهی ورودِ اعلامشده صبر میکند.
- سفارش را با حجم و حد ضررِ تعیینشده باز میکند. حد ضرر همزمان با باز شدن پوزیشن ثبت میشود، بدون فاصلهی زمانی.
- حد سودها را سطحبهسطح و با حجم مستقلِ هر سطح میبندد.
- اگر ریسکفری فعال باشد، بهمحض رسیدن قیمت به فاصلهی تعیینشده از نقطهی ورود، حد ضرر به نقطهی سربهسر منتقل میشود و معامله از آن لحظه بدون ریسک ادامه پیدا میکند.
کاربر میتواند حد ضرر و حد سود یک پوزیشن باز را تغییر دهد یا بخشی از حجم آن را ببندد. همهی سطوح ورود، حد ضرر و حد سود همزمان روی نمودار خودِ پلتفرم رسم میشوند تا دقیقاً ببیند ربات چه میکند.
دو سناریوی واقعی که دیده شد
موتور اجرا روی یک حلقهی asyncio مستقل و جدا از ترد رابط کاربری مینشیند تا برنامه هرگز وسط اجرای یک معامله قفل نشود. اجرای هر معامله چند ثانیه طول میکشد و اگر روی ترد رابط کاربری انجام میشد، برنامه دقیقاً در حساسترین لحظه فریز میشد.
سناریوی دوم: اگر پلتفرم در میانهی کار کد امنیتی تصویری بخواهد، تصویر بیدرنگ در پنجرهای به کاربر نشان داده میشود، پاسخ او به حلقهی اجرا برمیگردد و کار از همانجا ادامه پیدا میکند. در یک فرایند تمامخودکار، نبودِ این مسیر یعنی توقف کامل بدون راه بازگشت.
وضعیت پوزیشنهای بستهشده هم به سرور برمیگردد تا سابقهی معاملات هر کاربر یکجا ثبت بماند.
چطور ساخته شد
پروژه در حدود سه ماه و با ۶۹ درخواست ادغام توسط تیمی چهارنفره ساخته شد، بهشکل یک مخزن یکپارچه با سه بستهی مستقل: بکاند، دسکتاپ و کتابخانهی مشترک.
منطق مدیریت پوزیشن، یعنی سطوح حد سود و ریسکفری، هم روی سرور لازم بود و هم داخل برنامهی کاربر. دو پیادهسازی موازی یعنی دو رفتار متفاوت، پس این منطق در یک کتابخانهی کامپایلشدهی اختصاصی جدا شد که میان پروژههای دیگر هم قابل استفاده است.
قراردادهای داده میان سرور و کلاینت با Pydantic تعریف شدهاند تا هر ناسازگاری در زمان توسعه معلوم شود، نه وسط یک معاملهی باز. کیفیت کد با Ruff، بررسی نوع سختگیرانهی MyPy، اسکن امنیتی Bandit، هوکهای pre-commit و آزمونهای pytest کنترل میشود و روی هر درخواست ادغام اجرا میگردد. مستندات API بهصورت OpenAPI و یک مجموعهی آمادهی Bruno تحویل داده شده است.
تحویل، بدون هیچ پیشنیاز
بکاند بهصورت کانتینری با Docker و Podman، پشت Nginx و با Redis برای لایهی کانال وبسوکت مستقر میشود.
نسخهی دسکتاپ با Nuitka به یک برنامهی کامپایلشدهی ویندوز تبدیل میشود که مرورگر مورد نیاز موتور اتوماسیون را هم درون خود دارد. کاربر نهایی معاملهگر است نه برنامهنویس، و هر پیشنیاز نصب یک کاربر از دست رفته بود، پس برای اجرا به نصب پایتون یا هیچ چیز دیگری احتیاج ندارد.
الگوی مشابهی روی متاتریدر و کانال تلگرام در کپی خودکار سیگنال تلگرام پیاده شده است.