我是新手,如果这是个简单的问题,我很抱歉。我第一次尝试在函数中使用Numba,但是我得到了“TypingError:无法捕获与将要转义的函数中的变量关联的非常量值”。我已经搜索了这个错误,但我没有找到任何东西来理解它的含义以及如何修复
我正在调用一个jitted函数,如下所示:
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
目前没有回答
相关问题 更多 >
编程相关推荐