2
پر توجہ دیں
319
پیروکار

ڈیجیٹل کرنسی مارکیٹ بنانے کی حکمت عملیوں پر ایک مختصر گفتگو: دستک آن حکمت عملی کا فن تعمیر اور FMZ پلیٹ فارم کا نفاذ

میں تخلیق کیا: 2025-07-24 11:03:59, تازہ کاری: 2025-07-28 13:06:13
comments   0
hits   622

⚠️ اہم اطلاع

یہ مضمون تجارتی فریم ورک کو سیکھنے کے لیے حجم بڑھانے والی حکمت عملی کو ظاہر کرتا ہے، جو بنیادی طور پر روایتی ثالثی مارکیٹ سازی کی حکمت عملی سے مختلف ہے۔ اس حکمت عملی کا بنیادی مقصد قیمت کے فرق کے ثالثی کے ذریعے منافع حاصل کرنے کے بجائے ایک ہی قیمت پر خرید و فروخت کے ذریعے تجارتی حجم کو بڑھانا اور تبادلے کی چھوٹ یا سطحی چھوٹ حاصل کرنا ہے۔

اس مضمون میں فراہم کردہ کوڈ صرف ایک حوالہ فریم ورک ہے اور اس میں کوئی حقیقی وقت میں آپریشن کا تجربہ نہیں ہے۔ اس مضمون میں حکمت عملی کا نفاذ صرف تکنیکی سیکھنے اور تحقیقی مقاصد کے لیے ہے اور اصل مارکیٹ کے ماحول میں اس کی مکمل تصدیق نہیں کی گئی ہے۔ جب قارئین اس مضمون کے مواد کا حوالہ دیتے ہیں، تو انہیں کافی بیک ٹیسٹنگ کی تصدیق اور خطرے کی تشخیص کرنی چاہیے، اور اسے ریئل ٹائم ٹریڈنگ کے لیے براہ راست استعمال نہیں کرنا چاہیے۔


ڈیجیٹل کرنسی مارکیٹ میں، مارکیٹ بنانے کی حکمت عملی نہ صرف مارکیٹ کی لیکویڈیٹی کو بہتر بنانے اور لین دین کو فروغ دینے کا ایک آلہ ہے، بلکہ بہت سی مقداری تجارتی حکمت عملیوں کا ایک اہم جزو بھی ہے۔ مارکیٹ بنانے والے بازار کے مختلف ماحول میں خرید و فروخت کے حوالے پوسٹ کرکے اور لیکویڈیٹی فراہم کرکے منافع کماتے ہیں۔ پیشہ ورانہ مارکیٹ سازوں کے کوڈ کا نفاذ اکثر انتہائی پیچیدہ ہوتا ہے، جس میں اعلی درجے کے افعال شامل ہوتے ہیں جیسے کہ ہائی فریکوئنسی تاخیر کی اصلاح، پیچیدہ رسک کنٹرول سسٹم، اور ملٹی ایکسچینج آربیٹریج۔ اس بار، ہم برش والیوم کاؤنٹر ٹریڈنگ حکمت عملی کے بنیادی تصورات کا مطالعہ کریں گے اور انوینٹر کوانٹیٹیو (FMZ) پلیٹ فارم پر سیکھنے کے ایک آسان فریم ورک کو کیسے نافذ کیا جائے۔

اس مضمون کا مرکزی حصہ اصل مصنف زینان کے “مارکیٹ بنانے کی حکمت عملی کا آئیڈیا اور تحریری طریقہ” سے آیا ہے۔ کچھ حصوں کو بہتر بنایا گیا ہے اور fmz پلیٹ فارم پر دوبارہ تیار کیا گیا ہے۔ آج کے نقطہ نظر سے، لکھنے کے کچھ طریقے پرانے ہو سکتے ہیں، لیکن یہ اب بھی ہر ایک کے لیے کوڈ کی ساخت اور کاؤنٹر ٹریڈنگ کے بنیادی خیالات کو سمجھنا متاثر کن ہے:

مارکیٹ بنانے کی حکمت عملی کا تصور

مارکیٹ سازی کی حکمت عملی سے مراد تاجر (مارکیٹ بنانے والے) ایک ہی وقت میں مارکیٹ میں خرید و فروخت کے آرڈر دیتے ہیں، اس طرح مارکیٹ کے استحکام کو برقرار رکھنے کے لیے لیکویڈیٹی فراہم کرتے ہیں۔ یہ حکمت عملی نہ صرف مارکیٹ کی گہرائی کو برقرار رکھنے میں مدد کرتی ہے بلکہ دوسرے تاجروں کے لیے ہم منصب بھی فراہم کرتی ہے۔ مختلف قیمتوں کی حدود میں خرید و فروخت کے حوالے فراہم کرکے، مارکیٹ بنانے والے قیمت کے اتار چڑھاو سے منافع حاصل کرتے ہیں۔

کرپٹو کرنسی مارکیٹ کے لیے مارکیٹ بنانے والوں کا کردار بہت اہم ہے، خاص طور پر کم تجارتی حجم اور زیادہ اتار چڑھاؤ والی مارکیٹوں میں۔ لیکویڈیٹی فراہم کر کے، مارکیٹ بنانے والے مارکیٹ کی پھسلن کو کم کرنے میں مدد کرتے ہیں اور تاجروں کو تجارت کے لیے آسان قیمتیں فراہم کرتے ہیں۔

روایتی مارکیٹ بنانے کی حکمت عملی کا بنیادی اصول لیکویڈیٹی فراہم کر کے بولی مانگنے کے پھیلاؤ کو حاصل کرنا ہے۔ مارکیٹ میکر کی طرف سے پوسٹ کردہ خرید آرڈر کی قیمت فروخت کے آرڈر کی قیمت سے کم ہے، اور منافع لین دین کے پھیلاؤ کے ذریعے حاصل کیا جاتا ہے۔ مثال کے طور پر، جب مارکیٹ میں سپاٹ قیمت بڑھ جاتی ہے، تو مارکیٹ بنانے والا زیادہ قیمت پر فروخت کرتا ہے اور کم قیمت پر خریدتا ہے، جس سے پھیلاؤ کمایا جاتا ہے۔ آمدنی کے اہم ذرائع میں شامل ہیں:

  • پھیلاؤ:روایتی مارکیٹ بنانے والے خرید و فروخت کے آرڈر دے کر اور قیمت کے فرق کا فائدہ اٹھا کر منافع کماتے ہیں۔
  • تجارتی حجم کی آمدنی:مارکیٹ بنانے والوں کی آمدنی کا ان کے فراہم کردہ تجارتی حجم سے گہرا تعلق ہے۔ زیادہ تجارتی حجم کا مطلب نہ صرف زیادہ لین دین کی فریکوئنسی اور زیادہ منافع کے مواقع ہیں، بلکہ درج ذیل اضافی فوائد بھی لاتے ہیں:
    • فیس میں چھوٹمارکیٹ سازوں کو لیکویڈیٹی فراہم کرنے کی ترغیب دینے کے لیے، بہت سے ایکسچینجز فیس کی واپسی کا ایک خاص فیصد دیں گے، یا منفی فیس بھی دیں گے (یعنی ایکسچینج مارکیٹ سازوں کو فیس ادا کرتا ہے)
    • VIP سطح کے فوائد:جب تجارتی حجم ایک خاص حد تک پہنچ جاتا ہے، تو مارکیٹ بنانے والے کم ہینڈلنگ فیس حاصل کر سکتے ہیں اور لین دین کے اخراجات کو کم کر سکتے ہیں۔
    • مارکیٹ میکر ترغیبی پروگرام:کچھ ایکسچینجز نے مارکیٹ میکر کے ترغیبی پروگراموں کو وقف کیا ہے، جو فراہم کردہ لیکویڈیٹی کے معیار کی بنیاد پر اضافی انعامات دیتے ہیں

تاہم، مارکیٹ بنانے والوں کو بھی مارکیٹ کے اتار چڑھاؤ کے خطرے کا سامنا کرنا پڑتا ہے، خاص طور پر ڈیجیٹل کرنسی مارکیٹ کے انتہائی غیر مستحکم ماحول میں۔ مارکیٹ میں تیزی سے اتار چڑھاو کی وجہ سے مارکیٹ سازوں کی طرف سے خرید و فروخت کے آرڈرز اصل قیمت سے نمایاں طور پر ہٹ سکتے ہیں، جس کے نتیجے میں نقصان ہو سکتا ہے۔

مارکیٹ بنانے کی حکمت عملی کی اقسام

کریپٹو کرنسی مارکیٹ میں، مارکیٹ بنانے والے عام طور پر مارکیٹ کے حالات، تجارتی حجم، اتار چڑھاؤ وغیرہ کی بنیاد پر مارکیٹ بنانے کی مختلف حکمت عملیوں کا انتخاب کرتے ہیں۔ مارکیٹ بنانے کی حکمت عملیوں کی عام اقسام میں شامل ہیں:

  • غیر فعال مارکیٹ بنانے کی حکمت عملی:مارکیٹ بنانے والے مارکیٹ کی گہرائی، تاریخی اتار چڑھاؤ اور دیگر عوامل کی بنیاد پر خرید و فروخت کے آرڈر دیتے ہیں اور مارکیٹ کے لین دین کا انتظار کرتے ہیں۔ اس حکمت عملی کی خصوصیت کم تعدد اور مضبوطی ہے، اور مارکیٹ بنانے والے منافع کے حصول کے لیے مارکیٹ کے اتار چڑھاو پر انحصار کرتے ہیں۔

  • فعال مارکیٹ بنانے کی حکمت عملی: اس حکمت عملی کے تحت، مارکیٹ بنانے والے ڈیل کے امکان کو بڑھانے کے لیے مارکیٹ کے حالات کے مطابق خرید و فروخت کے آرڈرز کی قیمت اور مقدار کو حقیقی وقت میں ایڈجسٹ کرتے ہیں۔ مارکیٹ بنانے والے عام طور پر آرڈرز میں اضافہ کرتے ہیں جب قیمت موجودہ مارکیٹ کی قیمت کے قریب ہوتی ہے تاکہ مارکیٹ کے اتار چڑھاؤ سے بہتر فائدہ اٹھایا جا سکے۔

  • حجم بڑھانے کی حکمت عملی: حکمت عملی کی قسم جس پر یہ مضمون فوکس کرتا ہے۔حجم بڑھانے کی حکمت عملییہ ایک ہی قیمت پر خرید و فروخت کرکے تجارتی حجم بڑھانے کی حکمت عملی ہے۔ مارکیٹ بنانے کی روایتی حکمت عملیوں کے برعکس، اس حکمت عملی کا بنیادی مقصد قیمتوں میں فرق کمانا نہیں ہے، بلکہ بڑی تعداد میں لین دین کے ذریعے تبادلے کی چھوٹ، سطحی چھوٹ یا لیکویڈیٹی کان کنی کے انعامات حاصل کرنا ہے۔

حجم دھونے کی حکمت عملی میں، مارکیٹ بنانے والے ایک ہی قیمت پر خرید و فروخت کے آرڈر دیتے ہیں۔ جب آرڈرز پر عمل درآمد ہوتا ہے، اگرچہ قیمت میں فرق کا کوئی منافع نہیں ہوتا، تجارتی حجم کو تیزی سے جمع کیا جا سکتا ہے۔ اس حکمت عملی کے منافع کا ماڈل مارکیٹ کے ثالثی کے بجائے مکمل طور پر ایکسچینج کے ترغیبی طریقہ کار پر منحصر ہے۔

اہم خصوصیات:

  • ایک ہی قیمت کی تجارت:روایتی مارکیٹ بنانے کی حکمت عملیوں سے مختلف، قیمت خرید اور فروخت کی قیمت یکساں ہے، اور قیمت میں کوئی فرق منافع پیدا نہیں ہوتا ہے۔

  • حجم پر مبنی:اس حکمت عملی کا بنیادی مقصد قیمت کے ثالثی کے بجائے تجارتی حجم کو تیزی سے جمع کرنا ہے۔

  • مراعات پر انحصار:منافع مکمل طور پر ایکسچینج کی چھوٹ کی پالیسی، VIP سطح کی چھوٹ یا مارکیٹ میکر کے ترغیبی پروگراموں پر منحصر ہیں۔

اہم اختلافات: روایتی مارکیٹ سازی کی حکمت عملیوں کے مقابلے میں، واش ٹریڈنگ کی حکمت عملی حقیقی مارکیٹ لیکویڈیٹی فراہم کر کے منافع کماتی نہیں ہے، بلکہ ایکسچینج سے پالیسی انعامات حاصل کرنے کے لیے مصنوعی طور پر تجارتی حجم پیدا کر کے۔ اس حکمت عملی کو کچھ دائرہ اختیار میں تعمیل کے خطرات کا سامنا کرنا پڑ سکتا ہے اور عملی طور پر لاگو ہونے پر اس کا احتیاط سے جائزہ لینے کی ضرورت ہے۔

حجم پر مبنی کاؤنٹر ٹریڈنگ حکمت عملی کی منافع کی منطق

کوڈ کا تجزیہ کرنے سے، ہم یہ جان سکتے ہیں کہ اس حکمت عملی میں قیمت خرید اور فروخت کی قیمت بالکل ایک جیسی ہے:

def make_duiqiao_dict(self, trade_amount):
    mid_price = self.mid_price  # 中间价
    trade_price = round(mid_price, self.price_precision)  # 精准交易价格
    trade_dict = {
        'trade_price': trade_price,  # 买卖都使用同一个价格
        'amount': trade_amount
    }
    return trade_dict

حقیقی منافع کی منطق

1. تجارتی حجم برش کرنے کی حکمت عملی

  • اس حکمت عملی کا بنیادی مقصد بڑی تعداد میں تجارت کے ذریعے تجارتی حجم کو بڑھانا ہے۔
  • تبادلے کی چھوٹ، درجے کی چھوٹ یا لیکویڈیٹی کان کنی کے انعامات حاصل کریں۔
  • مارکیٹ میکر ترغیبی پروگراموں کے ساتھ تبادلے پر لاگو

2. فیس کی واپسی کا طریقہ کار

  • ایکسچینج کی منفی فیس پالیسی پر منحصر ہے (میکر ریٹس منفی ہیں)
  • لیکویڈیٹی فراہم کرکے فیس میں چھوٹ حاصل کریں۔
  • ترجیحی مارکیٹ میکر ریٹس کو سپورٹ کرنے کے لیے تبادلے کی ضرورت ہے۔

قابل اطلاق منظرنامے اور خطرات

✅ قابل اطلاق منظرنامے۔

  • ایکسچینج میں مارکیٹ سازوں کے لیے واضح ترجیحی پالیسیاں ہیں۔
  • اعلی لین دین کے حجم کی ضروریات کے ساتھ VIP سطح کے اپ گریڈ کے لیے موزوں ہے۔
  • لیکویڈیٹی کان کنی یا چھوٹ کی سرگرمیوں کے ساتھ پلیٹ فارم

❌ لاگو نہیں ہے۔

  • چھوٹ کے طریقہ کار کے بغیر تبادلہ
  • اعلی لین دین کی فیس کے ساتھ پلیٹ فارم
  • واش ٹریڈنگ پر واضح پابندیوں کے ساتھ ایکسچینجز

⚠️ خطرے کی یاد دہانی

  • اگر خرید و فروخت کے آرڈرز ایک ہی وقت میں کیے جاتے ہیں، تو عام طور پر ہینڈلنگ فیس کی کٹوتی کے بعد نقصان ہوتا ہے۔
  • اگر تبادلے کی پالیسی بدل جاتی ہے تو حکمت عملی غلط ہو سکتی ہے۔
  • فیس کے اخراجات کی مسلسل نگرانی کی ضرورت ہے۔
  • تعمیل کے خطرات کا سامنا ہو سکتا ہے (کچھ علاقوں میں برش کرنے کے رویے پر پابندیاں ہیں)

دستک پر حکمت عملی کے فریم ورک کا تجزیہ

یہ مضمون جناب زنان کے کوڈ فریم ورک کا حوالہ دے گا تاکہ حجم بڑھانے والی حکمت عملی کا ایک سادہ نفاذ متعارف کرایا جا سکے، جس میں اس بات پر توجہ مرکوز کی جائے گی کہ تبادلے کے ماحول میں ایک ہی قیمت کی خرید و فروخت کی حکمت عملی کے ذریعے تجارتی حجم کو کیسے جمع کیا جائے۔ حکمت عملی کا فریم ورک دو اہم طبقات پر مشتمل ہے:MidClass اورMarketMakerیہ دونوں طبقے تبادلے کے درمیانی سطح کے تعامل اور دستک کی حکمت عملی کے مخصوص عمل کے لیے ذمہ دار ہیں۔

اس حکمت عملی کا فن تعمیر ایک تہہ دار ڈیزائن کو اپناتا ہے، جو ایکسچینج انٹرفیس اور مارکیٹ بنانے کی حکمت عملی کو الگ کرتا ہے تاکہ اس بات کو یقینی بنایا جا سکے کہ نظام میں اچھی توسیع پذیری اور لچک ہے۔ فن تعمیر کے اہم اجزاء میں شامل ہیں:

  1. MidClassایکسچینج کی درمیانی پرت مارکیٹ ڈیٹا، اکاؤنٹ کی معلومات، آرڈر اسٹیٹس وغیرہ حاصل کرنے کے لیے ایکسچینج انٹرفیس کے ساتھ تعامل کے لیے ذمہ دار ہے۔ یہ پرت بیرونی تبادلے کے ساتھ تمام تعاملات کو سمیٹتی ہے تاکہ اس بات کو یقینی بنایا جا سکے کہ تجارتی منطق اور تبادلے کے انٹرفیس کو جوڑا گیا ہے۔
  2. MarketMaker:مارکیٹ بنانے کی حکمت عملی کی کلاس، جو دستک سے تجارت کی حکمت عملی پر عمل درآمد کرنے، زیر التواء آرڈر تیار کرنے، آرڈر کی حیثیت کی جانچ کرنے، حکمت عملی کی حیثیت کو اپ ڈیٹ کرنے وغیرہ کے لیے ذمہ دار ہے۔ یہ مخصوص مارکیٹ سازی اور دستک سے تجارت کی کارروائیاں فراہم کرنے کے لیے ایکسچینج کی درمیانی پرت کے ساتھ تعامل کرتی ہے۔

MidClass

MidClassایکسچینج کی درمیانی پرت کے طور پر، اس کی بنیادی ذمہ داری ایکسچینج کے ساتھ تعامل کو ہینڈل کرنا، تمام بیرونی API کالوں کو سمیٹنا، اور اس کے لیے ایک مختصر انٹرفیس فراہم کرنا ہے۔MarketMakerاستعمال کریں۔ اس کے فن تعمیر میں درج ذیل کلیدی افعال شامل ہیں:

  1. مارکیٹ ڈیٹا کا حصول

    • مارکیٹ سے ریئل ٹائم ڈیٹا حاصل کریں، جیسے کہ مارکیٹ کی قیمت، گہرائی، K-لائن وغیرہ۔ اسے مارکیٹ کے ڈیٹا کو باقاعدگی سے ریفریش کرنے کی ضرورت ہے تاکہ یہ یقینی بنایا جا سکے کہ حکمت عملی پر عمل درآمد کے وقت ڈیٹا اپ ٹو ڈیٹ ہے۔
  2. اکاؤنٹ کی معلومات کا انتظام

    • اکاؤنٹ کی معلومات حاصل کریں، جیسے اکاؤنٹ کا بیلنس، پوزیشن اسٹیٹس، وغیرہ۔ یہ فنڈ مینجمنٹ اور رسک کنٹرول کے لیے بہت ضروری ہے۔
  3. آرڈر مینجمنٹ

    • آرڈرز بنانے، استفسار کرنے اور منسوخ کرنے کے لیے انٹرفیس فراہم کرتا ہے۔ یہ مارکیٹ سازی کی حکمت عملیوں کو عملی جامہ پہنانے کی بنیاد ہے اور اس بات کو یقینی بناتا ہے کہ زیر التواء آرڈرز کو مارکیٹ میں تیار اور منظم کیا جا سکے۔
  4. ڈیٹا اسٹوریج اور اپ ڈیٹ

    • حکمت عملیوں کے استعمال کے لیے ڈیٹا کو مسلسل اپ ڈیٹ کرنے کے لیے ایکسچینجز کے ساتھ روابط برقرار رکھیں۔

میں ان افعال کو سمیٹ کرMidClassاوپر کی مثال میں، آپ اس بات کو یقینی بنا سکتے ہیں کہ تجارتی حکمت عملی کی کلاس (جیسےMarketMaker) تبادلے کے ساتھ تعامل کرنے کے بارے میں فکر کیے بغیر تجارتی حکمت عملیوں کے نفاذ پر توجہ دیں۔ یہ ڈھانچہ سسٹم کی برقراری اور اسکیل ایبلٹی کو بہتر بناتا ہے، جس سے مختلف ایکسچینجز کے لیے سپورٹ شامل کرنا یا موجودہ فنکشنز کو بہتر بنانا آسان ہو جاتا ہے۔

MarketMaker

MarketMakerیہ کراس ٹریڈنگ حکمت عملی کی بنیادی کلاس ہے، جو مارکیٹ سازی کی کارروائیوں اور کراس ٹریڈنگ لین دین کو انجام دینے کے لیے ذمہ دار ہے۔ اس کے فن تعمیر میں درج ذیل اہم ماڈیولز شامل ہیں:

  1. ابتدا

    • تبادلے کی درمیانی پرت کو شروع کریں۔MidClassتبادلے کی بنیادی معلومات حاصل کریں، جیسے تجارتی جوڑے، درستگی، مارکیٹ کی گہرائی وغیرہ۔
    • مارکیٹ بنانے کی حکمت عملی شروع کریں اور ضروری پیرامیٹرز مرتب کریں، جیسے زیر التواء آرڈرز کی تعداد، بولی مانگنے کا پھیلاؤ وغیرہ۔ یہ پیرامیٹرز حکمت عملی کے نفاذ کے طریقہ کار اور اثر کو متاثر کریں گے۔
  2. ڈیٹا ریفریش

    • مارکیٹ کے ڈیٹا کو باقاعدگی سے ریفریش کریں، بشمول ریئل ٹائم اکاؤنٹ کی معلومات، مارکیٹ کی قیمت، گہرائی، K-line، وغیرہ۔ یہ ڈیٹا حکمت عملیوں پر عمل درآمد کے لیے بنیادی معلومات فراہم کرتا ہے۔
    • ریفریش فریکوئنسی کو مارکیٹ کے اتار چڑھاؤ کے مطابق ایڈجسٹ کیا جا سکتا ہے تاکہ مارکیٹ کی تبدیلیوں پر حقیقی وقت کے ردعمل کو یقینی بنایا جا سکے۔
  3. دستک کی حکمت عملی پر عمل درآمد

    • زیر التواء آرڈر جنریشنمارکیٹ کی گہرائی اور موجودہ قیمت کے اتار چڑھاو کی بنیاد پر ایک زیر التواء آرڈر لغت تیار کریں۔ زیر التواء آرڈر لغت میں خرید و فروخت کے آرڈرز کی قیمت اور مقدار ہوتی ہے، جو عام طور پر حکمت عملی کے پیرامیٹرز کی بنیاد پر خود بخود شمار کیے جاتے ہیں۔
    • دستک پر تجارت کا نفاذ:پینڈنگ آرڈر تیار ہونے کے بعد،MarketMakerاسے مارکیٹ میں جمع کرایا جائے گا اور اسی وقت خرید و فروخت کے احکامات پر عمل درآمد کیا جائے گا۔ مقصد ایک ہی قیمت پر خرید و فروخت کرکے تجارتی حجم کو تیزی سے جمع کرنا ہے۔
    • آرڈر کی حیثیت کی جانچ کریں۔:ناک آن ٹرانزیکشن کو انجام دیتے وقت،MarketMakerیہ اس بات کو یقینی بنانے کے لیے کہ زیر التواء آرڈر پر بروقت کارروائی کی جا سکتی ہے، آرڈر کی حیثیت کو مسلسل چیک کرے گا۔ اگر آرڈر پر عمل درآمد نہیں ہو پاتا، تو یہ آرڈر مکمل ہونے تک زیر التواء آرڈر کی قیمت یا مقدار کو ایڈجسٹ کرے گا۔
  4. اسٹیٹس اپ ڈیٹ

    • پالیسی اسٹیٹس اپ ڈیٹ:باقاعدگی سے حکمت عملی کے اسٹیٹس کو اپ ڈیٹ کریں، بشمول ٹریڈنگ والیوم، مکمل شدہ آرڈرز، فیس وغیرہ۔ اس اسٹیٹس کی معلومات کے ذریعے، صارف حقیقی وقت میں حکمت عملی کی کارکردگی کی نگرانی کر سکتے ہیں۔
    • رسک مینجمنٹ: دستک کی حکمت عملی کو مارکیٹ کے مختلف ماحول میں انجام دینے کی ضرورت ہے۔MarketMakerحکمت عملی پر عمل درآمد کے طریقہ کار کو مارکیٹ کے مختلف ماحول کے مطابق ڈھالنے کے لیے متحرک طور پر ایڈجسٹ کیا جائے گا۔

دستک کی حکمت عملی کی منطق کی پنروتپادن

کراس ٹریڈنگ حکمت عملی کا نفاذ درست مارکیٹ ڈیٹا اور تیزی سے عمل درآمد پر منحصر ہے۔MarketMakerریئل ٹائم مارکیٹ کی صورتحال کی نگرانی کرکے اور جوابی آرڈر کے طریقہ کار کو استعمال کرتے ہوئے (ایک ہی قیمت پر خرید و فروخت)، تجارتی حجم کو تیزی سے جمع کرکے اسٹریٹجک اہداف حاصل کیے جاسکتے ہیں۔

ابتدا

موجود MarketMakerکلاس شروع کرنے کے طریقہ کار میں، پہلے ایکسچینج کی درستگی کی معلومات حاصل کریں اور حکمت عملی کے پیرامیٹرز کو شروع کریں، جیسے کہ لین دین کے حجم کی درستگی، قیمت کی درستگی، وغیرہ۔

self.precision_info = self.exchange_mid.get_precision()  # 获取精度信息
self.price_precision = self.precision_info['price_precision']  # 价格精度
self.amount_precision = self.precision_info['amount_precision']  # 交易量精度

دستک کے احکامات کی ایک لغت تیار کریں۔

کراس ٹریڈنگ حکمت عملی کا بنیادی مقصد کراس ٹریڈنگ آرڈرز کی ایک لغت تیار کرنا ہے، بشمول خرید و فروخت کی قیمتیں اور مقدار۔ کوڈ درمیانی قیمت کا حساب لگا کر کراس ٹریڈنگ آرڈرز کی لغت تیار کرتا ہے۔

def make_duiqiao_dict(self, trade_amount):
    mid_price = self.mid_price  # 中间价
    trade_price = round(mid_price, self.price_precision)  # 精准交易价格
    trade_dict = {
        'trade_price': trade_price,
        'amount': trade_amount
    }
    return trade_dict

ایک دستک آن ٹرانزیکشن کو انجام دیں

کراس ٹریڈنگ آرڈرز کی تیار کردہ لغت کے مطابق، کراس ٹریڈنگ ٹرانزیکشن کو انجام دیا جاتا ہے۔create_orderطریقہ، ایک ہی وقت میں خرید آرڈر اور فروخت کے آرڈرز رکھیں۔

def make_trade_by_dict(self, trade_dict):
    if self.position_amount > trade_dict['amount'] and self.can_buy_amount > trade_dict['amount']:
        buy_id = self.exchange_mid.create_order('buy', trade_dict['trade_price'], trade_dict['amount'])  # 挂买单
        sell_id = self.exchange_mid.create_order('sell', trade_dict['trade_price'], trade_dict['amount'])  # 挂卖单
        self.traded_pairs['dui_qiao'].append({
            'buy_id': buy_id, 'sell_id': sell_id, 'init_time': time.time(), 'amount': trade_dict['amount']
        })

آرڈر کی حیثیت چیک کریں۔

باقاعدگی سے آرڈر کی حیثیت کو چیک کریں اور نامکمل آرڈرز پر کارروائی کریں۔GetOrderطریقہ، آرڈر کی حیثیت حاصل کریں، اور آرڈر کی حیثیت کی بنیاد پر آرڈر منسوخ کرنے کا فیصلہ کریں۔ دستک آرڈر کی پروسیسنگ منطق میں بنیادی طور پر درج ذیل اقدامات شامل ہیں:

  1. آرڈر کی حیثیت حاصل کریں۔

    • ایکسچینج انٹرفیس کے ذریعے خرید و فروخت کے آرڈرز کی حیثیت حاصل کریں۔
    • اگر آرڈر کی حیثیت حاصل کرنے میں ناکام ہو جاتا ہے (مثال کے طور پر، آرڈر موجود نہیں ہے یا نیٹ ورک کا مسئلہ ہے)، آرڈر کو منسوخ کر دیا جاتا ہے اور ریکارڈ سے ہٹا دیا جاتا ہے۔
  2. آرڈر کی حیثیت کا فیصلہ

    • آرڈر کی حیثیت کی بنیاد پر، اس بات کا تعین کریں کہ آیا آرڈر مکمل، جزوی طور پر مکمل، یا نامکمل ہے۔
    • آرڈر کے حالات میں شامل ہو سکتے ہیں:
      • 0(ORDER_STATE_PENDING): مکمل نہیں ہوا (پینڈنگ آرڈر)۔
      • 1(ORDER_STATE_CLOSED): مکمل (مکمل تجارت)
      • 2(ORDER_STATE_CANCELED): منسوخ کر دیا گیا۔
      • 3(ORDER_STATE_UNKNOWN): حیثیت نامعلوم ہے۔
  3. آرڈر اسٹیٹس پروسیسنگ

    • دونوں آرڈرز مکمل نہیں ہوئے ہیں۔
      • اگر خرید و فروخت دونوں آرڈرز مکمل نہیں ہوتے ہیں (اسٹیٹس یہ ہے۔0)، پھر پولنگ کے اوقات کے مطابق (current_time % 5 == 0) فیصلہ کرتا ہے کہ آیا آرڈر کو منسوخ کرنا ہے۔
      • آرڈر منسوخ کرنے کے بعد، زیر التواء آرڈر کی گنتی کو اپ ڈیٹ کریں اور آرڈر کو ریکارڈ سے ہٹا دیں۔
    • ایک آرڈر مکمل ہوا، دوسرا مکمل نہیں ہوا۔
      • اگر کوئی آرڈر مکمل ہو جاتا ہے (اسٹیٹس یہ ہے۔1)، اور دوسرا آرڈر مکمل نہیں ہوا ہے (اسٹیٹس یہ ہے۔0)، پھر فیصلہ کریں کہ آیا پولنگ کے اوقات کی بنیاد پر نامکمل آرڈر کو منسوخ کرنا ہے۔
      • اوپن آرڈر کینسل کرنے کے بعد، والیوم اور اوپن آرڈرز کی فہرست کو اپ ڈیٹ کریں اور آرڈر کو ریکارڈ سے ہٹا دیں۔
    • دونوں آرڈرز مکمل ہو چکے ہیں۔
      • اگر خرید و فروخت دونوں آرڈرز مکمل ہو گئے ہیں (اسٹیٹس یہ ہے۔1)، ٹرانزیکشن والیوم کو اپ ڈیٹ کیا جاتا ہے اور آرڈر کو ریکارڈ سے ہٹا دیا جاتا ہے۔
    • آرڈر کی حیثیت نامعلوم ہے۔
      • اگر حکم کی حیثیت نہ ہو۔0واقعی نہیں۔1، یہ نامعلوم حیثیت کے طور پر ریکارڈ کیا جاتا ہے اور لاگ ان ہوتا ہے۔
  4. اپ ڈیٹ ریکارڈ

    • آرڈر اسٹیٹس پروسیسنگ کے نتائج کے مطابق، لین دین کا حجم، نامکمل آرڈر لسٹ اور زیر التواء آرڈرز کی تعداد کو اپ ڈیٹ کریں۔

بعد میں اسٹریٹجک نقطہ نظر

اس آرٹیکل میں پیش کردہ حجم بڑھانے کی حکمت عملی بنیادی طور پر تجارتی فریم ورک کے آرکیٹیکچرل ڈیزائن کو سیکھنے کے لیے استعمال کی گئی ہے، اور اس کی اصل اطلاق کی قدر محدود ہے۔ اگر قارئین حقیقی مارکیٹ بنانے کی حکمت عملیوں میں دلچسپی رکھتے ہیں، تو ہم بعد میں مزید عملی حکمت عملی کا مواد متعارف کرائیں گے:

1. مارکیٹ بنانے کی حکمت عملی

  • بولی پوچھنے کے پھیلاؤ پر مبنی حقیقی ثالثی حکمت عملی
  • قیمت کا فرق حاصل کرنے کے لیے خرید قیمت اور فروخت کی قیمت کے درمیان آرڈر دیں۔
  • روایتی مارکیٹ سازوں کے منافع کے ماڈل کے مطابق مزید

2. متحرک مارکیٹ بنانے کی حکمت عملی

  • مارکیٹ کے اتار چڑھاؤ کی بنیاد پر زیر التواء آرڈر کی قیمتوں کو متحرک طور پر ایڈجسٹ کریں۔
  • انوینٹری مینجمنٹ اور رسک کنٹرول میکانزم کا تعارف
  • مارکیٹ کے مختلف ماحول کے مطابق منڈی بنانا

3. ملٹی لیول مارکیٹ بنانے کی حکمت عملی

  • ایک ساتھ قیمت کی متعدد سطحوں پر آرڈر دیں۔
  • خطرات کو متنوع بنا کر مجموعی واپسی کے استحکام کو بہتر بنائیں
  • پیشہ ورانہ مارکیٹ سازوں کے اصل آپریشن کے قریب

یہ حکمت عملی حقیقی منافع کی منطق اور رسک مینجمنٹ پر زیادہ توجہ مرکوز کرے گی، جو مقداری تاجروں کے لیے زیادہ قیمتی حوالہ فراہم کرے گی۔

اسٹریٹجک آؤٹ لک

واش ٹریڈنگ کی حکمت عملی ایکسچینج کی ترغیبی پالیسی پر انحصار کرتی ہے۔ اگر پالیسی بدل جاتی ہے تو حکمت عملی غلط ہو سکتی ہے۔ لہذا، حکمت عملی کو پالیسی کی تبدیلیوں سے نمٹنے کے قابل ہونے کی ضرورت ہے، جیسے کہ متحرک طور پر فیس کی شرح کی نگرانی کرنا یا واحد انحصار کے خطرے کو کم کرنے کے لیے متعدد منافع کے ماڈل متعارف کرانا۔ اس کے علاوہ، واش ٹریڈنگ کی حکمت عملی کو مارکیٹ میں ہیرا پھیری اور انضباطی خطرات کا سامنا سمجھا جا سکتا ہے۔ اصل ایپلی کیشنز میں، تاجروں کو متعلقہ قوانین اور ضوابط پر پوری توجہ دینے کی ضرورت ہے تاکہ حکمت عملی کی تعمیل کو یقینی بنایا جا سکے اور ریگولیٹری مسائل کی وجہ سے ہونے والے نقصانات سے بچا جا سکے۔

مجھے امید ہے کہ قارئین بنیادی فریم ورک کے بارے میں اپنی سمجھ کی بنیاد پر اپنے تجارتی تصورات اور مارکیٹ کی سمجھ کی بنیاد پر اپنی حکمت عملیوں کو مزید بہتر اور بہتر بنا سکتے ہیں۔ مقداری تجارت کی توجہ مسلسل سیکھنے، مشق اور بہتری میں مضمر ہے۔ میری خواہش ہے کہ آپ سب مقداری تجارت کے راستے پر مسلسل ترقی کرتے رہیں!

حکمت عملی کوڈ

”`python import time, json

class MidClass: def init(self, exchange_instance): “’ 初始化交易所中间层

    Args:
        exchange_instance: FMZ的交易所结构
    '''
    self.init_timestamp = time.time()  # 记录初始化时间
    self.exchange = exchange_instance  # 保存交易所对象
    self.exchange_name = self.exchange.GetName()  # 获取交易所名称
    self.trading_pair = self.exchange.GetCurrency()  # 获取交易对名称(如 BTC_USDT)

def get_precision(self):
    '''
    获取交易对的精度信息

    Returns:
        返回包含精度信息的字典,失败时返回 None
    '''
    symbol_code = self.exchange.GetCurrency()
    ticker = self.exchange.GetTicker(symbol_code)  # 回测系统需要
    exchange_info = self.exchange.GetMarkets()
    data = exchange_info.get(symbol_code)

    if not data:
        Log("获取市场信息失败", GetLastError())
        return None

    # 获取该交易对的精度信息
    self.precision_info = {
        'tick_size': data['TickSize'],                  # 价格精度
        'amount_size': data['AmountSize'],              # 数量精度
        'price_precision': data['PricePrecision'],      # 价格小数位精度
        'amount_precision': data['AmountPrecision'],    # 数量小数位精度
        'min_qty': data['MinQty'],                      # 最小下单数量
        'max_qty': data['MaxQty']                       # 最大下单数量
    }

    return self.precision_info

def get_account(self):
    '''
    获取账户信息

    Returns:
        获取信息成功返回 True,获取信息失败返回 False
    '''

    self.balance = '---'  # 账户余额
    self.amount = '---'  # 账户持仓量
    self.frozen_balance = '---'  # 冻结余额
    self.frozen_stocks = '---'  # 冻结持仓量
    self.init_balance = None
    self.init_stocks = None
    self.init_equity = None

    try:
        account_info = self.exchange.GetAccount()  # 获取账户信息
        self.balance = account_info['Balance']  # 更新账户余额
        self.amount = account_info['Stocks']  # 更新持仓量
        self.frozen_balance = account_info['FrozenBalance']  # 更新冻结余额
        self.frozen_stocks = account_info['FrozenStocks']  # 更新冻结持仓量
        self.equity = self.balance + self.frozen_balance + (self.amount + self.frozen_stocks) * self.last_price

        if not self.init_balance or not self.init_stocks or not self.init_equity:
            if _G("init_balance") and _G("init_balance") > 0 and _G("init_stocks") and _G("init_stocks") > 0:
                self.init_balance = round(_G("init_balance"), 2)
                self.init_stocks = round(_G("init_stocks"), 2)
                self.init_equity = round(_G("init_equity"), 2)
            else:
                self.init_balance = round(self.balance + self.frozen_balance, 2)
                self.init_stocks = self.amount + self.frozen_stocks
                self.init_equity = round(self.init_balance + (self.init_stocks * self.last_price), 2)
                _G("init_balance", self.init_balance)
                _G("init_stocks", self.init_stocks)
                _G("init_equity", self.init_equity)

                Log('获取初始eqity', self.init_equity)

        self.profit = self.equity - self.init_equity
        self.profitratio = round((self.equity - self.init_equity)/self.init_equity, 4) * 100

        return True
    except:
        return False  # 获取账户信息失败

def get_ticker(self):
    '''
    获取市价信息(如买一价、卖一价、最高价、最低价等)

    Returns:
        获取信息成功返回 True,获取信息失败返回 False
    '''
    self.high_price = '---'  # 最高价
    self.low_price = '---'  # 最低价
    self.sell_price = '---'  # 卖一价
    self.buy_price = '---'  # 买一价
    self.last_price = '---'  # 最新成交价
    self.volume = '---'  # 成交量

    try:
        ticker_info = self.exchange.GetTicker()  # 获取市价信息

        self.high_price = ticker_info['High']  # 更新最高价
        self.low_price = ticker_info['Low']  # 更新最低价
        self.sell_price = ticker_info['Sell']  # 更新卖一价
        self.buy_price = ticker_info['Buy']  # 更新买一价
        self.last_price = ticker_info['Last']  # 更新最新成交价
        self.volume = ticker_info['Volume']  # 更新成交量
        return True
    except:
        return False  # 获取市价信息失败

def get_depth(self):
    '''
    获取深度信息(买卖盘的挂单列表)

    Returns:
        获取信息成功返回 True,获取信息失败返回 False
    '''
    self.ask_orders = '---'  # 卖盘挂单列表
    self.bid_orders = '---'  # 买盘挂单列表

    try:
        depth_info = self.exchange.GetDepth()  # 获取深度信息
        self.ask_orders = depth_info['Asks']  # 更新卖盘挂单列表
        self.bid_orders = depth_info['Bids']  # 更新买盘挂单列表
        return True
    except:
        return False  # 获取深度信息失败

def get_ohlc_data(self, period=PERIOD_M5):
    '''
    获取K线信息

    Args:
        period: K线周期,PERIOD_M1 指1分钟, PERIOD_M5 指5分钟, PERIOD_M15 指15分钟,
        PERIOD_M30 指30分钟, PERIOD_H1 指1小时, PERIOD_D1 指一天。
    '''
    self.ohlc_data = self.exchange.GetRecords(period)  # 获取K线数据

def create_order(self, order_type, price, amount):
    '''
    提交一个挂单信息

    Args:
        order_type:挂单类型,'buy'指挂买单,'sell'指挂卖单
        price:挂单价格
        amount:挂单数量

    Returns:
        挂单Id号,可用以取消挂单
    '''
    if order_type == 'buy':
        try:
            order_id = self.exchange.Buy(price, amount)  # 提交买单
        except:
            return False  # 买单提交失败

    elif order_type == 'sell':
        try:
            order_id = self.exchange.Sell(price, amount)  # 提交卖单
        except:
            return False  # 卖单提交失败

    return order_id  # 返回订单ID

def get_orders(self):
    '''
    获取未完成的订单列表

    Returns:
        未完成的订单列表
    '''
    self.open_orders = self.exchange.GetOrders()  # 获取未完成订单
    return self.open_orders

def cancel_order(self, order_id):
    '''
    取消一个挂单信息

    Args:
        order_id:希望取消的挂单ID号

    Returns:
        取消挂单成功返回 True,取消挂单失败返回 False
    '''
    return self.exchange.CancelOrder(order_id)  # 取消订单

def refresh_data(self):
    '''
    刷新信息(账户、市价、深度、K线)

    Returns:
        刷新信息成功返回 'refresh_data_finish!' 否则返回相应刷新失败的信息提示
    '''

    if not self.get_ticker():  # 刷新市价信息
        return 'false_get_ticker'

    if not self.get_account():  # 刷新账户信息
        return 'false_get_account'

    if not self.get_depth():  # 刷新深度信息
        return 'false_get_depth'

    try:
        self.get_ohlc_data()  # 刷新K线信息
    except:
        return 'false_get_K_line_info'

    return 'refresh_data_finish!'  # 刷新成功

class MarketMaker: def init(self, mid_class): “’ 初始化做市策略

    Args:
        mid_class: 交易所中间层对象
    '''
    self.exchange_mid = mid_class  # 交易所中间层对象
    self.precision_info = self.exchange_mid.get_precision()  # 获取精度信息

    self.done_amount = {'dui_qiao': 0}  # 已完成交易量
    self.price_precision = self.precision_info['price_precision']  # 价格精度
    self.amount_precision = self.precision_info['amount_precision']  # 交易量精度

    self.traded_pairs = {'dui_qiao': []}  # 已挂单的交易对
    self.pending_orders = []  # 未完成的订单状态
    self.pending_order_count = 0  # 挂单次数

    self.buy_amount = 0
    self.sell_amount = 0

    self.fee = 0
    self.fee_rate = 0.08 / 100

    self.chart = {
        "__isStock": True,
        "tooltip": {"xDateFormat": "%Y-%m-%d %H:%M:%S, %A"},
        "title": {"text": "挂单数量"},
        "xAxis": {"type": "datetime"},
        "yAxis": {
            "title": {"text": "挂单数量"},
            "opposite": False
        },
        "series": [
            {"name": "挂单买量", "id": "挂单买量", "data": []},
            {"name": "挂单卖量", "id": "挂单卖量", "dashStyle": "shortdash", "data": []}
        ]
    }

def refresh_data(self):
    '''
    刷新数据(账户、市价、深度、K线)
    '''
    self.exchange_mid.refresh_data()  # 刷新交易所数据
    self.position_amount = 0 if isinstance(self.exchange_mid.amount, str) else self.exchange_mid.amount  # 持仓量
    self.available_balance = 0 if isinstance(self.exchange_mid.balance, str) else self.exchange_mid.balance  # 账户余额
    Log('检查ticker', self.exchange_mid.buy_price)
    self.can_buy_amount = self.available_balance / float(self.exchange_mid.buy_price)  # 可买的数量
    self.mid_price = (self.exchange_mid.sell_price + self.exchange_mid.buy_price) / 2  # 中间价

def make_duiqiao_dict(self, trade_amount):

    '''
    生成对敲挂单字典

    Args:
        trade_amount: 每次交易量

    Returns:
        对敲挂单字典列表
    '''
    Log('3制作对敲挂单字典')

    mid_price = self.mid_price  # 中间价

    trade_price = round(mid_price, self.price_precision)  # 精准交易价格

    trade_dict = {
        'trade_price': trade_price,
        'amount': trade_amount
    }

    Log('返回盘口挂单字典:', trade_dict)
    return trade_dict

def make_trade_by_dict(self, trade_dict):
    '''
    根据交易字典执行交易

    Args:
        trade_dict: 交易字典
    '''
    Log('4按照字典开始交易')
    self.refresh_data()  # 刷新数据

    if trade_dict:
        Log('当前账户资金: 币数余额: ', self.position_amount, '资金余额: ', self.can_buy_amount)
        Log('检查开仓: 币数限制: ', self.position_amount > trade_dict['amount'], '资金限制: ', self.can_buy_amount > trade_dict['amount'])
        if self.position_amount > trade_dict['amount'] and self.can_buy_amount > trade_dict['amount']:
            buy_id = self.exchange_mid.create_order('buy', trade_dict['trade_price'], trade_dict['amount'])  # 挂买单
            sell_id = self.exchange_mid.create_order('sell', trade_dict['trade_price'], trade_dict['amount'])  # 挂卖单

            self.traded_pairs['dui_qiao'].append({
                'buy_id': buy_id, 'sell_id': sell_id, 'init_time': time.time(), 'amount': trade_dict['amount']
            })

            self.last_time = time.time()  # 更新上次交易时间

def handle_pending_orders(self):
    '''
    处理未完成的订单
    '''
    pending_orders = self.exchange_mid.get_orders()  # 获取未完成订单
    if len(pending_orders) > 0:
        for order in pending_orders:
            self.exchange_mid.cancel_order(order['Id'])  # 取消未完成订单

def check_order_status(self, current_time):
    '''
    检查订单状态
    current_time: 轮询检查次数
    '''
    Log('1开始订单信息检查')
    Log(self.traded_pairs['dui_qiao'])
    self.buy_pending = 0
    self.sell_pending = 0
    for traded_pair in self.traded_pairs['dui_qiao'].copy():
        Log('检查订单:', traded_pair['buy_id'], traded_pair['sell_id'])

        try:
            buy_order_status = self.exchange_mid.exchange.GetOrder(traded_pair['buy_id'])  # 获取买单状态
            sell_order_status = self.exchange_mid.exchange.GetOrder(traded_pair['sell_id'])  # 获取卖单状态
        except:
            Log(traded_pair, '取消')
            self.exchange_mid.cancel_order(traded_pair['buy_id'])  # 取消买单
            self.exchange_mid.cancel_order(traded_pair['sell_id'])  # 取消卖单
            self.traded_pairs['dui_qiao'].remove(traded_pair)  # 移除订单
            return

        Log('检查订单:', traded_pair['buy_id'], buy_order_status, traded_pair['sell_id'], sell_order_status, [sell_order_status['Status'], buy_order_status['Status']])
        if [sell_order_status['Status'], buy_order_status['Status']] == [0, 0]:
            self.buy_pending += 1
            self.sell_pending += 1
            if current_time % 5 == 0:
                Log('检查挂单,取消挂单(两未完)', buy_order_status['Status'], sell_order_status['Status'], current_time % 5)
                self.exchange_mid.cancel_order(traded_pair['buy_id'])  # 取消买单
                self.exchange_mid.cancel_order(traded_pair['sell_id'])  # 取消卖单
                self.pending_order_count += 1  # 挂单次数加1
                self.traded_pairs['dui_qiao'].remove(traded_pair)  # 移除订单

        elif {sell_order_status['Status'], buy_order_status['Status']} == {1, 0}:
            if buy_order_status['Status'] == ORDER_STATE_PENDING:
                self.buy_pending += 1
            if sell_order_status['Status'] == ORDER_STATE_PENDING:
                self.sell_pending += 1
            if current_time % 5 == 0:
                Log('检查挂单,取消挂单(一未完)', buy_order_status['Status'], sell_order_status['Status'])
                self.done_amount['dui_qiao'] += traded_pair['amount']  # 更新交易量
                if buy_order_status['Status'] == ORDER_STATE_PENDING:
                    self.sell_amount += traded_pair['amount']
                    self.fee += sell_order_status['Amount'] * self.fee_rate * sell_order_status['Price']
                    Log('取消该买订单,增加未完成买列表', traded_pair['buy_id'])
                    self.exchange_mid.cancel_order(traded_pair['buy_id'])  # 取消买单
                    self.pending_orders.append(['buy', buy_order_status['Status']])  # 记录未完成订单
                    Log('清除前:', self.traded_pairs['dui_qiao'])
                    Log('清除id:', traded_pair)
                    self.traded_pairs['dui_qiao'].remove(traded_pair)  # 移除订单
                    Log('清除后:', self.traded_pairs['dui_qiao'])
                elif sell_order_status['Status'] == ORDER_STATE_PENDING:
                    self.buy_amount += traded_pair['amount']
                    self.fee += buy_order_status['Amount'] * self.fee_rate * buy_order_status['Price']
                    Log('取消该卖订单,增加未完成卖列表', traded_pair['sell_id'])
                    self.exchange_mid.cancel_order(traded_pair['sell_id'])  # 取消卖单
                    self.pending_orders.append(['sell', sell_order_status['Status']])  # 记录未完成订单
                    Log('清除前:', self.traded_pairs['dui_qiao'])
                    Log('清除id:', traded_pair)
                    self.traded_pairs['dui_qiao'].remove(traded_pair)  # 移除订单
                    Log('清除后:', self.traded_pairs['dui_qiao'])

        elif [sell_order_status['Status'], buy_order_status['Status']] == [1, 1]:
            Log('两订单都已完成')
            self.buy_amount += traded_pair['amount']
            self.sell_amount += traded_pair['amount']
            self.fee += buy_order_status['Amount'] * self.fee_rate * buy_order_status['Price']
            self.fee += sell_order_status['Amount'] * self.fee_rate * sell_order_status['Price']
            Log('完成状态:', buy_order_status['Status'], sell_order_status['Status'], traded_pair['amount'])
            self.done_amount['dui_qiao'] += 2 * traded_pair['amount']  # 更新交易量
            self.traded_pairs['dui_qiao'].remove(traded_pair)  # 移除订单
        else:
            Log('两订单处于未知状态:', buy_order_status, sell_order_status)
            Log('未知订单状态:', buy_order_status['Status'], sell_order_status['Status'])
            Log('未知订单信息:', traded_pair)

def update_status(self):

    self.exchange_mid.refresh_data()

    t