পাইথনকে 'GetOrder' (অর্ডার আইডি) কে 'while' এ বারবার কল করতে শেখান।

লেখক:হান্টার১০১৫, তৈরিঃ 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) # নিচের তালিকা 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: # এবং অর্ডার দেওয়ার পরে, লুপ পড়া অর্ডার স্থিতির আগের সময়ের তুলনা বিচার করুন, 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): # অর্ডারটি ২ সেকেন্ডের মধ্যে ঝুলানো বা বাতিল করা হবে লগ (("অর্ডারগুলি তালিকাভুক্ত বা বাতিল করা হয়েছে") return 0 if order_status==ORDER_STATE_CLOSED: # অর্ডার সম্পন্ন হয়েছে Log (("অর্ডার সম্পন্ন") return ১ `` আমি মনে করি, যুক্তির কোন সমস্যা নেই। সমস্যাটি হল যে GetOrder অর্ডার ডেটা ফেরত দেয় যা অন্য অবস্থা রয়েছে, যেমন একটি অজানা অবস্থা হতে পারে, যা আপনি কোন এক্সচেঞ্জে কাজ করছেন। এটি সুপারিশ করা হয় যে order_status=exchange.GetOrder ((order_result).Status) বাক্যের পরে Log ((order_status) যুক্ত করুন।

ছোট্ট স্বপ্নকোন এক্সচেঞ্জ, কোন জোড়ায় ট্রেডিং, এবং প্রশ্নের কোডগুলি প্রকাশ করা হয়েছে।

হান্টার১০১৫পোস্ট করার সময় সম্পাদক ভুল করেছেন, কোডটি ভেরিয়েবলগুলির মধ্যে সামঞ্জস্যের বিষয়টি নিশ্চিত করেছে। রিয়েল ডিস্কটি বারবার পরীক্ষা করা হয়েছে, এটি গেটঅর্ডারে আটকে গেছে, এটি বের হতে পারে না, কোনও ত্রুটি রিপোর্ট করবে না, কোনও লগ ফেরত আসবে না।

ছোট্ট স্বপ্নআপনার কোডটি কি ভুল লেখা হয়েছে, আইডিটি অনির্ধারিত হওয়া উচিত, কোডের মধ্যে কেবল এটিই উপস্থিত রয়েছে; কোনও ইনসিটেশন নেই এবং কোনও মান দেওয়া নেই। https://dn-filebox.qbox.me/d89332ffbe84fa2cdcac442649edb35f4f61a3cc.png

হান্টার১০১৫মনের কথা, আমি গত দুদিন ধরে ডিস্কটি বেশ কয়েকবার পরীক্ষা করেছি এবং খুঁজে পেয়েছি যে এক্সচেঞ্জ.গেটঅর্ডার () স্ট্রিংটি ট্রিগার হওয়ার পরে, এটি কখনই ফিরে আসেনি, অথবা এটি প্রবেশ করার পরে প্রোগ্রামটি মারা যায় এবং এটি বাইরে আসে না, যার ফলে আমি সেট আপ করেছি এমন সমস্ত মুদ্রণ সামগ্রী মুদ্রণ করা হয়নি। def main ((): #Log ((exchange.GetAccount)) time1=time.time (() Log ((' রেকর্ড সময়',time1) depth = _C ((exchange.GetDepth); orders_buy1=depth.Bids[0].Price অর্ডার_ক্রয়1=গভীরতা. orders_buy2=depth.Bids[1]. মূল্য orders_buy3=depth.Bids[2]. মূল্য orders_sell1=depth.Asks[0].Price অর্ডার_সেল1=দৈর্ঘ্য। 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() # রেকর্ডিং একক সমাপ্তির সময় ট্যাগ if sell_order_id==None: Log (('অর্ডার নম্বর ফাঁকা') 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_status=order_back_message.Status# অর্ডারটি ডাটা স্ট্রাকচারে ফিরে আসে স্ট্যাটাস (এটি এখন থেকে দেখতে হবে না, কারণ এটি উপরে পাস হয়নি) order_status=exchange.GetOrder ((sell_order_id).Status.অর্ডার পরিবর্তন করুন লগ ((order_status) if order_status==None and time.time (() -time1>2: লগ (('অর্ডার স্থিতি অর্জন ব্যর্থ হয়েছে') বিরতি if order_status!=None: if order_status ==ORDER_STATE_CLOSED: যদি অর্ডার_স্ট্যাটাস === ORDER_STATE_CLOSED: যদি অর্ডার_স্ট্যাটাস === ORDER_STATE_CLOSED: যদি অর্ডার_স্ট্যাটাস === Log (('হ্যাজিং - সাফল্য') বিরতি #returnTrue 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) ।Status বাক্যের পরে Log ((order_status) এর সাথে স্ট্যাটাসের নির্দিষ্ট মান দেখতে পারেন। আপনি দেখতে পারেন যে নির্দিষ্ট অর্ডারগুলির অবস্থা কী, এবং তারপর এই প্রশ্নটি বিচার করুন (কি কারণগুলি মৃত্যুর চক্রের দিকে পরিচালিত করে) ।

হান্টার১০১৫@ছোট ছোট স্বপ্ন, আমি গেটআইওতে আছি, এই সমস্যাটি কয়েক দিন ধরে পাওয়া গেছে, এবং আমি একটি সহজ কোড লিখেছি যা ফলাফলগুলি পরীক্ষা করে দেখায় যে কোনও সমস্যা নেই। https://dn-filebox.qbox.me/97f571e4222ee9c61bd6e3cb203af319b11a8c72.png