为庆祝红璟开版 发一个量子理论指标.......

Discussion in '红璟程序化交易平台' started by lswwdz, May 26, 2014.

  1. 原文
    http://www.mql5.com/zh/articles/238
    红璟指标:

    //-------------------------------------------
    public class MMM : IndicatorBase // MovingMiniMax
    {
    public double M = 0;

    public double N = 0;

    public MMM()
    : base()
    {
    AddParam("M", "20", "0", "500", "", IndicatorParamType.Double);

    AddParam("N", "300", "10", "1000", "", IndicatorParamType.Double);
    }

    public override IndicatorPackage Run(IDataProvider DP)
    {
    this.DataProvider = DP;
    // double[] LJWZ = new double[C.Length];
    DataArray mm = new double[C.Length];
    //DataArray mm2 = new double[C.Length];
    int m = (int)M; // Smoothing window width 平滑窗口宽度
    int n = (int)N; // Time window width 时间窗口宽度
    int cd = n + 2 * m;
    double[] S = new double[cd];

    double[] sQiip1 = new double[n];
    double[] sQiim1 = new double[n];
    double[] sPiip1 = new double[n];
    double[] sPiim1 = new double[n];
    double[] sui = new double[n];

    double[] dQiip1 = new double[n];
    double[] dQiim1 = new double[n];
    double[] dPiip1 = new double[n];
    double[] dPiim1 = new double[n];
    double[] dui = new double[n];
    for (int dqxh = 0; dqxh < C.Length; dqxh++)
    {

    if (dqxh > cd)
    {
    // DataArray S= new DataArray(C, cd);
    for (int i = 0; i < cd; i++)
    {
    S = C[dqxh - cd + 1 + i];
    }
    //----------------------------
    // void calcQii()
    {
    int i, k;

    for (i = 0; i < n; i++)
    {
    double sqiip1 = 0;
    double sqiim1 = 0;
    double dqiip1 = 0;
    double dqiim1 = 0;

    for (k = 0; k < m; k++)
    {
    sqiip1 += Math.Exp(2 * (S[m - 1 + i + k] - S) / (S[m - 1 + i + k] + S));
    sqiim1 += Math.Exp(2 * (S[m - 1 + i - k] - S) / (S[m - 1 + i - k] + S));

    dqiip1 += Math.Exp(-2 * (S[m - 1 + i + k] - S) / (S[m - 1 + i + k] + S));
    dqiim1 += Math.Exp(-2 * (S[m - 1 + i - k] - S) / (S[m - 1 + i - k] + S));
    }
    sQiip1 = sqiip1;
    sQiim1 = sqiim1;
    dQiip1 = dqiip1;
    dQiim1 = dqiim1;

    }
    }
    //----------------------- calcQii end
    // void calcPii()
    {
    int i;

    for (i = 0; i < n; i++)
    {
    sPiip1 = sQiip1 / (sQiip1 + sQiim1);
    sPiim1 = sQiim1 / (sQiip1 + sQiim1[i]);
    dPiip1[i] = dQiip1[i] / (dQiip1[i] + dQiim1[i]);
    dPiim1[i] = dQiim1[i] / (dQiip1[i] + dQiim1[i]);

    }
    }

    //----------------calcPii end
    // void calcui()
    {
    int i;

    sui[0] = 1;
    dui[0] = 1;

    for (i = 1; i < n; i++)
    {
    sui[i] = (sPiim1[i] / sPiip1[i]) * sui[i - 1];
    dui[i] = (dPiim1[i] / dPiip1[i]) * dui[i - 1];
    }

    double uSum = 0;
    double dSum = 0;

    double[] uSi = new double[n];
    double[] dSi = new double[n];

    for (i = 0; i < n; i++)
    {
    uSum += sui[i];
    dSum += dui[i];
    }
    for (i = 0; i < n; i++)
    {
    uSi[n - 1 - i] = sui[i] / uSum;
    dSi[n - 1 - i] = dui[i] / dSum;
    }


    mm[dqxh] = (uSi[n - 1] - dSi[n - 1])*1000*1000;

    }
    //-----------calcui end
    }
    }


    mm.Name = "MovingMiniMax";
    mm.SetAttrs(" COLORSTICK");


    return new IndicatorPackage(new DataArray[] { mm }, "");

    }



    public override string LongName
    {
    get { return "MovingMiniMax(按事件方式计算)"; }
    }

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

    } //class mmmsj[/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]
     
  2. 谢谢蜀山
     
  3. 效果图

    效果图
    [​IMG]
     
  4. 不错
     
  5. 支持一下~~