用于非零值计算的python-pandas数据帧等价函数逻辑

2024-04-24 08:22:06 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一个pinescript代码,我正在尝试编写Python。什么应该是一个优化的等效python代码

kama[1]这里是以前的kama值,对于数组中的第一次计算,应该对这个kama[1]值执行什么操作,因为它不会第一次存在。在

 kama=nz(kama[1], close[1])+smooth*(close[1]-nz(kama[1], close[1]))

pinescript信息:

^{pr2}$

编辑1 我尝试了下面的方法,但没用

stockdata['kama'] = stockdata['kama'](-1) if stockdata['kama'](-1) !=0 \
 else stockdata['close'] + stockdata['smooth']*(stockdata['close'] - \
 stockdata['kama'](-1) if stockdata['kama'](-1) !=0 else stockdata['close'])

编辑2 另一种选择是我试图确保至少有一个部分是有效的,但也失败了(nz(kama[1],close))

stockdata['kama'] = np.where(stockdata['kama'][-1] != 0, stockdata['kama'][-1], stockdata['close'])

如果这条线

 kama=nz(kama[1], close)+smooth*(close-nz(kama[1], close))

没有转换成python的pine脚本代码,我的整个逻辑都要折腾一下。非常感谢您的任何有效解决方案。在

编辑3: 序列的数据帧输入

                 open       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

             volume  dividend_amount  split_coefficient           Om  \
date                                                                   
2002-07-01    21923              0.0                1.0          NaN   
2002-07-02    61045              0.0                1.0          NaN   
2002-07-03    34161              0.0                1.0          NaN   
2002-07-04    27893              0.0                1.0          NaN   
2002-07-05    58976              0.0                1.0          NaN   
2002-07-08    48910              0.0                1.0     5.472433   
2002-07-09   321846              0.0                1.0     5.530900   
2002-07-10   138434              0.0                1.0     5.525083   
2002-07-11    15027              0.0                1.0     5.437150   
2002-07-12    24187              0.0                1.0     5.437150   
2002-07-15    50330              0.0                1.0     5.397317   
2002-07-16    24928              0.0                1.0     5.347117   
2002-07-17    21357              0.0                1.0     5.199100   
2002-07-18    27532              0.0                1.0     5.097733   
2002-07-19    13380              0.0                1.0     5.105833   
2002-07-22    21666              0.0                1.0     5.035717   
2002-07-23    40161              0.0                1.0     4.951350   
2002-07-24    34480              0.0                1.0     4.927700   
2002-07-25    38185              0.0                1.0     4.986967  

                     Hm           Lm           Cm       vClose       diff  \
date                                                                        
2002-07-01          NaN          NaN          NaN          NaN  1669.8373   
2002-07-02          NaN          NaN          NaN          NaN  1669.8062   
2002-07-03          NaN          NaN          NaN          NaN  1669.7839   
2002-07-04          NaN          NaN          NaN          NaN  1669.7217   
2002-07-05          NaN          NaN          NaN          NaN  1669.6595   
2002-07-08     5.595167     5.397117     5.511150     5.493967  1669.6245   
2002-07-09     5.631450     5.451850     5.545150     5.539837  1669.6333   
2002-07-10     5.623367     5.406033     5.508217     5.515675  1670.0278   
2002-07-11     5.567983     5.347750     5.461583     5.453617  1670.0637   
2002-07-12     5.556167     5.318933     5.426767     5.434754  1669.9306   
2002-07-15     5.526683     5.271650     5.383850     5.394875  1669.9170   
2002-07-16     5.480050     5.221450     5.332183     5.345200  1669.9345   
2002-07-17     5.376567     5.063250     5.236817     5.218933  1670.2055   
2002-07-18     5.319567     5.011433     5.213183     5.160479  1670.1696   
2002-07-19     5.317950     5.018717     5.207350     5.162463  1670.0987   
2002-07-22     5.258850     4.972733     5.149700     5.104250  1670.2765   
2002-07-23     5.192950     4.910550     5.104517     5.039842  1670.1881   
2002-07-24     5.141300     4.866833     5.062250     4.999521  1670.1881   
2002-07-25     5.128017     4.895650     5.029700     5.010083  1670.4008

               signal      noise      efratio       smooth  
date                                                        
2002-07-01     5.4127  1670.3373     0.003240     0.416113  
2002-07-02     5.4438  1670.3062     0.003259     0.416113  
2002-07-03     5.4661  1670.2839     0.003273     0.416114  
2002-07-04     5.5283  1670.2217     0.003310     0.416115  
2002-07-05     5.5905  1670.1595     0.003347     0.416116  
2002-07-08     5.6255  1670.1245     0.003368     0.416116  
2002-07-09     5.6167  1670.1333     0.003363     0.416116  
2002-07-10     5.2222  1670.5278     0.003126     0.416110  
2002-07-11     5.1863  1670.5637     0.003105     0.416109  
2002-07-12     5.3194  1670.4306     0.003184     0.416111  
2002-07-15     5.3330  1670.4170     0.003193     0.416111  
2002-07-16     5.3155  1670.4345     0.003182     0.416111  
2002-07-17     5.0445  1670.7055     0.003019     0.416107  
2002-07-18     5.0804  1670.6696     0.003041     0.416107  
2002-07-19     5.1513  1670.5987     0.003084     0.416109  
2002-07-22     4.9735  1670.7765     0.002977     0.416106  
2002-07-23     5.0619  1670.6881     0.003030     0.416107  
2002-07-24     5.0619  1670.6881     0.003030     0.416107  
2002-07-25     4.8492  1670.9008     0.002902     0.416104 

kama=nz(kama[1],close)+smooth*(close nz(kama[1],close))的预期值是多少?在

stockdata['kama'] =nz(stockdata[kama][-1],stockdata['close'] +stockdata['smooth']*(stockdata['close']-nz(stockdata['kama'][-1],stockdata['close'])

在这种情况下,对于第一次迭代,将不会有任何先前的kama值需要注意。所有输入均以上述数据帧格式给出。在


Tags: 数据代码信息编辑closedateif数组
1条回答
网友
1楼 · 发布于 2024-04-24 08:22:06

您需要首先使用close的值创建列kama

import numpy as np

stockdata['kama'] = stockdata['close']
previous_kama = stockdata['kama'].shift()
previous_close = stockdata['close'].shift()
value = np.where(previous_kama.notnull(), previous_kama, previous_close)
stockdata['kama'] = value  + stockdata['smooth'] * (previous_close - value) 

相关问题 更多 >