久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    多種均線方法

     禁忌石 2023-12-07 發布于浙江

    // MA_Method=0: SMA - Simple Moving Average

    double SMA(int price,int per,int bar)

    {

       double Sum = 0;

       for(int i = 0;i < per;i++) Sum += iMA(NULL,0,1,0,0,price,bar+i);

       

       return(Sum/per);

    }

    double SMAOnArray(double& array[],int per,int bar)

    {

       double Sum = 0;

       for(int i = 0;i < per;i++) Sum += array[bar+i];

       

       return(Sum/per);

    }

                               

    // MA_Method=1: EMA - Exponential Moving Average

    double EMA(int price,double prev,int per,int bar)

    {

       if(bar >= Bars - 2) double ema = iMA(NULL,0,1,0,0,price,bar);

       else

       ema = prev + 2.0/(1+per)*(iMA(NULL,0,1,0,0,price,bar) - prev); 

       

       return(ema);

    }

    // MA_Method=2: Wilder - Wilder Exponential Moving Average

    double Wilder(int price,double prev,int per,int bar)

    {

       if(bar >= Bars - 2) double wilder = iMA(NULL,0,1,0,0,price,bar); //SMA(array1,per,bar);

       else

       wilder = prev + (iMA(NULL,0,1,0,0,price,bar) - prev)/per; 

       

       return(wilder);

    }

    // MA_Method=3: LWMA - Linear Weighted Moving Average

    double LWMA(int price,int per,int bar)

    {

       double Sum = 0;

       double Weight = 0;

       

          for(int i = 0;i < per;i++)

          { 

          Weight+= (per - i);

          Sum += iMA(NULL,0,1,0,0,price,bar+i)*(per - i);

          }

       if(Weight>0) double lwma = Sum/Weight;

       else lwma = 0; 

       return(lwma);

    double LWMAOnArray(double& array[],int per,int bar)

    {

       double Sum = 0;

       double Weight = 0;

       

          for(int i = 0;i < per;i++)

          { 

          Weight+= (per - i);

          Sum += array[bar+i]*(per - i);

          }

       if(Weight>0) double lwma = Sum/Weight;

       else lwma = 0; 

       return(lwma);

    }

     

    // MA_Method=4: SineWMA - Sine Weighted Moving Average

    double SineWMA(int price,int per,int bar)

    {

       double pi = 3.1415926535;

       double Sum = 0;

       double Weight = 0;

      

          for(int i = 0;i < per;i++)

          { 

          Weight+= MathSin(pi*(i+1)/(per+1));

          Sum += iMA(NULL,0,1,0,0,price,bar+i)*MathSin(pi*(i+1)/(per+1)); 

          }

       if(Weight>0) double swma = Sum/Weight;

       else swma = 0; 

       return(swma);

    }

    // MA_Method=5: TriMA - Triangular Moving Average

    double TriMA(int price,int per,int bar)

    {

       double sma;

       int len = MathCeil((per+1)*0.5);

       

       double sum=0;

       for(int i = 0;i < len;i++) 

       {

       sma = SMA(price,len,bar+i);

       sum += sma;

       } 

       double trima = sum/len;

       

       return(trima);

    }

    // MA_Method=6: LSMA - Least Square Moving Average (or EPMA, Linear Regression Line)

    double LSMA(int price,int per,int bar)

    {   

       double Sum=0;

       for(int i=per; i>=1; i--) Sum += (i-(per+1)/3.0)*iMA(NULL,0,1,0,0,price,bar+per-i);

       double lsma = Sum*6/(per*(per+1));

       return(lsma);

    }

    // MA_Method=7: SMMA - Smoothed Moving Average

    double SMMA(int price,double prev,int per,int bar)

    {

       if(bar == Bars - per) double smma = SMA(price,per,bar);

       else

       if(bar < Bars - per)

       {

       double Sum = 0;

       for(int i = 0;i < per;i++) Sum += iMA(NULL,0,1,0,0,price,bar+i+1);

       smma = (Sum - prev + iMA(NULL,0,1,0,0,price,bar))/per;

       }

       

       return(smma);

    }

    // MA_Method=8: HMA - Hull Moving Average by Alan Hull

    double HMA(int price,int per,int bar)

    {

       double _tmp[];

       int len = MathSqrt(per);

       

       ArrayResize(_tmp,len);

       

       if(bar == Bars - per) double hma = iMA(NULL,0,1,0,0,price,bar); 

       else

       if(bar < Bars - per)

       {

       for(int i=0;i<len;i++) _tmp[i] = 2*LWMA(price,per/2,bar+i) - LWMA(price,per,bar+i);  

       hma = LWMAOnArray(_tmp,len,0); 

       }  

       return(hma);

    }

    // MA_Method=9: ZeroLagEMA - Zero-Lag Exponential Moving Average

    double ZeroLagEMA(int price,double prev,int per,int bar)

    {

       double alfa = 2.0/(1+per); 

       int lag = 0.5*(per - 1); 

       

       if(bar >= Bars - lag) double zema = iMA(NULL,0,1,0,0,price,bar);

       else

       zema = alfa*(2*iMA(NULL,0,1,0,0,price,bar) - iMA(NULL,0,1,0,0,price,bar+lag)) + (1-alfa)*prev;

       

       return(zema);

    }

    // MA_Method=10: DEMA - Double Exponential Moving Average by Patrick Mulloy

    double DEMA(int index,int num,int price,double per,double v,int bar)

    {

       double alpha = 2.0/(1+per);

       if(bar == Bars - 2) {double dema = iMA(NULL,0,1,0,0,price,bar); tmp[num][index][0] = dema; tmp[num+1][index][0] = dema;}

       else

       if(bar <  Bars - 2) 

       {

       tmp[num  ][index][0] = tmp[num  ][index][1] + alpha*(iMA(NULL,0,1,0,0,price,bar) - tmp[num  ][index][1]); 

       tmp[num+1][index][0] = tmp[num+1][index][1] + alpha*(tmp[num][index][0]          - tmp[num+1][index][1]); 

       dema                 = tmp[num  ][index][0]*(1+v) - tmp[num+1][index][0]*v;

       }

       

       return(dema);

    }

    double DEMAOnArray(int index,int num,double price,double per,double v,int bar)

    {

       double alpha = 2.0/(1+per);

       if(bar == Bars - 2) {double dema = price; tmp[num][index][0] = dema; tmp[num+1][index][0] = dema;}

       else

       if(bar <  Bars - 2) 

       {

       tmp[num  ][index][0] = tmp[num  ][index][1] + alpha*(price              - tmp[num  ][index][1]); 

       tmp[num+1][index][0] = tmp[num+1][index][1] + alpha*(tmp[num][index][0] - tmp[num+1][index][1]); 

       dema                 = tmp[num  ][index][0]*(1+v) - tmp[num+1][index][0]*v;

       }

       

       return(dema);

    }

    // MA_Method=11: T3 by T.Tillson

    double T3_basic(int index,int num,int price,int per,double v,int bar)

    {

       double dema1, dema2;

       

       if(bar == Bars - 2) 

       {

       double T3 = iMA(NULL,0,1,0,0,price,bar); 

       for(int k=0;k<6;k++) tmp[num+k][index][0] = T3;

       }

       else

       if(bar < Bars - 2) 

       {

       T3    = iMA(NULL,0,1,0,0,price,bar); 

       dema1 = DEMAOnArray(index,num  ,T3   ,per,v,bar); 

       dema2 = DEMAOnArray(index,num+2,dema1,per,v,bar); 

       T3    = DEMAOnArray(index,num+4,dema2,per,v,bar);

       }

       

       return(T3);

    }

    // MA_Method=12: ITrend - Instantaneous Trendline by J.Ehlers

    double ITrend(int price,double& array[],int per,int bar)

    {

       double alfa = 2.0/(per + 1);

       if(bar < Bars - 7)

       double it = (alfa - 0.25*alfa*alfa)*iMA(NULL,0,1,0,0,price,bar) + 0.5*alfa*alfa*iMA(NULL,0,1,0,0,price,bar+1) 

                 - (alfa - 0.75*alfa*alfa)*iMA(NULL,0,1,0,0,price,bar+2) + 2*(1-alfa)*array[1] - (1-alfa)*(1-alfa)*array[2];

       else

       it = (iMA(NULL,0,1,0,0,price,bar) + 2*iMA(NULL,0,1,0,0,price,bar+1) + iMA(NULL,0,1,0,0,price,bar)+2)/4;

       

       return(it);

    }

    // MA_Method=13: Median - Moving Median

    double Median(int price,int per,int bar)

    {

       double array[];

       ArrayResize(array,per);

       

       for(int i = 0; i < per;i++) array[i] = iMA(NULL,0,1,0,0,price,bar+i);

       ArraySort(array);

       

       int num = MathRound((per-1)/2); 

       if(MathMod(per,2) > 0) double median = array[num]; else median = 0.5*(array[num]+array[num+1]);

        

       return(median); 

    }

    // MA_Method=14: GeoMean - Geometric Mean

    double GeoMean(int price,int per,int bar)

    {

       if(bar < Bars - per)

       { 

       double gmean = MathPow(iMA(NULL,0,1,0,0,price,bar),1.0/per); 

       for(int i = 1; i < per;i++) gmean *= MathPow(iMA(NULL,0,1,0,0,price,bar+i),1.0/per); 

       }

       

       return(gmean);

    }

    // MA_Method=15: REMA - Regularized EMA by Chris Satchwell

    double REMA(int price,double& array[],int per,double lambda,int bar)

    {

       double alpha =  2.0/(per + 1);

       if(bar >= Bars - 3) double rema = iMA(NULL,0,1,0,0,price,bar);

       else

       rema = (array[1]*(1+2*lambda) + alpha*(iMA(NULL,0,1,0,0,price,bar) - array[1]) - lambda*array[2])/(1+lambda); 

       

       return(rema);

    }

    // MA_Method=16: ILRS - Integral of Linear Regression Slope

    double ILRS(int price,int per,int bar)

    {

       double sum = per*(per-1)*0.5;

       double sum2 = (per-1)*per*(2*per-1)/6.0;

         

       double sum1 = 0;

       double sumy = 0;

          for(int i=0;i<per;i++)

          { 

          sum1 += i*iMA(NULL,0,1,0,0,price,bar+i);

          sumy += iMA(NULL,0,1,0,0,price,bar+i);

          }

       double num1 = per*sum1 - sum*sumy;

       double num2 = sum*sum - per*sum2;

       

       if(num2 != 0) double slope = num1/num2; else slope = 0; 

       double ilrs = slope + SMA(price,per,bar);

       

       return(ilrs);

    }

    // MA_Method=17: IE/2 - Combination of LSMA and ILRS

    double IE2(int price,int per,int bar)

    {

       double ie = 0.5*(ILRS(price,per,bar) + LSMA(price,per,bar));

          

       return(ie); 

    }

    // MA_Method=18: TriMAgen - Triangular Moving Average Generalized by J.Ehlers

    double TriMA_gen(int price,int per,int bar)

    {

       int len1 = MathFloor((per+1)*0.5);

       int len2 = MathCeil((per+1)*0.5);

       double sum=0;

       for(int i = 0;i < len2;i++) sum += SMA(price,len1,bar+i);

       double trimagen = sum/len2;

       

       return(trimagen);

    }

    double TriMA_genOnArray(double& array[],int per,int bar)

    {

       int len1 = MathFloor((per+1)*0.5);

       int len2 = MathCeil((per+1)*0.5);

       double sum=0;

       for(int i = 0;i < len2;i++) sum += SMAOnArray(array,len1,bar+i);

       double trimagen = sum/len2;

       

       return(trimagen);

    }

    // MA_Method=19: VWMA - Volume Weighted Moving Average

    double VWMA(int price,int per,int bar)

    {

       double Sum = 0;

       double Weight = 0;

       

          for(int i = 0;i < per;i++)

          { 

          Weight+= Volume[bar+i];

          Sum += iMA(NULL,0,1,0,0,price,bar+i)*Volume[bar+i];

          }

       if(Weight>0) double vwma = Sum/Weight;

       else vwma = 0; 

       return(vwma);

    // MA_Method=20: JSmooth - Smoothing by Mark Jurik

    double JSmooth(int index,int num,int price,int per,double pow,int bar)

    {

       double beta  = 0.45*(per-1)/(0.45*(per-1)+2);

    double alpha = MathPow(beta,pow);

    double _ma   = iMA(NULL,0,1,0,0,price,bar); 

    if(bar == Bars - 2) 

    {

    tmp[num+4][index][0] = _ma; 

    tmp[num+0][index][0] = _ma; 

    tmp[num+2][index][0] = _ma;

    }

    else

       if(bar <  Bars - 2) 

       {

    tmp[num+0][index][0] = (1-alpha)*_ma + alpha*tmp[num+0][index][1];

    tmp[num+1][index][0] = (_ma - tmp[num+0][index][0])*(1-beta) + beta*tmp[num+1][index][1];

    tmp[num+2][index][0] = tmp[num+0][index][0] + tmp[num+1][index][0];

    tmp[num+3][index][0] = (tmp[num+2][index][0] - tmp[num+4][index][1])*MathPow((1-alpha),2) + MathPow(alpha,2)*tmp[num+3][index][1];

    tmp[num+4][index][0] = tmp[num+4][index][1] + tmp[num+3][index][0]; 

       }

       

       return(tmp[num+4][index][0]);

    }

    // MA_Method=21: SMA_eq     - Simplified SMA

    double SMA_eq(int price,double& array[],int per,int bar)

    {

       if(bar == Bars - per) double sma = SMA(price,per,bar);

       else

       if(bar <  Bars - per) sma = (iMA(NULL,0,1,0,0,price,bar) - iMA(NULL,0,1,0,0,price,bar+per))/per + array[1]; 

       

       return(sma);

    }                        

    // MA_Method=22: ALMA by Arnaud Legoux / Dimitris Kouzis-Loukas / Anthony Cascino

    double ALMA(int price,int per,double offset,double sigma,int bar)

    {

       double m = MathFloor(offset * (per - 1));

    double s = per/sigma;

    double w, sum =0, wsum = 0;

    for (int i=0;i < per;i++) 

    {

    w = MathExp(-((i - m)*(i - m))/(2*s*s));

       wsum += w;

       sum += iMA(NULL,0,1,0,0,price,bar+(per-1-i))*w; 

       }

       

       if(wsum != 0) double alma = sum/wsum; 

       

       return(alma);

    }   

    // MA_Method=23: TEMA - Triple Exponential Moving Average by Patrick Mulloy

    double TEMA(int index,int price,int per,double v,int bar)

    {

       double alpha = 2.0/(per+1);

    double _ma   = iMA(NULL,0,1,0,0,price,bar);

    if(bar == Bars - 2) {tmp[0][index][0] = _ma; tmp[1][index][0] = _ma; tmp[2][index][0] = _ma;}

    else

       if(bar <  Bars - 2) 

       {

    tmp[0][index][0] = tmp[0][index][1] + alpha *(_ma               - tmp[0][index][1]);

    tmp[1][index][0] = tmp[1][index][1] + alpha *(tmp[0][index][0] - tmp[1][index][1]);

    tmp[2][index][0] = tmp[2][index][1] + alpha *(tmp[1][index][0] - tmp[2][index][1]);

    tmp[3][index][0] = tmp[0][index][0] + v*(tmp[0][index][0] + v*(tmp[0][index][0]-tmp[1][index][0]) - tmp[1][index][0] - v*(tmp[1][index][0] - tmp[2][index][0])); 

    }

       

       return(tmp[3][index][0]);

    }

    // MA_Method=24: T3 by T.Tillson (correct version) 

    double T3(int index,int num,double price,int per,double v,int bar)

    {

       double len = MathMax((per + 5.0)/3.0-1,1), dema1, dema2;

       double T3, _ma = iMA(NULL,0,1,0,0,price,bar); 

       

       if(bar == Bars - 2) for(int k=0;k<6;k++) tmp[num+k][index][0] = _ma;

       else

       if(bar < Bars - 2) 

       {

       dema1 = DEMAOnArray(index,num  ,_ma  ,len,v,bar); 

       dema2 = DEMAOnArray(index,num+2,dema1,len,v,bar); 

       T3    = DEMAOnArray(index,num+4,dema2,len,v,bar);

       }

       

       return(T3);

    }

    // MA_Method=25: Laguerre filter by J.Ehlers

    double Laguerre(int index,int price,int per,int order,int bar)

    {

       double gamma = 1-10.0/(per+9);

       double _ma   = iMA(NULL,0,1,0,0,price,bar);

       double aPrice[];

       

       ArrayResize(aPrice,order);

       

       for(int i=0;i<order;i++)

       {

          if(bar >= Bars - order) tmp[i][index][0] = _ma;

          else

          {

             if(i == 0) tmp[i][index][0] = (1 - gamma)*_ma + gamma*tmp[i][index][1];

             else

             tmp[i][index][0] = -gamma * tmp[i-1][index][0] + tmp[i-1][index][1] + gamma * tmp[i][index][1];

          

          aPrice[i] = tmp[i][index][0];

          }

       }

       double laguerre = TriMA_genOnArray(aPrice,order,0);  

       return(laguerre);

    }

    // MA_Method=26:  MD - McGinley Dynamic

    double McGinley(int price,double prev,int per,int bar)

    {

       if(bar == Bars - 2) double md = iMA(NULL,0,1,0,0,price,bar);

       else

       if(bar <  Bars - 2 && prev > 0) 

       {

       double p = iMA(NULL,0,1,0,0,price,bar);

       md = prev + (p - prev)/(per*MathPow(p/prev,4)/2); 

       }

       return(md);

    }

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 精品无码国产自产在线观看水浒传| 大帝AV在线一区二区三区| 又大又长粗又爽又黄少妇毛片| 人妻少妇久久中文字幕| 国产精品中文字幕日韩| 亚洲AV熟妇在线观看| 亚洲欧美日韩中文在线制服| 国产永久免费高清在线| 特黄三级又爽又粗又大| 亚洲精品韩国一区二区| 久久久一本精品99久久精品88 | 国产丰满美女A级毛片| 在国产线视频A在线视频| 亚洲AV成人噜噜无码网站 | 亚洲色大成网站WWW久久| 美女内射无套日韩免费播放| 亚洲精品动漫免费二区| 亚洲愉拍一区二区三区| 色婷婷在线精品国自产拍| 加勒比无码人妻东京热| 精品人妻伦九区久久AAA片| 国产高清在线男人的天堂| 日本无遮挡真人祼交视频| 99久久国产成人免费网站| 狠狠综合久久AV一区二区| 成人无码视频在线观看免费播放| 香蕉影院在线观看| 亚欧美日韩香蕉在线播放视频| 亚洲中文字幕无线无码毛片| 狠狠五月深爱婷婷网| 无码福利写真片视频在线播放| 免费无码又爽又刺激网站| 亚洲国产精品午夜福利| 人人妻人人藻人人爽欧美一区 | 无码中文人妻视频2019 | 秋霞A级毛片在线看| 男女动态无遮挡动态图| 一本一道av无码中文字幕麻豆| 成人国产精品日本在线观看| 中文字幕理伦午夜福利片| 久久精品国产99久久久古代 |