Tài nguyên đang được tải lên... tải...

Hãy dạy python gọi GetOrder ((order_id).Status) nhiều lần trong while, sử dụng time.time để theo dõi các vấn đề thay đổi lệnh

Tác giả:hunter1015, Tạo: 2018-03-03 21:22:27, Cập nhật: 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

Thêm nữa

Những nhà phát minh định lượng - những giấc mơ nhỏNhìn vào mã dưới đây `` order_result = exchange.Sell ((fee,size) # Đặt hàng Log (('đã đặt hàng') if order_result==None: # không trả về return 0 if order_result!=None: # Đặt hàng thành công time1=time.time() # ghi lại Cấp độ giây while True: # phán đoán vòng tròn order_status=exchange.GetOrder ((order_result).Status # Đọc trạng thái của đơn đặt hàng if order_status==None and time.time() -time1>2: # và sau khi đặt hàng, đọc vòng lặp Xác định thời gian trước khi đặt hàng so với trạng thái, phát hiện liệu có quá 2 giây không Log (('Tình trạng đặt hàng không đạt được') # return 0 if order_status!=None: # Nhận trạng thái thành công if time.time() -time1>2 and (order_status==ORDER_STATE_CANCELED or order_status==ORDER_STATE_PENDING): # Đặt hàng được treo hoặc hủy sau 2 giây Log (("Đặt hàng đang được đặt hàng hoặc đã bị hủy") return 0 if order_status==ORDER_STATE_CLOSED: # Đặt hàng hoàn tất Log (("Đơn đặt hàng hoàn tất") return 1 `` Có lẽ logic là không có vấn đề. Vấn đề phát hiện có thể là dữ liệu đặt hàng mà GetOrder trả về có trạng thái khác, ví dụ như có thể có trạng thái không rõ, cụ thể là bạn đang hoạt động trên sàn giao dịch nào. Chúng tôi khuyên bạn nên thêm Log sau câu lệnh order_status=exchange.GetOrder.

Những nhà phát minh định lượng - những giấc mơ nhỏNhững người tham gia cuộc thảo luận này đã được mời đến tham gia các cuộc thảo luận trên trang web của họ.

hunter1015Khi đăng bài, biên tập viên đã mắc lỗi, xác định các biến trong mã là phù hợp.

Những nhà phát minh định lượng - những giấc mơ nhỏCó phải mã của bạn đã viết sai, ID này không được xác định, chỉ có vị trí này trong mã. Không initialize và không gán. https://dn-filebox.qbox.me/d89332ffbe84fa2cdcac442649edb35f4f61a3cc.png

hunter1015Tôi đã thử nghiệm một vài lần trong hai ngày và nhận thấy rằng sau khi lệnh exchange.GetOrder được kích hoạt, nó hoàn toàn không quay lại, hoặc một lần nhập vào lệnh này, chương trình bị kẹt và không xuất hiện, dẫn đến tất cả các nội dung in mà tôi đã thiết lập không được in. def main (: #Log ((exchange.GetAccount)) time1=time.time (() Log ((' ghi lại thời gian là',time1) depth = _C ((exchange.GetDepth); orders_buy1=depth.Bids[0].Price orders_buy2=depth.Bids[1]. Giá orders_buy3=depth.Bids[2]. Giá orders_sell1=depth.Asks[0].Price orders_sell2=depth.Asks[1]. Giá orders_sell3=depth.Asks[2]. Giá Không. account=exchange.GetAccount ((() Không. sell_order_id = exchange.Sell ((orders_buy1*0.999, 0.1); # đặt hàng time1=time.time() # ghi lại đơn hoàn thành thời gian if sell_order_id== Không có: Log (('đơn đặt hàng trống') if sell_order_id!=None: # nếu có được số đơn đặt hàng order_back_message_last=None # ghi lại lần cuối truy vấn nội dung thông tin trả về của lệnh (được khởi tạo thành None) Không. while True: # vào vòng lặp while, theo dõi thông tin đặt hàng bằng GetOrder order_back_message=exchange.GetOrder ((order_result) Thông tin được trả về của #GetOrder ((tất cả)) Log (('query order returned content is',order_back_message) # không bộ não xuất lệnh trả lại nội dung Không. if order_back_message!=order_back_message_last: # Nếu thông tin của đơn đặt hàng này không phù hợp với lần trước, Log xuất và cập nhật order_back_message_last Log (('query order returned content as',order_back_message) order_back_message_last=order_back_message Không. Không. order_status=order_back_message.Status # lệnh trả về extract Status trong cấu trúc dữ liệu ((không cần xem từ đầu, vì nó đã không đi qua) order_status=exchange.GetOrder ((sell_order_id).Status Log ((order_status) if order_status== Không và time.time (() -time1>2: Log (('Triều kiện đặt hàng không đạt được') break if order_status!= Không có: if order_status ==ORDER_STATE_CLOSED: Log (('được mua rủi ro - thành công') break #returnTrue elif time.time() -time1>2 and (order_status==ORDER_STATE_CANCELED or order_status==ORDER_STATE_PENDING): Log (('đóng tiền - thất bại') break #return False #Log ((exchange.GetAccount)) #Log (('xunhuan') #PD_SHORTLog (('thời gian hiện tại=',time.time(), 'thời gian ban đầu=',time1)

Những nhà phát minh định lượng - những giấc mơ nhỏMột số sàn giao dịch có các trạng thái tiêu chuẩn trong các tài liệu không phải BotVS, BotVS được định nghĩa là trạng thái không rõ, bạn có thể xem giá trị cụ thể của trạng thái sau câu lệnh.Status và Log. Bạn có thể thấy giá trị của một đơn đặt hàng cụ thể, và từ đó đánh giá vấn đề này (những nguyên nhân dẫn đến chu kỳ chết).

hunter1015@chicocholam dream dreamda, tôi đang ở gateIO, vấn đề này đã được phát hiện trong vài ngày và tôi đã viết một mã đơn giản để kiểm tra lại kết quả và cảm thấy không có vấn đề gì cả. https://dn-filebox.qbox.me/97f571e4222ee9c61bd6e3cb203af319b11a8c72.png