微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python无限While循环不一致

如何解决Python无限While循环不一致

我用Python编写的无限循环代码第一次运行良好。但是,它在第​​二次运行时给出以下消息:

回溯(最近通话最近): 文件“ C:/Users/dell/PycharmProjects/pythonProject/main.py”,第27行,在 符号= str(符号) TypeError:“元组”对象不可调用

有什么想法为什么我第二次跑步后没有收到此消息?

from xlrd import open_workbook
import win32com.client as win32
from oandapyV20.contrib.requests import MarketorderRequest
from oandapyV20.contrib.requests import TakeProfitDetails,StopLossDetails
import oandapyV20.endpoints.orders as orders
import oandapyV20
from oandapyV20 import API
import oandapyV20.endpoints.accounts as accounts
import oandapyV20.endpoints.pricing as pricing
import oandapyV20.endpoints.positions as positions
import easygui
import tkinter as tk
import time

while True:
    time.sleep(5)
    excel = win32.gencache.Ensuredispatch('Excel.Application')
    for wb in excel.Workbooks:
        if wb.Name == 'forex2.xlsx':
            wb.Save()

    wb = open_workbook('C:/Users/dell/Documents/forex2.xlsx')

    xl_sheet = wb.sheet_by_index(0)
    marginrate = xl_sheet.cell(1,2)
    symbol = xl_sheet.cell(1,1)
    symbol = str(symbol)
    marginrate = str(marginrate)
    symbol = symbol.replace("text:","")
    marginrate = 20
    symbol = symbol.replace("'","")
    print("Symbol:",symbol)
    print("Margin Rate:",marginrate)

    access_token = "XXXX"
    accountID = "XXXX"
    client = API(access_token=access_token)

    r = accounts.AccountDetails(accountID)
    client.request(r)
    dict = r.response

    params = {"instruments": symbol}
    r2 = pricing.PricingInfo(accountID=accountID,params=params)
    rv2 = client.request(r2)
    a = list(rv2.items())[1][1][0]
    ask = float(a['cloSEOutAsk'])
    print("Starting Ask:",ask)

    a = list(dict.items())[0][1]
    marginUsed = float(list(a.items())[25][1])
    marginAvailable = float(list(a.items())[26][1])
    balance = float(list(a.items())[9][1])
    print("Margin Available:",marginAvailable)
    print("Balance:",balance)
    print("Margin Used + Margin Available:",balance)

    STOP_LOSS = .001
    TAKE_PROFIT = 100000
    units0 = round((marginrate * marginAvailable) / ask * .95)
    print("Order Units:",units0)

    mktOrder = MarketorderRequest(
        instrument=symbol,units=units0,takeProfitOnFill=TakeProfitDetails(price=TAKE_PROFIT).data,stopLossOnFill=StopLossDetails(price=STOP_LOSS).data)

    r = orders.OrderCreate(accountID,data=mktOrder.data)

    try:
        rv = client.request(r)
    except oandapyV20.exceptions.V20Error as err:
        print("")
        print("UNITS_INVALID")
    else:
        print("")

    excel = win32.gencache.Ensuredispatch('Excel.Application')

    for wb in excel.Workbooks:
        if wb.Name == 'forex2.xlsx':
            wb.Save()
    book = open_workbook('C:/Users/dell/Documents/forex2.xlsx')

    r = positions.PositionList(accountID=accountID)
    client.request(r)
    dict = r.response

    a = list(dict.items())[0][1]

    for i,element in enumerate(a):
        long = a[i]
        long2 = long['long']
        symbol = long['instrument']
        try:
            averagePrice = long2['averagePrice']
        except:
            pass
        else:
            window = tk.Tk()
            frame_a = tk.Frame()
            label_a = tk.Label(master=frame_a,text="Hello")
            label_a.pack()
            frame_a.pack()

            for sheet in book.sheets():
                for rowidx in range(sheet.nrows):
                    row = sheet.row(rowidx)
                    for colidx,cell in enumerate(row):
                        if cell.value == symbol:
                            row = rowidx + 3
                            current_bid = sheet.cell(1,row)
                            current_bid = str(current_bid)
                            current_bid = float(current_bid.replace("number:",""))
                            str = "Beginning Balance:",balance,"Current Bid:",current_bid,"Average Price:",averagePrice,"Current Profit:",round(
                                (current_bid - float(averagePrice)) * units0,2)
                            print(str)

                            data = {"longUnits": "ALL"}

                            r = positions.PositionClose(accountID=accountID,instrument=symbol,data=data)
                            client.request(r)

解决方法

问题是您使用
str = "Beginning Balance:",balance,"Current Bid:",current_bid,"Average Price:",averagePrice,"Current Profit:",round((current_bid - float(averagePrice)) * units0,2)
,它将功能str替换为您在此处分配的变量。尝试替换此变量的名称,它应该可以正常工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。