精易论坛

标题: ema+sma+macd指标计算 [打印本页]

作者: 易造轮    时间: 2023-10-2 12:42
标题: ema+sma+macd指标计算
本帖最后由 易造轮 于 2023-10-3 04:16 编辑

根据bingAI写的php转换过来的,支持未满足周期返回0值 ema sma macd计算.e (11.78 KB, 下载次数: 105)

bug修正,请手动替换:ema计算,找到:
判断 (参_现行下标 = 1)
参_返回EMA数组 [参_现行下标] = 参_参考价数组 [1]
改成:
判断 (参_现行下标 = 参_周期数)
参_返回EMA数组 [参_现行下标] = 参_参考价数组 [参_现行下标]


补充php版源码
[PHP] 纯文本查看 复制代码
<?php// 定义一个函数,计算SMA
function SMA($收盘价数组, $周期数, $权重, $可返回空数组) {
    // 初始化一个数组,存储SMA的结果
    $result = array();

    // 判断数组的元素个数是否大于等于周期
    if (count($收盘价数组) >= $周期数) {
        // 计算第一个周期的平均值,作为第一个SMA值
        $sum = 0;
        for ($i = 0; $i < $周期数; $i++) {
            $sum = $sum + $收盘价数组[$i];
        }
        $average = $sum / $周期数;
        $result[$周期数 - 1] = $average;

        // 计算后续的SMA值,使用公式:SMA = (权重 * 当日收盘价 + (周期 - 权重) * 前一日SMA) / 周期
        for ($i = $周期数; $i < count($收盘价数组); $i++) {
            $SMA = ($权重 * $收盘价数组[$i] + ($周期数 - $权重) * $result[$i - 1]) / $周期数;
            $result[$i] = $SMA;
        }
    } else {
        // 判断是否返回0值数组
        if ($可返回空数组) {
            // 返回一个包含n个成员的0值数组
            for ($i = 0; $i < count($收盘价数组); $i++) {
                $result[$i] = 0;
            }
        } else {
            // 返回一个空数组
            $result = array();
        }
    }

    // 返回结果数组
    return $result;
}
function ema ($收盘价数组,$周期数) {
  // 初始化一个空数组,用于存储EMA值
  $ema = array ();
  // 判断数组是否满足周期
  if (count ($收盘价数组) < $周期数) {
    // 如果不满足,返回一个包含n个0值的数组
    for ($i = 0; $i < $周期数; $i++) {
      $ema[$i] = 0;
    }
    return $ema;
  }
  // 如果满足,继续进行EMA的计算,以下代码与之前相同
  $alpha = 2 / ($周期数 + 1);
  $ema[0] = $收盘价数组[0];
  for ($i = 1; $i < count ($收盘价数组); $i++) {
    $ema[$i] = $alpha * $收盘价数组[$i] + (1 - $alpha) * $ema[$i-1];
  }
  return $ema;
}
function macd ($收盘价数组,$快线周期,$慢线周期,$DEA周期) {
  // 初始化一个空数组,用于存储MACD值
  $macd = array ();
  // 判断数组是否满足周期
  if (count ($收盘价数组) < $慢线周期) {
    // 如果不满足,返回一个包含n个0值的数组
    for ($i = 0; $i < $慢线周期; $i++) {
      $macd[$i] = 0;
    }
    return $macd;
  }
  // 如果满足,继续进行MACD的计算,以下代码与之前相同
  $ema12 = ema ($收盘价数组,$快线周期);
  $ema26 = ema ($收盘价数组,$慢线周期);
  $diff = array ();
  for ($i = 0; $i < count ($收盘价数组); $i++) {
    $diff[$i] = $ema12[$i] - $ema26[$i];
  }
  $dea = ema ($diff,$DEA周期);
  for ($i = 0; $i < count ($收盘价数组); $i++) {
    $macd[$i] = 2 * ($diff[$i] - $dea[$i]);
  }
  return $macd;
}

// 定义一个测试函数,使用示例数据调用SMA函数,并打印结果
function test() {
    // 定义一个数组,存储示例数据
    $data = array(10, 11, 12, 13, 14, 15, 16, 17, 18, 19);

    // 调用SMA函数,计算5日SMA,权重为1,$可返回空数组为真
    $SMA5 = SMA($data, 5, 1, true);

    // 打印结果
    echo "5日SMA的结果为:\n";
    foreach ($SMA5 as $value) {
        echo $value . "\n";
    }
}

// 调用测试函数
test();
?>







作者: uhsagv    时间: 2023-10-2 13:00
感谢分享
作者: pipicool    时间: 2023-10-2 15:50
学习一下
作者: ZHuanR    时间: 2023-10-2 18:39
新技能已get√
作者: alanwoo    时间: 2023-10-2 18:44
bingAI转换
作者: kydir    时间: 2023-10-2 19:44

感谢分享
作者: bianyuan456    时间: 2023-10-2 21:10
已经顶贴,感谢您对论坛的支持!
作者: 查过    时间: 2023-10-3 07:09
已经顶贴,感谢您对论坛的支持!
作者: 豆豆灰常开心    时间: 2023-10-3 07:14
全都是大佬~
作者: yangdoudou    时间: 2023-10-3 08:22
感谢分享,支持开源。
作者: 君九    时间: 2023-10-3 09:28
支持开源
作者: happyweeks365    时间: 2023-10-3 12:58
66666666666666666
作者: 夏亿    时间: 2023-10-3 21:45
支持开源~!感谢分享
作者: 查过    时间: 2023-10-4 07:21
感谢分享,很给力!~
作者: 豆豆灰常开心    时间: 2023-10-4 07:26
全都是大佬~
作者: 韩国    时间: 2023-10-4 07:54
感谢楼主分享!

作者: 396384183    时间: 2023-10-4 08:18
已经顶贴,感谢您对论坛的支持!
作者: glr9107    时间: 2023-10-8 00:12
感谢分享
作者: lgj5000    时间: 2023-11-8 17:42
学习了,感谢楼主
作者: 2714789682    时间: 2024-2-29 22:43
支持开源~!感谢分享
作者: year1970    时间: 2024-3-15 07:57
感谢分享
作者: 2714789682    时间: 2024-3-16 20:01
感谢分享
作者: Ronne    时间: 2024-10-8 11:34
谢谢分享····
作者: 梦里的彩虹糖    时间: 2024-11-25 22:27
支持开源~!感谢
作者: xia3422    时间: 2025-3-15 11:52
感谢分享
作者: xia3422    时间: 2025-3-15 11:53
感谢分享66666




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4