这是我要转换为python的代码,在查询中有以下两个问题。
xATRT := if(
来源 nz(xATRT [1],0)和源[1]> nz(xATRT [1],0),max(nz(xATRT [1]),源/ nLoss)
有关此功能的简要说明:
比较源(该值来自熊猫数据帧df ['close'])和XATRT的先前元素值,即xATRT [1]。 nz(x,y)→系列
两个args版本:如果它是有效的数字(不是NaN),则返回x, 否则y
一个arg版本:如果它是有效(不是NaN)数字,则返回x,否则返回 0
问题1:
即使添加any()后,if条件也会失败,并显示警告。
发生异常Series的真值不明确。采用 a.empty,a.bool(),a.item(),a.any()或a.all()。
问题2:
在第一次迭代中执行从NZ(x,y)到函数的python的熊猫转换时,xATRT(xATRT [1])将没有任何先前的值,这肯定会引发错误/崩溃或手术失败。如何将代码转换为python代码而不丢失其计算。 是否有任何oneline内置代码来解决此问题,因为我必须针对许多条件进行此类计算。在np.where尝试过,但没有成功。
任何解决方案都值得赞赏。
df = calc_bgcalc_trail(df)
def calc_bgcalc_trail(df,nATRPeriod=20,nATRMultip=3,source='close',smooth1=1,smooth2=2):
df['xATR'] = ta.ATR(np.asarray(df['high']),
np.asarray(df['low']),
np.asarray(df['close']),
timeperiod=nATRPeriod)
df['nLoss'] = nATRMultip * df['xATR']
df['xATRT'] = 0.0
if df[source] > df['xATRT'].iloc[-1].any() and df[source].iloc[-1] > df['xATRT'].iloc[-1].any() :
df['xATRT'] = max(df['xATRT'].iloc[-1], df[source] / df['nLoss'])
熊猫样本
nlose high low close adjusted_close \
date
2002-07-01 5.2397 5.5409 5.2397 5.4127 0.0634
2002-07-02 5.5234 5.5370 5.4214 5.4438 0.0638
2002-07-03 5.5060 5.5458 5.3281 5.4661 0.0640
2002-07-04 5.5011 5.5720 5.4175 5.5283 0.0647
2002-07-05 5.5633 5.6566 5.4749 5.5905 0.0655
2002-07-08 5.5011 5.7187 5.5011 5.6255 0.0659
2002-07-09 5.5905 5.7586 5.5681 5.6167 0.0658
2002-07-10 5.4885 5.4885 5.1465 5.2222 0.0612
2002-07-11 4.9784 5.2135 4.9784 5.1863 0.0607
2002-07-12 5.5011 5.5011 5.2446 5.3194 0.0623
2002-07-15 5.3243 5.4797 5.1912 5.3330 0.0625
2002-07-16 5.1999 5.4389 5.1999 5.3155 0.0623
2002-07-17 4.7024 5.1377 4.6189 5.0445 0.0591
2002-07-18 4.8803 5.1465 4.8356 5.0804 0.0595
2002-07-19 5.0270 5.2038 5.0221 5.1513 0.0603
2002-07-22 5.0804 5.1465 4.9687 4.9735 0.0582
2002-07-23 4.8181 5.0843 4.8181 5.0619 0.0593
2002-07-24 5.0580 5.1290 4.9376 5.0619 0.0593
2002-07-25 5.0580 5.0580 4.7918 4.8492 0.0568