Python को 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) # नीचे सूचीबद्ध करें लॉग (('आदेश दिया गया है') 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: # और ऑर्डर के बाद, लूप रीडिंग ऑर्डर की स्थिति से पहले का समय निर्धारित करता है, यह पता लगाता है कि क्या यह 2 सेकंड से अधिक है लॉग (('ऑर्डर स्थिति प्राप्त करने में विफल') # return 0 if order_status!=None: # प्राप्त स्थिति सफल if time.time() -time1>2 and (order_status==ORDER_STATE_CANCELED or order_status==ORDER_STATE_PENDING): # ऑर्डर 2 सेकंड के बाद लटका या रद्द किया जाता है लॉग (("ऑर्डर पेंडिंग या रद्द") return 0 if order_status ==ORDER_STATE_CLOSED: # आदेश पूरा हो गया लॉग (("आदेश पूरा हो गया") return 1 `` तर्क में कोई समस्या नहीं होनी चाहिए। समस्या यह हो सकती है कि GetOrder द्वारा लौटाए गए ऑर्डर डेटा में अन्य स्थिति हो सकती है, जैसे कि एक अज्ञात स्थिति हो सकती है, जो कि आप किस एक्सचेंज पर काम कर रहे हैं। यह अनुशंसा की जाती है कि order_status=exchange.GetOrder ((order_result).Status) वाक्य के बाद Log ((order_status) जोड़कर स्थिति के विशिष्ट मानों को देखें।

छोटे सपनेयह एक बहुत ही दिलचस्प विषय है, और यह एक बहुत ही महत्वपूर्ण विषय है, क्योंकि यह एक बहुत ही महत्वपूर्ण विषय है।

शिकारी1015पोस्टिंग के समय संपादक ने गलती की, कोड में चर की एकजुटता का निर्धारण किया गया। वास्तविक डिस्क ने कई बार परीक्षण किया, या तो गेटऑर्डर में अटक गया, बाहर नहीं आया, कोई त्रुटि नहीं हुई, कोई लॉग वापस नहीं आया।

छोटे सपनेक्या आपका कोड गलत लिखा गया है, यह आईडी अपरिभाषित होनी चाहिए, कोड में केवल यह जगह दिखाई देती है; कोई आरंभिकरण नहीं है और कोई असाइनमेंट नहीं है। https://dn-filebox.qbox.me/d89332ffbe84fa2cdcac442649edb35f4f61a3cc.png

शिकारी1015डैडी, मैंने इन दो दिनों में कई बार परीक्षण किया और पाया कि एक्सचेंज.गेटऑर्डर () इस कथन को ट्रिगर करने के बाद वापस नहीं आया, या फिर एक बार इस कथन में प्रवेश करने के बाद प्रोग्राम अंदर से चिपका हुआ था, जिसके परिणामस्वरूप मैंने जो कुछ भी सेट किया था, वह प्रिंट नहीं हुआ। def main (: #Log ((exchange.GetAccount))) time1=time.time (() लॉग ((' रिकॉर्ड समय है, समय1) depth = _C ((exchange.GetDepth); orders_buy1=depth.Bids[0].Price ऑर्डर की गहराई orders_buy2=depth.Bids[1] मूल्य orders_buy3=depth.Bids[2] मूल्य orders_sell1=depth.Asks[0].Price ऑर्डर की गहराई orders_sell2=depth.Asks[1]. मूल्य orders_sell3=depth.Asks[2] मूल्य .. account=exchange.GetAccount (() .. sell_order_id = exchange.Sell ((orders_buy1*0.999, 0.1); # ऑर्डर करें time1=time.time() # रिकॉर्ड करने के लिए आदेश पूरा समय टैग यदि sell_order_id==None: लॉग (('ऑर्डर नंबर खाली है') 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_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).स्थिति लॉग ((order_status) if order_status ==None and time.time() -time1>2: लॉग (('ऑर्डर की स्थिति प्राप्त करने में विफल') ब्रेक if order_status!=कोई नहींः if order_status ==ORDER_STATE_CLOSED: आदेश की स्थिति Log (('हेजिंग खरीद - सफलता') ब्रेक #return True elif time.time() -time1>2 and (order_status ==ORDER_STATE_CANCELED or order_status ==ORDER_STATE_PENDING): Log (('हेजिंग खरीद - विफलता') ब्रेक #return गलत #Log ((exchange.GetAccount))) #Log (('xunhuan') #PD_SHORTLog (('वर्तमान समय=',time.time(),' प्रारंभिक समय=',time1)

छोटे सपनेकुछ एक्सचेंजों के ऑर्डर स्टेटस में विभिन्न गैर-बॉटवीएस दस्तावेजों में मानक स्थिति होती है, बोटवीएस को अज्ञात स्थिति के रूप में परिभाषित किया गया है, आप स्थिति के विशिष्ट मान को देखने के लिए order_status=exchange.GetOrder (order_result) के बाद Log (order_status) जोड़ सकते हैं। यह देखने के लिए कि ऑर्डर की स्थिति का मूल्य क्या है, और इस प्रकार इस प्रश्न का निर्णय लेना (क्या कारणों से मृत्यु चक्र में प्रवेश किया गया है) ।

शिकारी1015@छोटाछोटा सपना सपना बड़ा, मैं गेटआईओ में हूं, यह समस्या कई दिनों से पता चली है, और मैंने एक सरल कोड लिखा है और परिणामों का परीक्षण किया है और कोई समस्या नहीं है। https://dn-filebox.qbox.me/97f571e4222ee9c61bd6e3cb203af319b11a8c72.png