设为首页收藏本站

宽客俱乐部——量化投资与对冲基金交流平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
揭开股票高频交易的神秘面纱——股票日内回转T+0交易课程
神奇的期货冲量交易法培训(包学会)
查看: 2554|回复: 6

关于增量指标的写法

[复制链接]
发表于 2015-4-28 21:26:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

以下是红璟增量指标的写法,写法不一定要按这样写,我们只要知道原理:当在图表运行指标或策略里定义全局指标类时,指标类内部的全局变量时保留值的,这样就可以实现在保留值的基础上实现增量指标的计算。
增量指标的速度是全量计算不可比拟的,但也有缺点,一是写法复杂,对一些要保留的变量都可能要定制函数处理;二是不能动态改数据周期,一旦改了,就要清空保留的变量,在新的数据周期上进行重新全量计算,然后再增量计算。

public class MACDIncrement : IndicatorBase
    {
        public double LONG = 0;
        public double SHORT = 0;
        public double M = 0;


        private List<double> ShortEMA = new List<double>();
        private List<double> LongEMA = new List<double>();
        private List<double> DiffEMA = new List<double>();
        private List<double> DeaEMA = new List<double>();
        private List<double> MacdEMA = new List<double>();

        public MACDIncrement()
            : base()
        {
            AddParam("LONG", "26", "20", "100", "", IndicatorParamType.Double);
            AddParam("SHORT", "12", "5", "40", "", IndicatorParamType.Double);
            AddParam("M", "9", "2", "60", "", IndicatorParamType.Double);
        }

        public override IndicatorPackage Run(IDataProvider DP)
        {
            this.DataProvider = DP;

            HiPerfTimer.Start();
            ShortEMA = SimpleEMA(CLOSE, SHORT, ShortEMA);
            LongEMA = SimpleEMA(CLOSE, LONG, LongEMA);

            DiffEMA = SubList(ShortEMA, LongEMA, DiffEMA, 1.0);
            DeaEMA = SimpleEMA(new DataArray(DiffEMA), M, DeaEMA);

            MacdEMA = SubList(DiffEMA, DeaEMA, MacdEMA, 2.0);

            DataArray DIFF = new DataArray(DiffEMA); DIFF.Name = "DIFF";
            DataArray DEA = new DataArray(DeaEMA); DEA.Name = "DEA";
            DataArray MACD = new DataArray(MacdEMA); MACD.Name = "MACD"; MACD.SetAttrs("COLORSTICK");

            HiPerfTimer.Stop();
            PrintLine(this.GetType().Name + "耗时:" + HiPerfTimer.Duration + "毫秒");

            return new IndicatorPackage(new DataArray[] { DIFF, DEA, MACD }, "");
        }



        public override string LongName
        {
            get { return "指数平滑异同移动平均线"; }
        }

        public override string Description
        {
            get { return ""; }
        }

        private List<double> SubList(List<double> leftdata, List<double> rightdata, List<double> storageData, double times)//times为乘数
        {
            if (storageData.Count < leftdata.Count)
            {
                for (int j = storageData.Count; j < leftdata.Count; j++)
                {
                    storageData.Add(times * (leftdata[j] - rightdata[j]));
                }
            }
            else
            {
                int iCurIdx = storageData.Count - 1;
                storageData[iCurIdx] = times * (leftdata[iCurIdx] - rightdata[iCurIdx]);
            }
            return storageData;
        }

        private List<double> SimpleEMA(DataArray BaseData, double period, List<double> storageData)
        {
            if (storageData.Count < BaseData.Length)
            {
                for (int j = storageData.Count; j < BaseData.Length; j++)
                {
                    if (j > 0)
                    {
                        storageData.Add((BaseData[j] * 2.0 / (period + 1.0)) + (storageData[j - 1] * (1.0 - 2.0 / (period + 1.0))));
                    }
                    else
                    {
                        storageData.Add(BaseData[j]);
                    }
                }
            }
            else
            {
                int iCurIdx = storageData.Count - 1;
                storageData[iCurIdx] = (BaseData[iCurIdx] * 2.0 / (period + 1.0)) + (storageData[iCurIdx - 1] * (1.0 - 2.0 / (period + 1.0)));
            }
            return storageData;
        }
    }
回复

使用道具 举报

 楼主| 发表于 2015-4-28 21:27:41 | 显示全部楼层
回复 支持 反对

使用道具 举报

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

本版积分规则

手机版|量化投资|对冲套利|高频|互联网接口|资产管理|宽客俱乐部 ( 沪ICP备16036585号   点击交谈

关注

GMT+8, 2019-5-27 19:06 , Processed in 0.109776 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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