如何在Pine Script对象数组上执行排序、取最小值等操作?
关于Pine Script自定义对象数组的排序与极值操作解答
1. 基于lowValue对数组排序
可以实现,不过因为是自定义对象类型,需要通过自定义比较函数配合array.sort()来完成。示例代码如下:
// 定义比较函数:按lowValue升序排序 int compareLowValue(pivotPoint a, pivotPoint b) => a.lowValue - b.lowValue // 调用排序,传入自定义比较器 array.sort(MyArray, compareLowValue)
如果需要降序,只需把a.lowValue - b.lowValue改成b.lowValue - a.lowValue即可。
2. 获取lowValue的最小值
Pine Script没有直接针对对象数组属性的极值内置函数,不过可以通过两种方式实现:
- 遍历数组手动比较:
float getMinLowValue() => if array.size(MyArray) == 0 na else minVal = array.get(MyArray, 0).lowValue for i = 1 to array.size(MyArray) - 1 currentVal = array.get(MyArray, i).lowValue if currentVal < minVal minVal := currentVal minVal
- 用
array.reduce()简化实现:
float getMinLowValue() => array.reduce(MyArray, na, (acc, item) => na(acc) ? item.lowValue : math.min(acc, item.lowValue) )
3. 关于自定义对象(UDT)功能的完善情况
目前Pine Script的自定义对象类型功能已经趋于稳定,能够满足结构化数据存储、自定义逻辑操作等核心需求。虽然部分针对对象属性的数组操作需要手动实现自定义逻辑,但官方一直在迭代优化该功能,后续大概率会推出更便捷的内置方法,值得期待。
内容的提问来源于stack exchange,提问作者sey eeet
相关产品推荐
相关产品推荐

