دریافت قیمت منصفانه
کانال قیمت منصفانه، قیمت منصفانهی همهی بازارها را بهصورت دورهای ارسال میکند. هر پیام یک snapshot کامل از قیمتها در یک لحظه میباشد، نه فقط قیمتهایی که تغییر کردهاند.
قیمت منصفانهی هر بازار میانگین بهترین قیمت خرید و فروش منصفانه است، یعنی (bid + ask) / 2. این عدد تا ۸ رقم اعشار گرد میشود و صفرهای انتهایی آن حذف میگردد، بنابراین 123456.7 دریافت میکنید و نه 123456.70000000. این همان عددی میباشد که GET /v1/all-fairPrice برمیگرداند و این دو هیچوقت با هم اختلاف ندارند.
این کانال فقط روی ورژن ۲ (سنتریفیگو) در دسترس میباشد و روی ورژن ۱ (منسوخ شده) با آدرس wss://api.wallex.ir/ws وجود ندارد. جهت دریافت این کانال دو روش وجود دارد.
ورژن ۲ (سنتریفیگو) با SDK
آدرس اتصال WebSocket
برای اتصال باید از آدرس زیر استفاده کنید.
wss://api.wallex.ir/connection/websocket
نام کانال
این کانال یک کانال عمومی و سراسری میباشد. برخلاف کانالهای معاملات و عمق بازار، برای هر مارکت یک کانال جداگانه ندارد و یک پیام آن قیمت همهی بازارها را دارد.
public:all@fairPrice
نمونه کد عضویت
const fairPrices = client.newSubscription("public:all@fairPrice");
fairPrices.on("publication", (ctx) => console.log(ctx.data));
fairPrices.subscribe();
نمونه پاسخ دریافتی
پس از عضویت، هر snapshot جدید در رویداد publication به شما تحویل داده میشود و بدنهی آن در ctx.data قرار دارد.
| فیلد | نوع | توضیح |
|---|---|---|
ts | ISO 8601 String | زمان ساخته شدن این snapshot. در هر پیام دیرتر از پیام قبلی میباشد. |
prices | Object | نماد بازار به قیمت. کلیدها نمادهایی مانند BTCTMN هستند و مقدار هر کلید String (decimal) میباشد. |
{
"ts": "2026-09-07T13:10:07.689Z",
"prices": {
"BTCTMN": "123456.7",
"ETHTMN": "8901.2",
"USDTTMN": "89.5"
}
}
در نمونهی بالا سه نماد آمده است، اما پیام واقعی چند صد نماد دارد و حجم آن بین ۴۶ تا ۵۰ کیلوبایت میباشد.
نکتهها
- توجه داشته باشید که عضو شدن در این کانال هیچ قیمتی برای شما ارسال نمیکند و اولین پیام در انتشار بعدی میرسد. این انتظار میتواند تا ۲۰ ثانیه طول بکشد.
- هر ۲۰ ثانیه یک پیام ارسال میشود، چه قیمتی تغییر کرده باشد و چه نکرده باشد.
- گاهی این فاصله تا حدود ۳۵ ثانیه هم میرسد. این حالت طبیعی میباشد و به معنی قطع شدن کانال نیست.
- بنابراین پیشنهاد میشود هنگام بالا آمدن برنامه یک بار
GET /v1/all-fairPriceرا صدا بزنید و از آن به بعد قیمتها را از این کانال بگیرید. - در صورتی که بیش از ۶۰ ثانیه پیامی دریافت نکردید، دوباره
GET /v1/all-fairPriceرا صدا بزنید. نرسیدن پیام به معنی ثابت ماندن قیمتها نیست. - زمان آخرین پیامی را که پذیرفتهاید نگه دارید و هر پیامی را که
tsآن دیرتر نباشد نادیده بگیرید. - مقدار
tsرا قبل از مقایسه به زمان تبدیل کنید و آن را بهصورت متن مقایسه نکنید. وقتی کسر ثانیه صفر باشد نوشته نمیشود، بنابراین هر دو شکل2026-09-08T09:00:00Zو2026-09-08T09:00:07.689Zرا دریافت میکنید و در مقایسهی متنی، زمان زودتر بزرگتر به نظر میرسد. در JavaScript ازDate.parse(msg.ts)و در Java ازInstant.parse(msg.ts)استفاده کنید و سپس نتیجه را مقایسه کنید. - فیلد
pricesهمیشه همهی نمادها را ندارد. نمادی که در آن لحظه قیمت آن در دسترس نباشد در همان پیام نمیآید و ممکن است در پیام بعدی برگردد. بنابراین فهرست کلیدها را ثابت فرض نکنید و نبودن یک نماد را به معنی حذف شدن آن بازار نگیرید. - فیلد
pricesهیچوقت خالی ارسال نمیشود. - این کانال تاریخچه نگه نمیدارد، بنابراین snapshotهایی که در زمان قطعی اتصال منتشر شدهاند دوباره ارسال نمیشوند.
- نام کانال باید دقیقاً
all@fairPriceباشد و به بزرگی و کوچکی حروف حساس میباشد. اشتباه در بخش بعد از@، مانندall@fairpriceیاall@fairPrices، با خطای102: unknown channelرد میشود. - اما اشتباه در بخش قبل از
@هیچ خطایی نمیدهد. برای مثالalll@fairPriceبا موفقیت subscribe میشود و پس از آن هیچوقت هیچ پیامی دریافت نمیکنید. بنابراین در صورتی که تا ۶۰ ثانیه پیامی نرسید، قبل از هر چیز نام کانال را بررسی کنید. - پاسخ دادن به ping سرور توسط SDK انجام میشود. جزئیات در اتصال و عضویت آمده است.
ورژن ۲ (سنتریفیگو) بدون SDK
آدرس اتصال WebSocket
برای اتصال باید از آدرس زیر استفاده کنید.
wss://api.wallex.ir/connection/websocket
نام کانال
public:all@fairPrice
فرمت پیام Subscribe
جهت دریافت قیمت منصفانهی همهی بازارها باید دستور زیر را ارسال کنید.
{ "id": 4, "subscribe": { "channel": "public:all@fairPrice" } }
پاسخ موفق این دستور خالی میباشد.
{ "id": 4, "subscribe": {} }
نمونه پاسخ دریافتی
پس از ارسال پیام در سوکت، جوابهایی که دریافت میکنید بهصورت زیر میباشد و بدنهی پیام داخل پوشش push قرار دارد.
| فیلد | نوع | توضیح |
|---|---|---|
ts | ISO 8601 String | زمان ساخته شدن این snapshot. در هر پیام دیرتر از پیام قبلی میباشد. |
prices | Object | نماد بازار به قیمت. کلیدها نمادهایی مانند BTCTMN هستند و مقدار هر کلید String (decimal) میباشد. |
{
"push": {
"channel": "public:all@fairPrice",
"pub": {
"data": {
"ts": "2026-09-07T13:10:07.689Z",
"prices": {
"BTCTMN": "123456.7",
"ETHTMN": "8901.2",
"USDTTMN": "89.5"
}
}
}
}
}
در نمونهی بالا سه نماد آمده است، اما پیام واقعی چند صد نماد دارد و حجم آن بین ۴۶ تا ۵۰ کیلوبایت میباشد.
نکتهها
- توجه داشته باشید که عضو شدن در این کانال هیچ قیمتی برای شما ارسال نمیکند و اولین پیام در انتشار بعدی میرسد. این انتظار میتواند تا ۲۰ ثانیه طول بکشد.
- هر ۲۰ ثانیه یک پیام ارسال میشود، چه قیمتی تغییر کرده باشد و چه نکرده باشد.
- گاهی این فاصله تا حدود ۳۵ ثانیه هم میرسد. این حالت طبیعی میباشد و به معنی قطع شدن کانال نیست.
- بنابراین پیشنهاد میشود هنگام بالا آمدن برنامه یک بار
GET /v1/all-fairPriceرا صدا بزنید و از آن به بعد قیمتها را از این کانال بگیرید. - در صورتی که بیش از ۶۰ ثانیه پیامی دریافت نکردید، دوباره
GET /v1/all-fairPriceرا صدا بزنید. نرسیدن پیام به معنی ثابت ماندن قیمتها نیست. - زمان آخرین پیامی را که پذیرفتهاید نگه دارید و هر پیامی را که
tsآن دیرتر نباشد نادیده بگیرید. - مقدار
tsرا قبل از مقایسه به زمان تبدیل کنید و آن را بهصورت متن مقایسه نکنید. وقتی کسر ثانیه صفر باشد نوشته نمیشود، بنابراین هر دو شکل2026-09-08T09:00:00Zو2026-09-08T09:00:07.689Zرا دریافت میکنید و در مقایسهی متنی، زمان زودتر بزرگتر به نظر میرسد. در JavaScript ازDate.parse(msg.ts)و در Java ازInstant.parse(msg.ts)استفاده کنید و سپس نتیجه را مقایسه کنید. - فیلد
pricesهمیشه همهی نمادها را ندارد. نمادی که در آن لحظه قیمت آن در دسترس نباشد در همان پیام نمیآید و ممکن است در پیام بعدی برگردد. بنابراین فهرست کلیدها را ثابت فرض نکنید و نبودن یک نماد را به معنی حذف شدن آن بازار نگیرید. - فیلد
pricesهیچوقت خالی ارسال نمیشود. - این کانال تاریخچه نگه نمیدارد، بنابراین snapshotهایی که در زمان قطعی اتصال منتشر شدهاند دوباره ارسال نمیشوند.
- نام کانال باید دقیقاً
all@fairPriceباشد و به بزرگی و کوچکی حروف حساس میباشد. اشتباه در بخش بعد از@، مانندall@fairpriceیاall@fairPrices، با خطای102: unknown channelرد میشود. - اما اشتباه در بخش قبل از
@هیچ خطایی نمیدهد. برای مثالalll@fairPriceبا موفقیت subscribe میشود و پس از آن هیچوقت هیچ پیامی دریافت نمیکنید. بنابراین در صورتی که تا ۶۰ ثانیه پیامی نرسید، قبل از هر چیز نام کانال را بررسی کنید. - پاسخ دادن به ping سرور بر عهدهی خود شما میباشد. جزئیات در اتصال بدون SDK آمده است.