پائیتھون کو while میں بار بار GetOrder ((order_id).Status کو کال کرنے کا طریقہ سکھائیں، time.time کا استعمال کرتے ہوئے آرڈر کی تبدیلیوں کا سراغ لگانے کے لئے

مصنف:شکاری1015, تخلیق: 2018-03-03 21:22:27, تازہ کاری: 2018-03-03 21:23:29

请教各位,我想在while中跟踪订单变化,循环之前保存当时时间time1,while开始后当订单状态在2秒后(time.time()-time1>2)的状态还是pending就return 0,如果是ORDER_STATE_CLOSED,那就return 1,返回完成。
但是在实盘测试中,发现程序会进入无限循环不会停下来,最后一条信息就是“订单已下”

代码附下,请大大帮忙释疑
order_result =exchange.Sell(fee,size)
Log('订单已下')
    if order_result==None:
        return 0
    if order_result!=None:
        time1=time.time()
        while True:
            order_status=exchange.GetOrder(order_result).Status
            if order_status==None and time.time()-time1>2:
               Log('订单状态获取失败')
                return 0
            if order_status!=None:
                if time.time()-time1>2 and (order_status==ORDER_STATE_CANCELED or order_status==ORDER_STATE_PENDING):
                    Log("订单挂单或被取消")
                    return 0
                if order_status==ORDER_STATE_CLOSED:
                    Log("订单完成")
                    return 1

مزید

چھوٹا سا خوابمندرجہ ذیل کوڈ کو دیکھیں `` order_result = exchange.Sell ((fee,size) # نیچے کی فہرست Log (('آرڈر دیا گیا ہے') if order_result==None: # واپس نہیں کیا گیا آرڈر ID واپسی 0 if order_result!=None: # آرڈر کامیاب time1=time.time() # ریکارڈ سیکنڈ کی سطح ٹائم ٹیبل while True: #دوری کا فیصلہ order_status=exchange.GetOrder ((order_result).Status # آرڈر کی حالت پڑھتا ہے if order_status==None and time.time() -time1>2: # اور آرڈر کرنے کے بعد ، لوکل ریڈنگ۔ آرڈر کی حالت سے پہلے کا وقت کا اندازہ لگائیں ، اس بات کا پتہ لگائیں کہ آیا یہ 2 سیکنڈ سے زیادہ ہے یا نہیں۔ لاگ (('آرڈر کی حیثیت حاصل کرنے میں ناکام') # واپسی 0 if order_status!=None: # حالت حاصل کرنے میں کامیابی if time.time() -time1>2 and (order_status==ORDER_STATE_CANCELED or order_status==ORDER_STATE_PENDING): # آرڈر 2 سیکنڈ کے بعد لگانے یا منسوخ کرنے کے لئے لاگ (("آرڈر کی فہرست یا منسوخ") واپسی 0 if order_status==ORDER_STATE_CLOSED: # آرڈر مکمل ہو گیا لاگ (("آرڈر مکمل") واپسی 1 `` اس کا مطلب یہ ہے کہ آپ کو اس کے بارے میں کچھ بھی نہیں جاننا چاہئے۔ مسئلہ یہ ہے کہ آپ کے آرڈر کے اعداد و شمار کو GetOrder کے ذریعہ واپس کیا جا سکتا ہے، جس میں دیگر حالتیں ہیں، جیسے نامعلوم حالت، جس میں آپ کو خاص طور پر آپریشن کیا جا سکتا ہے. یہ سفارش کی جاتی ہے کہ order_status=exchange.GetOrder ((order_result).Status جملے کے بعد لاگ ((order_status) شامل کریں تاکہ حالت کی مخصوص قیمت دیکھی جاسکے۔

چھوٹا سا خواباس کے علاوہ ، ہم نے ایک بار پھر آپ کو بتایا کہ آپ کے پاس کون سا ایکسچینج ہے ، آپ کے پاس کون سے جوڑے ہیں ، اور آپ کے پاس کون سے کوڈ ہیں۔

شکاری1015پوسٹ بھیجتے وقت ایڈیٹر نے غلطی کی ، کوڈ میں متغیرات کی یکسانیت کا تعین کیا۔ اصلی ڈسک نے بار بار ٹیسٹ کیا ، یا تو گیٹ آرڈر میں پھنس گیا ، نہ ہی غلطی کی اطلاع دی ، اور نہ ہی LOG کی واپسی ہوئی۔

چھوٹا سا خوابکیا آپ کا کوڈ غلط لکھا گیا ہے؟ کیا یہ آئی ڈی غیر متعین ہونا چاہئے؟ کیا آپ کا کوڈ غلط لکھا گیا ہے؟ کیا آپ کا کوڈ غلط لکھا گیا ہے؟ https://dn-filebox.qbox.me/d89332ffbe84fa2cdcac442649edb35f4f61a3cc.png

شکاری1015میں نے دو دن میں کئی بار ڈسک کی جانچ پڑتال کی اور پایا کہ تبادلے.GetOrder () جملے کو ٹرگر کرنے کے بعد ، بالکل واپس نہیں آیا ، یا پھر اس جملے میں داخل ہونے کے بعد ، پروگرام پھنس گیا اور اس میں نہیں نکلا ، جس کی وجہ سے میں نے جو کچھ بھی ترتیب دیا ہے وہ نہیں چھپایا گیا۔ def اہم (: #Log ((exchange.GetAccount)) time1=time.time (() log ((' ریکارڈنگ وقت '،time1) depth = _C ((exchange.GetDepth) ؛ orders_buy1=depth.Bids[0].Price orders_buy2=depth.Bids[1].Price orders_buy3=depth.Bids[2].Price orders_sell1=depth.Asks[0].Price orders_sell2=depth.Asks[1]. قیمت orders_sell3=depth.Asks[2].Price کیا آپ جانتے ہیں؟ account=exchange.GetAccount (() کیا آپ جانتے ہیں؟ sell_order_id = exchange.Sell ((orders_buy1*0.999, 0.1) ؛ # آرڈر کریں time1=time.time() # ریکارڈ کرنے کے لئے صرف مکمل وقت ٹیگ اگر sell_order_id==None: Log (('آرڈر نمبر خالی ہے') if sell_order_id!=None: # اگر آرڈر نمبر کامیابی سے حاصل کیا گیا ہے order_back_message_last=None # آخری بار ریکارڈ کریں آرڈر کی واپسی کی معلومات کا مواد دریافت کریں ((None میں ابتدائیہ) کیا آپ جانتے ہیں؟ while True: # داخل کریں while لوپ، GetOrder کے ساتھ آرڈر کی معلومات کو ٹریک کریں order_back_message=exchange.GetOrder ((order_result) #GetOrder کے واپس آنے والے پیغامات (تمام) لاگ (('کوائری آرڈر کی واپسی کا مواد'،order_back_message) # بے دماغ آؤٹ پٹ آرڈر کی واپسی کا مواد کیا آپ جانتے ہیں؟ if order_back_message!=order_back_message_last: # اگر اس آرڈر کی معلومات پچھلے آرڈر سے متضاد ہیں تو لاگ آؤٹ کریں اور آرڈر_بیک_میسج_لاسٹ کو اپ ڈیٹ کریں لاگ (('کوائری آرڈر واپس کیا گیا ہے'، order_back_message) order_back_message_last=order_back_message آرڈر_بیک_میسیج کیا آپ جانتے ہیں؟ کیا آپ جانتے ہیں؟ order_status=order_back_message.Status# آرڈر ڈیٹا ڈھانچے میں واپس آتا ہے اور اس میں سے Status نکالتا ہے۔ (اس کے بعد آپ کو اس کو دیکھنے کی ضرورت نہیں ہوگی کیونکہ اس کے اوپر سے گزرنے کی ضرورت نہیں ہے) order_status=exchange.GetOrder ((sell_order_id) ۔ حیثیت لاگ ان کریں (ترتیب کی حیثیت) if order_status==None and time.time (() -time1>2: لاگ (('آرڈر کی حیثیت حاصل کرنے میں ناکام') break if order_status!=کوئی نہیں: if order_status==ORDER_STATE_CLOSED: اگر آپ کے پاس آرڈر کی حیثیت نہیں ہے Log (('ہیجنگ - کامیابی') break #return True elif time.time (() -time1>2 and (order_status ==ORDER_STATE_CANCELED or order_status ==ORDER_STATE_PENDING): Log (('ہیجنگ - ناکامی') break #return غلط #Log ((exchange.GetAccount)) #Log (('xunhuan') #PD_SHORTLog (('موجودہ وقت=',time.time() ،' ابتدائی وقت=',time1)

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

شکاری1015@چلوچلو خواب,منڈھا,میں گیٹ آئی او میں ہوں,یہ مسئلہ کچھ دن سے پتا چل رہا ہے,اور میں نے سادہ کوڈ بھی لکھا ہے اور اس کا تجربہ بھی کیا ہے. https://dn-filebox.qbox.me/97f571e4222ee9c61bd6e3cb203af319b11a8c72.png