zoukankan      html  css  js  c++  java
  • 行情指标

    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
        {
            /// <summary>
            /// DIFF : EMA(CLOSE,SHORT) - EMA(CLOSE,LONG);
            /// DEA  : EMA(DIFF,M);
            /// MACD : 2*(DIFF-DEA), COLORSTICK;
            /// </summary>
            /// <param name="list"></param>
            /// <param name="?"></param>
            /// <returns></returns>
            public MacdInfo Calculate(List<StockLog> 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<float> diff = new List<float>();
                for (int i = 0;i < shortList.Count;i++)//使用循环的方法算出每一个周期的diff
                {
                    diff.Add(shortList[i] - longList[i]);
                }
                var dea = diff.EMA(m);//跟据diff算出dea
                List<float> macd = new List<float>();
                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}
    低:{1}
    开:{2}
    收:{3}
    日期:{4}", High.ToString("f3"), Low.ToString("f3"), Open.ToString("f3"), Close.ToString("f3"),Date.ToShortDateString());
            }
        }
    
  • 相关阅读:
    DOS命令:列出某目录下的所有文本文件名并重定向到某文件
    换掉Tomcat默认图标
    Html中的次方符号怎么写
    MySQL插值语句
    截短字符串的函数(JS中适用)
    使用grep进行文本查找
    使用sed进行文字替换
    Carrer Day有感
    Pinger2
    Pinger
  • 原文地址:https://www.cnblogs.com/zeroone/p/4420948.html
Copyright © 2011-2022 走看看