Пока и для l oop с глобальной переменной не работает Python обновлено - PullRequest
0 голосов
/ 05 мая 2020

Работа для одиночного символа

  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()

Вопрос: Когда условия соответствуют его Печать "ПОКУПКА / ПРОДАЖА" снова и снова. Я хочу просто напечатать один раз, когда условие выполняется впервые

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

Когда условия соответствуют его Печать «КУПИТЬ / ПРОДАТЬ» снова и снова. Я хочу просто напечатать один раз, когда условие соответствует первому полному сценарию и должно работать непрерывно

1 Ответ

0 голосов
/ 06 мая 2020

Если вы хотите, чтобы код перестал зацикливаться после того, как в первый раз напечатал «buy» или «SELL», вам просто нужно добавить оператор break после каждого из отпечатков (внутри области содержащего if блоков).

...