请教各位,我想在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: # 반환되지 않았습니다
0을 반환합니다
if order_result!=None: # 주문 성공
time1=time.time() # 기록 초 수준 시간
발명가들의 수량화 - 작은 꿈어떤 거래소인지, 거래가 어떤지, 또 다른 문제 코드가 나올지.
헌터1015게시물 작성 시 에디터 오류가 발생하여 코드에 변수가 일치하는지 확인했습니다. 실제 디스크는 여러 번 테스트를 반복하여 GetOrder에 고정되어 있습니다.
발명가들의 수량화 - 작은 꿈이 ID는 정의되지 않아야 하는 코드입니다. 이 ID는 초기화도 없고 부여도 없습니다. https://dn-filebox.qbox.me/d89332ffbe84fa2cdcac442649edb35f4f61a3cc.png
헌터1015이 두 일 동안 나는 디스크를 몇 번 테스트했고, exchange.GetOrder () 문장이 발동 된 후 다시 돌아가지 않았거나, 이 문장에 들어가면 프로그램이 붙어 죽었고, 내 설정된 모든 인쇄 콘텐츠가 인쇄되지 않았음을 발견했습니다. def main (: #Log ((exchange.GetAccount)) time1=time.time (시간) 로그 (Log ((' 기록시간은 'time1) '입니다. 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 ((order_buy1*0.999, 0.1); # 주문을 하 time1=time.time() # 기록 한 번 완료 시간 탭 if 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# 명령어 데이터 구조에서 Extract Status를 반환합니다. (이번부터는 볼 필요가 없습니다. order_status=exchange.GetOrder ((sell_order_id).상황 로그 (order_status) if order_status==None and time.time() -time1>2: 로그 (('오र्डर 상태 획득 실패') 브레이크 if order_status!=None: if order_status ==ORDER_STATE_CLOSED: 이 문서는 로그 (~ '헤저핑 - 성공') 브레이크 #return True elif time.time() -time1>2 and (order_status==ORDER_STATE_CANCELED or order_status==ORDER_STATE_PENDING): 로그 (~ '보험 - 실패') 브레이크 #return False #Log ((exchange.GetAccount)) #Log (('xunhuan') #PD_SHORTLog (('현재 시간=',time.time(),' 초기 시간=',time1)
발명가들의 수량화 - 작은 꿈예, 일부 거래소에서 주문 상태는 다양한 비 BotVS 문서의 표준 상태가 있습니다. BotVS는 알 수 없는 상태로 정의되어 있습니다. 당신은 order_status=exchange.GetOrder (order_result).Status 문장 뒤에 Log (order_status) 를 추가하여 상태의 특정 값을 볼 수 있습니다. 따라서, 특정 주문 상태가 어떤 값인지 볼 수 있고, 따라서 이 문제를 판단할 수 있습니다.
헌터1015@小小梦 梦大, 저는 gateIO에서 이 문제를 발견한 지 며칠이 지났고 간단한 코드를 작성해서 결과를 다시 테스트했습니다. https://dn-filebox.qbox.me/97f571e4222ee9c61bd6e3cb203af319b11a8c72.png