Ajar Python untuk memanggil GetOrder ((order_id).Status) berulang kali dalam sementara, menggunakan time.time untuk mengesan perubahan dalam pesanan

Penulis:pemburu1015, Dicipta: 2018-03-03 21:22:27, Dikemas kini: 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

Lebih lanjut

Mimpi kecilLihat kod di bawah. `` order_result = exchange.Sell ((fee,size) # senarai bawah Log (('pesanan telah dibuat') if order_result==None: # tidak dikembalikan ID pesanan return 0 if order_result!=None: # pesanan berjaya time1=time.time() # rekod Tingkat saat Tanda masa while True: #Penghakiman berputar order_status=exchange.GetOrder ((order_result).Status # Membaca status pesanan if order_status==None and time.time() -time1>2: # dan selepas memesan, membaca berputar Menghakimi masa sebelum status pesanan berbanding, mengesan sama ada lebih daripada 2 saat Log (('Pengambilan status pesanan gagal') # return 0 if order_status!=None: # Memperoleh status berjaya if time.time() -time1>2 and (order_status==ORDER_STATE_CANCELED or order_status==ORDER_STATE_PENDING): # Perintah akan ditunda atau dibatalkan selepas 2 saat Log (("Pesenan yang tertera atau dibatalkan") return 0 if order_status==ORDER_STATE_CLOSED: # Perintah selesai Log (("Pesenan selesai") return 1 `` Logika seharusnya tidak ada masalah. Masalah yang dijumpai mungkin data pesanan yang dikembalikan oleh GetOrder yang mengandungi keadaan lain, seperti mungkin keadaan yang tidak diketahui, iaitu anda beroperasi di bursa mana. Ia disyorkan untuk melihat nilai tertentu status selepas order_status=exchange.GetOrder.

Mimpi kecilDi mana pertukaran, apa pasangan dagangan, dan juga kod yang menimbulkan persoalan.

pemburu1015Pengeditan membuat kesilapan semasa menghantar, kod memastikan pembolehubah adalah konsisten. Disk sebenar telah diuji berulang kali, ia terjebak dalam GetOrder tidak dapat keluar, tidak akan membuat kesalahan, tidak akan mengembalikan LOG.

Mimpi kecilAdakah kod anda salah tulis, ID ini seharusnya tidak ditakrifkan, hanya ini yang muncul dalam kod; tiada initialization dan tiada penugasan; https://dn-filebox.qbox.me/d89332ffbe84fa2cdcac442649edb35f4f61a3cc.png

pemburu1015Saya telah menguji beberapa kali pada hari-hari ini dan mendapati bahawa apabila pernyataan exchange.GetOrder () telah dicetuskan, ia tidak kembali sama sekali, atau jika anda memasuki pernyataan ini, program itu terjebak dan tidak keluar, menyebabkan semua kandungan cetak yang saya tetapkan tidak dicetakan. def main (: #Log ((exchange.GetAccount)) time1=time.time (() Log (('rekod masa adalah',time1) depth = _C ((exchange.GetDepth); order_buy1=depth.Bids[0].Price order_buy2=depth.Bids[1]. Harga order_buy3=depth.Bids.[2] Harga order_sell1=depth.Asks[0].Price order_sell2=depth.Asks[1]. Harga order_sell3=depth.Asks.[2] Harga Pergilah. account=exchange.GetAccount ((() Pergilah. sell_order_id = exchange.Sell ((orders_buy1*0.999, 0.1); # membuat pesanan time1=time.time() # merakam ketik masa selesai if sell_order_id== Tiada: Log (('Nombor pesanan kosong') if sell_order_id!=None: # jika berjaya mendapatkan nombor pesanan order_back_message_last=None # Mencatatkan kali terakhir Mengesahkan maklumat pesanan yang dikembalikan (Initialize to None) Pergilah. while True: # masuk dalam gelung while, menggunakan GetOrder untuk mengesan maklumat pesanan order_back_message=exchange.GetOrder ((order_result) Maklumat pulangan #GetOrder ((semua) Log (('mencari pesanan dikembalikan sebagai', order_back_message) # tanpa otak output pesanan dikembalikan Pergilah. if order_back_message!=order_back_message_last: # jika pesanan ini tidak sepadan dengan pesanan sebelumnya, log akan diekspor dan diupdate order_back_message_last Log (('mencari pesanan dikembalikan sebagai',order_back_message) order_back_message_last=order_back_message Pergilah. Pergilah. order_status=order_back_message.Status # perintah mengembalikan status (tidak perlu melihat dari sini, kerana tidak melalui) order_status=exchange.GetOrder ((sell_order_id).Status Log ((order_status) if order_status == Tiada dan time.time (() -time1>2: Log (('Tidak berjaya mendapatkan status pesanan') break if order_status!= Tiada: if order_status ==ORDER_STATE_CLOSED: Log (('Hedging - kejayaan') break #return True elif time.time() -time1>2 and (order_status==ORDER_STATE_CANCELED or order_status==ORDER_STATE_PENDING): Log (('Hedging - gagal') break #return False #Log ((exchange.GetAccount)) #Log (('xunhuan') #PD_SHORTLog (('masa kini=',time.time(),'masa awal=',time1)

Mimpi kecilYa, beberapa bursa mempunyai status pesanan standard dalam pelbagai dokumen bukan BotVS, BotVS ditakrifkan sebagai status tidak diketahui, anda boleh melihat nilai tertentu status selepas order_status=exchange.GetOrder. Dengan melihat nilai status pesanan tertentu, kita boleh menilai soalan ini (apa yang menyebabkan anda memasuki kitaran mati).

pemburu1015@cilokcilom, saya di gateIO, masalah ini telah dijumpai beberapa hari yang lalu, dan saya telah menulis kod yang mudah untuk menguji semula hasilnya dan tidak ada masalah. https://dn-filebox.qbox.me/97f571e4222ee9c61bd6e3cb203af319b11a8c72.png