当前位置:首页>股票

股票j线(股票中 5 日均线(MA)你会画了)

日期:2023-11-09

来源:玫瑰财经网

浏览:

    #头条创作挑战赛#

    股票中 5 日均线(MA)你会画了

    在分析一个事件走势的时候,一般我们会获取到这个事件系列的数据。但是,在绘制出相关的曲线的之后,我们会发现曲线的上下振动比较频繁,那是因为一些短期内的杂数据引起的。比如:

    股票中 5 日均线(MA)你会画了

    上图的原始数据获取 chartData.js,总共 2000 个点

    那么,我们怎么通过事件的系列数据,得到这个事件的相关走势呢

    在进入主题前,我们先了解下 滑动窗口算法

    滑动窗口算法

    假设给你这一些列的数据:[1,2,3,4,5,6,7,8,4,3,2,1],求出相邻的三个数之和最大是多少

    ,我们有下面的思路:

    1. 从左到右,三个数计算求和
    2. 先右移动一位,三个数重新计算求和
    3. 比较每次的求和大小,取最大的保存
    4. 进入第 2 步骤执行
    5. 直到数组最后三个数求和并比较完成后,返回最大的和

    我们来实现下:

    function getSum(arr, step) { // arr 是一维数组  // 这里没有考虑边界等问题  let sum = 0;  for(let i = 0; i < (arr.length - step + 1); i += 1) {    let tempSum = 0;    for(let j = i; j < (i+step); j += 1) {      tempSum += arr[j];    }    if(tempSum > sum) {      sum = tempSum;    }    tempSum = 0;  }  return sum;}let maxSum = getSum([1,2,3,4,5,6,7,8,4,3,2,1], 3);console.log(maxSum); // 21复制代码

    但是,这里的时间算法复杂度去到了 O(n2n^2),我们能够改善下时间复杂度吗

    窗口滑动算法 是一种基于双指针的一种思想,两个指针指向的元素之间形成一个窗口。可用于解决数组/字符串的字元素问题,用在减少嵌套循环的使用,并且用单循环代替它,减少时间复杂度。

    股票中 5 日均线(MA)你会画了

    So,我们将上面的代码更改下:

    function getSumSlidingWindow(arr, step) {  //  这里同样没有考虑边界等问题  let sum = 0;  for(let i = 0; i < step; i++) {    sum += arr[i];  }     let tempSum = sum;  for(let i = step; i < arr.length; i++) {    tempSum += arr[i] - arr[i - step];    if(tempSum > sum) {      sum = tempSum;    }  }  return sum;}let maxSum = getSumSlidingWindow([1,2,3,4,5,6,7,8,4,3,2,1], 3);console.log(maxSum); // 21复制代码

    窗口滑动算法的时间复杂度去到了 O(n)

    实现平滑曲线

    接下来,我们使用移动滑动窗口,来进行 21 个点为一个窗口的 MA 过滤算法。

    MA -> Moving Average 移动平均

    顾名思义,移动平均,就是将移动窗口中的值进行求平均,我们可以通过下面的代码进行数据处理:

    let maDatas = [];// 滑动窗口function filterAverage(signal, k) { // k 应该为奇数  let sum = 0;  for(let i = 0; i < k; i++) {    sum += signal[i];    if(i < (k-1) / 2) { // 本例中,我们忽略数组的前 10 个数据      maDatas.push(null);     }  }  maDatas.push(sum / k);    for(let i = k; i < signal.length; i++) {    sum += signal[i] - signal[i - k];    maDatas.push(sum / k); // 本例中,忽略数组的后 10 个数据  }}filterAverage(rawDatas, 21);复制代码

    数据量大的时候,我们忽略些前后的数据,影响不大,如果你觉得不应该忽略的话,那你需要对这些数据进行特殊的处理。比如,第一数据,平均值是第一个数据的值,第二个数据,平均值是第一个数据+第二个数据的平均值,以此类推

    通过上面 filterAverage 方法,我们可以计算出移动平均过滤后的数值,绘制出曲线见下图 ma。

    股票中 5 日均线(MA)你会画了

    通过图,我们可能没能感受到 ma 的图表的平滑度,我们结合 求解波值的波峰和波谷「Javascript」 来求一下两者的波峰和波谷:

    原始数据: 波峰 => 430; 波谷 => 430MA 数据: 波峰 => 64; 波谷 => 65复制代码

    思考:那么,我们可以通过调整滑动窗口,算出股票中的 5 日均线,10 日均线,20 日均线和 60日均线。

    股票中 5 日均线(MA)你会画了

    我们可以通过移动平均过滤算法预测接下来一段时间的走势。You can think in deeply

    推荐阅读

    求解波值的波峰和波谷「JavaScript」

相关文章阅读

Copyright (c) 2022 玫瑰财经网 版权所有

备案号:冀ICP备17019481号

玫瑰财经网发布此信息的目的在于传播更多信息,与本站立场无关。玫瑰财经网不保证该信息(包含但不限于文字、视频、音频、数据及图表)全部或者部分内容的准确性、真实性、完整性、有效性、及时性、原创性等。
相关信息并未经过本网站证实,不对您构成任何投资建议,据此操作,风险自担。