Numba - TypingError: невозможно захватить непостоянное значение, связанное с переменной, в функции, которая будет экранирована

Я новичок в Numba, извините, если это простая проблема. Я пробовал использовать Numba для функции в первый раз, но получаю TypingError: невозможно захватить непостоянное значение, связанное с переменной, в функции, которая ускользнет. Я искал эту ошибку, но не нашел ничего, чтобы понять, что это означает и как исправить.

Я вызываю джиттную функцию вроде этого:

FindDynamicTPSLs(TADF_TP1,TAAction, 1, 'TP')
FindDynamicTPSLs(TADF_SL1,TAAction, 1, 'SL')
FindDynamicTPSLs(TADF_TP2,TAAction,2, 'TP')
FindDynamicTPSLs(TADF_SL2,TAAction,2, 'SL')
FindDynamicTPSLs(TADF_TP3,TAAction,3, 'TP')
FindDynamicTPSLs(TADF_SL3,TAAction,3, 'SL')
FindDynamicTPSLs(TADF_TP4,TAAction,4, 'TP')
FindDynamicTPSLs(TADF_SL4,TAAction,4, 'SL')

TADF_TP1 - фрейм данных, TAAction = - строка, 1,2,3,4 - целые числа, TP - строка,

Переменная, к которой относится ошибка, является целым числом и не дает мне дополнительной информации в журнале.

Что означает эта ошибка и что мне делать по-другому?

Вот тело функции:

@jit(nopython=True, nogil=True, parallel=True)#,debug=True)
def FindDynamicTPSLs(TADF1,taAction,RBNum,Type):
    global DynamTPs
    global DynamSLs
    global DynNumDF
    global TPStartValue
    global SLStartValue
    global TATicketNum
    global TAOpenPrice
    global DF1RBColList
    global DF1RBCompreColList
    global DF2RBColList
    global DF2RBCompreColList
    global DF3RBColList
    global DF3RBCompreColList
    global DF4RBColList
    global DF4RBCompreColList
    global MergeColList1
    global DynamTPColmns
    global DynamSLColmns

    @jit(nopython=True, nogil=True, parallel=True)
    def LowerDTSize(TADF_copy):
        global TPStartValue
        global SLStartValue

        if RBNum == 1:
            ComprList = DF1RBCompreColList
        elif RBNum == 2:
            ComprList = DF2RBCompreColList
        elif RBNum == 3:
            ComprList = DF3RBCompreColList
        elif RBNum == 4:
            ComprList = DF4RBCompreColList

        if Type == 'TP':
            if taAction == 'Buy':
                TADF_copy = TADF_copy[(TADF_copy[ComprList] > TPStartValue)]# & (TADF_copy[DF1RBCompreColList] < TADF_copy['High'])]# & (TADF_copy[DF1RBCompreColList] > TADF_copy['PrevHigh']) & (TADF_copy[DF1RBCompreColList] > TADF_copy['PrevClose'])]
                return TADF_copy
            else:
                TADF_copy = TADF_copy[(TADF_copy[ComprList] < TPStartValue)]# & (TADF_copy[DF1RBCompreColList] > TADF_copy['Low'])]# & (TADF_copy[DF1RBCompreColList] < TADF_copy['PrevLow']) & (TADF_copy[DF1RBCompreColList] < TADF_copy['PrevClose'])]
                return TADF_copy
        else:
            if taAction == 'Buy':
                TADF_copy = TADF_copy[(TADF_copy[ComprList] < SLStartValue)]# & (TADF_copy[DF1RBCompreColList] > TADF_copy['Low'])]# & (TADF_copy[DF1RBCompreColList] < TADF_copy['PrevLow']) & (TADF_copy[DF1RBCompreColList] < TADF_copy['PrevClose'])]
                return TADF_copy
            else:
                TADF_copy = TADF_copy[(TADF_copy[ComprList] > SLStartValue)]# & (TADF_copy[DF1RBCompreColList] < TADF_copy['High'])]# & (TADF_copy[DF1RBCompreColList] > TADF_copy['PrevHigh']) & (TADF_copy[DF1RBCompreColList] > TADF_copy['PrevClose'])]
                return TADF_copy

    #pdb.set_trace()
    if RBNum == 1:
        ColList = DF1RBColList
        ComprList = DF1RBCompreColList
    elif RBNum == 2:
        ColList = DF2RBColList
        ComprList = DF2RBCompreColList
    elif RBNum == 3:
        ColList = DF3RBColList
        ComprList = DF3RBCompreColList
    elif RBNum == 4:
        ColList = DF4RBColList
        ComprList = DF4RBCompreColList

    TADF_copy = TADF1[ColList].copy()
    TADF_copy = TADF_copy.set_index('Date_Time')
    TADF_copy2 = LowerDTSize(TADF_copy)
    TADF_copy2 =TADF_copy2[ComprList]
    TADF_copy2 = TADF_copy2.dropna(axis = 1, how = 'all')
    TADF_copy2 = TADF_copy2.dropna(axis = 0, how = 'all')
    TADF_copy = TADF_copy[MergeColList1]
    TADF_copy = TADF_copy.merge(TADF_copy2, how = 'outer', left_index = True, right_index = True, suffixes = (None,'2'))
    TADF_copy.reset_index(inplace = True)
    DfName = Type + RBNum
    #pdb.set_trace()
    for i in TADF_copy.index:
        rowSeries = TADF_copy.iloc[i]
        rowSeries = rowSeries.dropna()
        rowSeries = rowSeries.iloc[7:]
        CndlHigh = TADF_copy._get_value(i,'High')
        CndlLow = TADF_copy._get_value(i,'Low')
        PrevCndlClose = TADF_copy._get_value(i,'PrevClose')
        PrevCndlHigh = TADF_copy._get_value(i,'PrevHigh')
        PrevCndlLow = TADF_copy._get_value(i,'PrevLow')
        ColTime = TADF_copy._get_value(i,'Date_Time')
        for x in rowSeries:
            colval = x
            if Type == 'TP':
                if taAction == 'Buy':
                    if  colval > CndlHigh or colval < CndlLow or colval < PrevCndlHigh or colval < PrevCndlClose:
                        continue
                    else:
                        TimeColName = 'Dynamic_TP_'+str(DynNumDF[DfName])+'_lane_Time'
                        PriceColName = 'Dynamic_TP_'+str(DynNumDF[DfName])+'_lane_Price'
                        DynamTPs._set_value(TATicketNum, TimeColName, ColTime)
                        DynamTPs._set_value(TATicketNum, PriceColName, colval)
                        #pdb.set_trace()
                        return
                else:
                    if colval < CndlLow or colval > CndlHigh or colval > PrevCndlLow or colval > PrevCndlClose:
                        continue
                    else:
                        TimeColName = 'Dynamic_TP_'+str(DynNumDF[DfName])+'_lane_Time'
                        PriceColName = 'Dynamic_TP_'+str(DynNumDF[DfName])+'_lane_Price'
                        DynamTPs._set_value(TATicketNum, TimeColName, ColTime)
                        DynamTPs._set_value(TATicketNum, PriceColName, colval)
                        return
            else:
                if taAction == 'Buy':
                    if colval < CndlLow or colval > CndlHigh or colval > PrevCndlLow or colval < PrevCndlClose:
                        continue
                    else:
                        TimeColName = 'Dynamic_SL_'+str(DynNumDF[DfName])+'_lane_Time'
                        PriceColName = 'Dynamic_SL_'+str(DynNumDF[DfName])+'_lane_Price'
                        DynamSLs._set_value(TATicketNum, TimeColName, ColTime)
                        DynamSLs._set_value(TATicketNum, PriceColName, colval)
                        return
                else:
                    if colval > CndlHigh or colval < CndlLow or colval > PrevCndlHigh or colval > PrevCndlClose:
                        continue
                    else:
                        TimeColName = 'Dynamic_SL_'+str(DynNumDF[DfName])+'_lane_Time'
                        PriceColName = 'Dynamic_SL_'+str(DynNumDF[DfName])+'_lane_Price'
                        DynamSLs._set_value(TATicketNum, TimeColName, ColTime)
                        DynamSLs._set_value(TATicketNum, PriceColName, colval)
                        return

person Jonathan Stearns    schedule 01.02.2021    source источник
comment
Что является телом функции FindDynamicTPSLs?   -  person sophros    schedule 01.02.2021
comment
Отвечает ли это на ваш вопрос? Как передать вычисленные значения в сортировку списка с помощью numba.jit в Python?   -  person sophros    schedule 01.02.2021
comment
numba.pydata. org / numba-doc / latest / user / В предоставленном вами сообщении он ссылается на этот URL. В нем говорится, что Numba не знает, что такое фреймы данных, но я не знаю, означает ли это их использование или просто их создание (их пример создавал фреймы данных). Но когда я включаю nopython = False, он все равно дает ту же ошибку. Поэтому я не думаю, что он ответил на мой вопрос, если только ответ не работает с фреймами данных.   -  person Jonathan Stearns    schedule 01.02.2021