博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
行情指标
阅读量:6587 次
发布时间:2019-06-24

本文共 2722 字,大约阅读时间需要 9 分钟。

EMA它的定义是 Y=[2*X+(N-1)*Y']/(N+1) Y'是上一个周期的计算值。这样的函数是一个递归函数,不断的调用前一个周期的值来参加计算的。我们为了加快计算的速度,没有采用递归的方式。

实现的EMA是这样的

public static List<float> EMA(this List<float> input,int n)
        {
            float[] list = new float[input.Count];
            list[0] = input[0];

            float x;

            float y;
            float yLast;
            for (int i = 1;i < input.Count;i++)
            {
                yLast = list[i - 1];
                x = input[i];

                y = (x * 2 + (n - 1) * yLast) / (n + 1);

                list[i] = y;
            }
            return list.ToList();
        }

我们直接根据原来的值返回一个有同样位数的返回值。这样软件同样可以非常方便的去判断。最后期的一个值是不是满足条件了。

现在来看一下如何写一个MACD的函数

DIFF : EMA(CLOSE,SHORT) - EMA(CLOSE,LONG);
DEA : EMA(DIFF,M);
MACD : 2*(DIFF-DEA), COLORSTICK;   
 
上面的是Macd在大智慧中的函数。
先定义了一个MacdInfo的类
    public class MacdInfo
    {
        public List<float> Diff
        { get; set; }
        public List<float> DEA
        { get; set; }
        public List<float> MACD
        { get; set; }
    }
Diff DEA MACD上面的三个我们都有定义了。
public class MACD    {        ///         /// DIFF : EMA(CLOSE,SHORT) - EMA(CLOSE,LONG);        /// DEA  : EMA(DIFF,M);        /// MACD : 2*(DIFF-DEA), COLORSTICK;        ///         ///         ///         /// 
public MacdInfo Calculate(List
list,int s,int l,int m) { var closeList = list.Select(it => it.Close).ToList();//先得到所有的Close的值 var shortList = closeList.EMA(s);//算出短期的滑动平均 var longList = closeList.EMA(l);//算出长期的滑动平均 List
diff = new List
(); for (int i = 0;i < shortList.Count;i++)//使用循环的方法算出每一个周期的diff { diff.Add(shortList[i] - longList[i]); } var dea = diff.EMA(m);//跟据diff算出dea List
macd = new List
(); for (int i = 0;i < diff.Count;i++)//算出macd { macd.Add(2 * (diff[i] - dea[i])); } MacdInfo info = new MacdInfo(); info.DEA = dea; info.Diff = diff; info.MACD = macd; return info; } }///StockLog是我们的股票K线记录类 public class StockLog { public string StockCode { get; set; } public DateTime Date { get; set; } public float Open { get; set; } public float Low { get; set; } public float Close { get; set; } public float High { get; set; } ///新浪不支持啊 //public decimal Amount //{ get; set; } public float Volume { get; set; } public StockLog Clone() { return this.MemberwiseClone() as StockLog; } public string ToChartTip() { return string.Format("高:{0}\r\n低:{1}\r\n开:{2}\r\n收:{3}\r\n日期:{4}", High.ToString("f3"), Low.ToString("f3"), Open.ToString("f3"), Close.ToString("f3"),Date.ToShortDateString()); } }

 

转载地址:http://nuhno.baihongyu.com/

你可能感兴趣的文章
mysql5.5.17源代码安装
查看>>
关于【cocos2dx-3.0beta-制作flappybird】教程在3.2project中出现找不到CCMenuItem.h的解决方法...
查看>>
7z格式、LZMA压缩算法和7-Zip详细介绍
查看>>
imx6 uboot splash image
查看>>
转:全栈工程师的知识栈列表
查看>>
C/C++获取文件大小
查看>>
深入理解Java内存模型(五)——锁
查看>>
Chalubo僵尸网络来袭 IOT设备或将受到DDoS攻击
查看>>
实用功能一手玩转!复合机操控面板一览
查看>>
乌鲁木齐大雾弥漫 局地能见度不足200米
查看>>
骚年,还在为歌荒发愁吗?python教你爬取网易云热门歌单
查看>>
如何实现百万TPS?详解JMQ4的存储设计
查看>>
Play! Framework 系列(一):初探 play 框架
查看>>
Shiro【授权、整合Spirng、Shiro过滤器】
查看>>
MarkDown语法
查看>>
这么说吧,NIO很简单,其实就是个牛逼IO
查看>>
七、【应用的主要框架】
查看>>
使用Python快速获取公众号文章定制电子书(二)
查看>>
weak和assign的区别
查看>>
iOS下JS与OC互相调用(七)--Cordova 基础
查看>>