首页 > 解决方案 > 带有全局变量的while和for循环不起作用Python已更新

问题描述

为单个符号工作

  todate = zerodha.get_trade_day(datetime.now().astimezone(to_india) - timedelta(days=0))
fromdate = zerodha.get_trade_day(datetime.now().astimezone(to_india) - timedelta(days=5))

symbol = "ZINC20MAYFUT" 

instype = "MCX"     
Timeinterval = "5minute" 

tradeDir =  0 #neutral

while (True):

histdata1 = zerodha.get_history(symbol, fromdate, todate, Timeinterval, instype)
df = pd.DataFrame(histdata1)
df = heikinashi(df)
df = bollinger_bands(df,field='h_close',period=20, numsd=2)
df1 =pd.DataFrame(df, columns=['date','volume','close','h_close','middle_band', 'upper_band'])
pp = pd.DataFrame(df1.tail(3))
print(pp)

dfCToList = pp['h_close'].tolist()
dfCList = list(pp['h_close'])
dfHValues = pp['h_close'].values
dfBMValues = pp['middle_band'].values
H_last = dfHValues[2]  # tail 1
BM_last = dfBMValues[2]  # tail 1

if (H_last > BM_last and (tradeDir == 0 or tradeDir == -1)):
    print("buy")
    tradeDir = 1  # up

if (H_last < BM_last and (tradeDir == 0 or tradeDir == 1)):
    print("SELL")
    tradeDir = -1  # down

# pdb.set_trace()

问题:当条件满足时,一次又一次地打印“BUY/SELL”。我想在第一次满足条件时只打印一次

todate = zerodha.get_trade_day(datetime.now().astimezone(to_india) - timedelta(days=0))
fromdate = zerodha.get_trade_day(datetime.now().astimezone(to_india) - timedelta(days=5))
tradeDir =  0 #neutral

def script():
    global tradeDir
    ##For historical Data##
    symbol = ["ZINC20MAYFUT" ,"CRUDEOIL20MAYFUT","GOLD20JUNFUT"]
    instype = "MCX"     
    Timeinterval = "5minute" 

for symbol in symbol:
    global tradeDir
    histdata1 = zerodha.get_history(symbol, fromdate, todate, Timeinterval, instype)
    df = pd.DataFrame(histdata1)
    df = heikinashi(df)
    df = bollinger_bands(df,field='h_close',period=20, numsd=2)
    df1 =pd.DataFrame(df, columns=['date','volume','close','h_close','middle_band', 'upper_band'])
    pp = pd.DataFrame(df1.tail(3))
    print(pp)
    dfCToList = pp['h_close'].tolist()
    dfCList = list(pp['h_close'])
    dfHValues = pp['h_close'].values
    dfBMValues = pp['middle_band'].values
    H_last = dfHValues[2]  # tail 1
    BM_last = dfBMValues[2]  # tail 1

    if (H_last > BM_last and (tradeDir == 0 or tradeDir == -1)):
        print("buy")
        tradeDir = 1  # up

    if (H_last < BM_last and (tradeDir == 0 or tradeDir == 1)):
        print("SELL")
        tradeDir = -1  # down

    # pdb.set_trace()

while True:
    try:
        script()
    except Exception as e:
        sleep(2)
        continue

当条件满足时,它一次又一次地打印“BUY/SELL”。当条件满足第一次完整脚本并且应该连续运行时,我只想打印一次

标签: pythonfunctionfor-loopwhile-loopglobal-variables

解决方案


如果您希望代码在第一次打印“buy”或“SELL”后停止循环,您只需break在每次打印后添加一个语句(在包含if块的范围内)。


推荐阅读