开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 2925|回复: 25
打印 上一主题 下一主题
收起左侧

[易语言纯源码] ema+sma+macd指标计算

[复制链接]
结帖率:60% (3/5)
跳转到指定楼层
楼主
发表于 2023-10-2 12:42:54 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式   广东省深圳市
分享源码
界面截图:
是否带模块: 纯源码
备注说明: -
本帖最后由 易造轮 于 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();
?>






评分

参与人数 1好评 +1 精币 +1 收起 理由
天云之海 + 1 + 1 支持开源~!感谢分享

查看全部评分


结帖率:100% (2/2)
26
发表于 2025-3-15 11:53:44 | 只看该作者   山东省济南市
感谢分享66666
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)
25
发表于 2025-3-15 11:52:47 | 只看该作者   山东省济南市
感谢分享
回复 支持 反对

使用道具 举报

24
发表于 2024-11-25 22:27:51 | 只看该作者   广西壮族自治区玉林市
支持开源~!感谢
回复 支持 反对

使用道具 举报

签到天数: 1 天

23
发表于 2024-10-8 11:34:52 | 只看该作者   广东省佛山市
谢谢分享····
回复 支持 反对

使用道具 举报

22
发表于 2024-3-16 20:01:41 | 只看该作者   浙江省宁波市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)

签到天数: 17 天

21
发表于 2024-3-15 07:57:14 | 只看该作者   山东省淄博市
感谢分享
回复 支持 反对

使用道具 举报

20
发表于 2024-2-29 22:43:02 | 只看该作者   上海市上海市
支持开源~!感谢分享
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 1 天

19
发表于 2023-11-8 17:42:36 | 只看该作者   四川省成都市
学习了,感谢楼主
回复 支持 反对

使用道具 举报

18
发表于 2023-10-8 00:12:12 | 只看该作者   广西壮族自治区桂林市
感谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表