如何用JavaScript正确计算一目均衡表的TenkanSen与KijunSen
正确计算TenkanSen与KijunSen的JavaScript代码
我们需要基于日线历史数据计算一目均衡表中的两条核心线:
- TenkanSen(转换线):取最近9个交易日(
[ih][0]至[ih][8])的最高价最大值与最低价最小值之和,再除以2 - KijunSen(基准线):取最近26个交易日(
[ih][0]至[ih][25])的最高价最大值与最低价最小值之和,再除以2
历史数据格式说明
[ih][n].PriceMax:第n个历史交易日的最高价([ih][0]代表昨日最高价)[ih][n].PriceMin:第n个历史交易日的最低价
原代码问题
你之前的实现错误地计算了区间内最低价/最高价的平均值,而非提取区间内的最值,这完全不符合指标的定义逻辑。
正确代码实现
// 计算TenkanSen(转换线) // 提取最近9个交易日的最高价集合 const tenkanMaxPrices = [0,1,2,3,4,5,6,7,8].map(i => ih[i].PriceMax); // 提取最近9个交易日的最低价集合 const tenkanMinPrices = [0,1,2,3,4,5,6,7,8].map(i => ih[i].PriceMin); // 按规则计算转换线 const TenkanSen = (Math.max(...tenkanMaxPrices) + Math.min(...tenkanMinPrices)) / 2; // 计算KijunSen(基准线) // 生成0-25的索引数组,提取对应交易日的最高价 const kijunMaxPrices = Array.from({length:26}, (_, i) => ih[i].PriceMax); // 提取对应交易日的最低价 const kijunMinPrices = Array.from({length:26}, (_, i) => ih[i].PriceMin); // 按规则计算基准线 const KijunSen = (Math.max(...kijunMaxPrices) + Math.min(...kijunMinPrices)) / 2;
兼容低版本环境的写法
如果需要兼容不支持扩展运算符(...)的JS环境,可以改用apply方法:
// 兼容版转换线计算 const TenkanSen = (Math.max.apply(null, tenkanMaxPrices) + Math.min.apply(null, tenkanMinPrices)) / 2; // 兼容版基准线计算 const KijunSen = (Math.max.apply(null, kijunMaxPrices) + Math.min.apply(null, kijunMinPrices)) / 2;
内容的提问来源于stack exchange,提问作者mohsen
相关产品推荐
相关产品推荐

