显示嵌套在循环中的更新值,并迭代动态列表Python

时间:2017-05-14 02:00:16

标签: python loops dynamic nested

我目前正在编写一个小型python程序,使用他们的API在1Broker.com上观看我目前的交易,它应列出任何未平仓头寸,使用计数器对其进行编号,然后更新所选择的统计数据(P / L百分比和position_id )在每次运行之后,在睡眠计时器之后。

我在一个肮脏的早期草案中工作,但决定"优化"并清理我的代码...并打破它。 以下是错误部分的信息:

if self.total_open_positions != []:
        counter = int("0")
        for position in self.total_open_positions:
            counter += 1
            display =  {}
            display["Open Order"] = str(counter)
            display["ID"] = str(position["position_id"])
            display["P/L Percent"] = str(position["profit_loss_percent"])                           
            print display
            time.sleep(timer - ((time.time() - starttime) % timer))
        if self.total_positions == []:
            print "All trades closed"

P / L百分比和ID中的数据拒绝在每个循环中更新。

提前感谢任何帮助过的人:)

通过"拒绝更新"我的意思是当程序运行时,它会根据需要检索P / L百分比。但是,每个连续循环打印相同的P / L百分比。意味着str(position [" profit_loss_percent"])的值没有更新为从网站检索到的最新数据。 (例如,当交易达到6%时,显示3%)

enter image description here 左图是第1稿。但是,你看,P / L%在每次迭代中逐渐变化。而在右图中,它保持不变。

至于self.total_open_positions,它等于我的api请求: self.total_open_positions = requests.get(API_URL)

继承人"脏"至少可以正常工作的版本,也许它会帮助显示我的意图,以及我的noob级技能(这就是为什么我需要帮助大声笑):

total_open_orders = open_orders["response"]
while total_open_orders == []:
    print "Checking again......"
    time.sleep(timer1 - ((time.time() - starttime) % timer1))
else:
    #When orders are found, loop through and display
    while True:
        #Wait desired time between refreshing stats
        time.sleep(timer1 - ((time.time() - starttime) % timer1))
        #Position number (oldest first)
        counter = 0
        ##Print a small seperator between refreshes
        print "#" * 20
        #Loop through list of positions and print stats for each
        for order in total_open_orders:
            #Add to counter for each position
            counter += 1
            #Display stats to user (anything in '[]' is JSON format
            try:
                print "#" * 40
                print "Open Order #: " + str(counter)
                print "ID #:         " + str(order["position_id"])
                print "Market:       " + str(order["symbol"])
                print "Entry:        " + str(order["entry_price"])
                print "Stop Loss:    " + str(order["stop_loss"])
                print "Take Profit:  " + str(order["take_profit"])
                print "P/L:  " + str(order["profit_loss_percent"])
                print "#" * 40
                print ""
            #Catch any connection errors and print for debugging
            except Exception as e:
                print e

1 个答案:

答案 0 :(得分:0)

问题已经解决了。因为self.total_open_positions是在上面的函数中定义的,所以它只被调用一次,因此只有一组统计数据。通过在我的循环范围内重新定义total_open_positions,可以正确显示所有数据:)