Я новичок в 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
FindDynamicTPSLs
? - person sophros   schedule 01.02.2021