Ajari python untuk memanggil GetOrder ((order_id).Status) berulang kali dalam sementara, menggunakan time.time untuk melacak masalah perubahan order

Penulis:pemburu1015, Dibuat: 2018-03-03 21:22:27, Diperbarui: 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 banyak

Mimpi kecilLihat kode di bawah ini. `` order_result = exchange.Sell ((fee,size) # daftar bawah Log (('Pesenan sudah dibuat') if order_result==None: # tidak dikembalikan ID pesanan Kembali 0 if order_result!=None: # Hasil pesanan berhasil time1=time.time() # catatan Tingkat detik Timestamp while True: # Penghakiman lingkaran order_status=exchange.GetOrder ((order_result).Status # Membaca status pesanan if order_status==None and time.time() -time1>2: # dan setelah memesan, membaca berputar Menghakimi waktu sebelum status pesanan dibandingkan, mendeteksi apakah lebih dari 2 detik Log (('order status failed to obtain') # Kembali 0 if order_status!=None: # Dapatkan status berhasil if time.time() -time1>2 and (order_status==ORDER_STATE_CANCELED or order_status==ORDER_STATE_PENDING): # Pesan akan ditunda atau dibatalkan setelah 2 detik Log (("Pemesanan tertunda atau dibatalkan") Kembali 0 if order_status==ORDER_STATE_CLOSED: # Pemesanan selesai Log (("Pesenan selesai") return 1 `` Logika seharusnya tidak ada masalah. Masalah yang ditemukan mungkin data pesanan yang dikembalikan oleh GetOrder yang mengandung status lain, misalnya mungkin status yang tidak diketahui, yaitu di mana Anda beroperasi. Disarankan untuk menambahkan Log setelah kalimat order_status = exchange.GetOrder (order_result).

Mimpi kecilDi sini, Anda dapat menemukan beberapa contoh dari beberapa situs web yang menawarkan layanan ini, termasuk situs web yang menawarkan layanan ini.

pemburu1015Pada saat posting, editor melakukan kesalahan, dan kode memastikan bahwa variabelnya konsisten. Disk nyata telah diuji berkali-kali, dan tidak bisa keluar dari GetOrder, tidak akan memberikan kesalahan, dan tidak akan mengembalikan LOG.

Mimpi kecilApakah kode Anda salah tulis, ID seharusnya tidak didefinisikan, hanya ini yang muncul di dalam kode; tidak ada initialization dan tidak ada penugasan. https://dn-filebox.qbox.me/d89332ffbe84fa2cdcac442649edb35f4f61a3cc.png

pemburu1015Saya telah mencoba beberapa kali dalam dua hari terakhir, dan menemukan bahwa setelah pemicu kalimat exchange.GetOrder, tidak ada yang kembali, atau jika Anda masuk ke kalimat ini, program akan mati dan tidak keluar, sehingga semua konten cetak yang saya atur tidak dapat dicetak. def main (: #Log ((exchange.GetAccount)) time1=time.time ()) Log (('rekam waktu 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 Apa yang terjadi? account=exchange.GetAccount (dalam bahasa Inggris). Apa yang terjadi? sell_order_id = exchange.Sell ((orders_buy1*0.999, 0.1); # melakukan pesanan time1=time.time() # mencatat waktu selesai if sell_order_id== Tidak ada: Log (('nomor pesanan kosong') if sell_order_id!=None: # jika berhasil mendapatkan nomor pesanan order_back_message_last=None # Mencatat terakhir kali Menanyakan isi pesan yang dikembalikan untuk pesanan (Initialized to None) Apa yang terjadi? while True: # masuk ke dalam loop while untuk melacak informasi pesanan dengan GetOrder order_back_message=exchange.GetOrder ((order_result) Informasi yang dikembalikan oleh #GetOrder ((semua) Log (('mencari order kembali konten adalah', order_back_message) # brainless output order kembali konten Apa yang terjadi? if order_back_message!=order_back_message_last: # Jika pesan order ini tidak sesuai dengan pesan order sebelumnya, log akan diekspor dan diperbarui order_back_message_last Log (('mencari pesanan kembali dengan', order_back_message) order_back_message_last=order_back_message Perintah_kembali_pesan Apa yang terjadi? Apa yang terjadi? order_status=order_back_message.Status # perintah mengembalikan data struktur untuk mengekstrak Status (tidak perlu melihat dari awal karena tidak berjalan di atas) order_status=exchange.GetOrder ((sell_order_id).Status Log ((order_status) if order_status==None and time.time (() -time1>2: Log (('Pengambilan status pesanan gagal') break if order_status!=Tidak ada: if order_status ==ORDER_STATE_CLOSED: jika status order_status ==== ==== Jika status order_status ==== ==== Jika status order_status ==== ==== Jika status order_status ==== ==== ==== Jika status order_status ==== ==== ==== ==== ========================================================================================================================================================================================================================================================================================================================================================================================== Log (('Hedging - Sukses') break #returnTrue 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 (('waktu sekarang=',time.time(), 'waktu awal=',time1)

Mimpi kecilYa, beberapa bursa memiliki status standar dalam berbagai dokumen non-BotVS. BotVS didefinisikan sebagai status yang tidak diketahui. Anda dapat melihat nilai spesifik status setelah kalimat order_status. Anda dapat melihat apa nilai status pesanan tertentu, dan kemudian menilai masalah ini (apa penyebab masuk ke dalam lingkaran mati).

pemburu1015@cilokilom, saya di gateIO, masalah ini ditemukan beberapa hari yang lalu, dan saya menulis kode sederhana untuk menguji kembali hasilnya dan rasanya tidak ada masalah. https://dn-filebox.qbox.me/97f571e4222ee9c61bd6e3cb203af319b11a8c72.png