LVDA:=VALUEWHEN(A>B,HHV(A,BARSLASTCOUNT(A>B)));
C 列
=IF(A2 > B2, 1, 0)
D 列
=IF(C2 = 1, IF(C3 = 0, ROW() - MATCH(1, C$1:C1, 0), ""), "")
E 列
=IF(C2 = 1, MAX(OFFSET(A2, -D2 + 1, 0, D2, 1)), "")
在Excel表中准备好高价列A和低价列B的数据
在C列使用MAX函数,参照A和B两列数据,得到HHV(A,BARSLASTCOUNT(A>B))的值
在D列使用IF函数实现VALUEWHEN逻辑,
例如:=IF(A1>B1,C1,"")
然后拷贝D列公式下移,即可得到LVDA的结果
具体公式如下:
A列:高价数据
B列:低价数据
C列:公式 =MAX(A1,B1)
D列:公式 =IF(A1>B1,C1,"")
将D列公式拷贝下移后,就得到了LVDA的结果。
这样利用Excel内置函数的组合即可实现LVDA的计算逻辑
用VBA编写宏
【以下回答由 GPT 生成】
我无法给出具体的解决方案。
【相关推荐】
引用chatgpt内容作答:
这段代码的功能是找到在A大于B的条件下,A的最高值,然后将这个最高值赋给LVDA变量。
如果你想在Excel中实现相似的功能,你需要使用Excel的函数和公式来模拟这个过程。然而,Excel并不直接支持通达信的公式语法,所以你需要根据公式的逻辑进行重新编写。下面是一个可能的实现方法:
假设你在Excel中的数据在A列和B列中,你可以在C列中使用以下公式来实现类似的功能:
1、在C2单元格中输入以下公式:
=IF(A2>B2, MAX($A$2:A2), "")
2、然后将这个公式拖拽或复制到C列的其他单元格中,以覆盖你的数据范围。
这个公式的意思是:如果A大于B(A2>B2),则计算从$A$2到当前行的数据中的最大值,否则显示空白。
这个实现方式并不完全等同于通达信中的代码,因为Excel的函数和语法与通达信有所不同。但这个方法在Excel中可以模拟类似的逻辑。
如果你有更复杂的要求,可能需要使用VBA(Visual Basic for Applications)来编写自定义的宏或函数来实现类似的功能。不过,上述基于公式的方法应该能满足大部分简单的情况。
当A>B时,LVDA的值为A在过去BARSLASTCOUNT(A>B)根K线中最高价的最高值。
BARSLASTCOUNT(COND)函数返回满足COND条件的最后N根K线数。
在Excel中可以这样表示:
在一列中填写A的值,在一列中填写B的值。
在一列中用公式计算A>B,这样可以得到一个逻辑值序列。
在一列中用COUNTIF函数计算上一列中连续TRUE值的数目,假设列序号是X,公式如下:
=COUNTIF($X1:X2,TRUE)
拖填这个公式可以计算截止到当前行位置的TRUE值数目。
=MAX($Y$1:Y2)
同样拖填这个公式。
=如果(A2>B2,VLOOKUP(D2,$F$1:$G$2,2,FALSE),"")
其中D2单元格中的公式计算出BARSLASTCOUNT的值,F:G列包含了A值的历史最大值。
这样就可以用Excel实现通达信中的这个LVDA的计算逻辑了。