python - 带有全局变量的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”。当条件满足第一次完整脚本并且应该连续运行时,我只想打印一次
解决方案
如果您希望代码在第一次打印“buy”或“SELL”后停止循环,您只需break
在每次打印后添加一个语句(在包含if
块的范围内)。
推荐阅读
- c# - WCF 文件有 3 个不同的 .cs 文件(服务、合同、接口),用于 UI 解决方案的 WebForm,请解释
- c++ - Choose type of class members at run time
- ibm-midrange - CL 中字符串中字符的最后出现次数
- sql - 引用相同主键的两个外键被用作复合键[ERD]
- apache-nifi - 如何从 nifi 连接中的队列中获取流文件列表?
- angular - 当我尝试将月份的名称输入为数字时,月份的名称变为一月。当我输入为文本时它工作正常
- amazon-web-services - 在 VPC 中连接到 RDS 的 AWS Lambda 潜在替代方案
- delphi - Delphi 5 Tserversocket 和 Tclientsocket 的简单示例
- r - 不同数据子集 R 的循环方程
- java - 分块绘制等轴测图?