读书山林 发表于 2015-5-9 00:18:49

本帖最后由 读书山林 于 2015-5-9 00:23 编辑

大周期上回溯怎么办 很重要的函数iRef  很多童鞋改写一些算法不正确就是因为忽视了算法内部的回溯值//------------------------------------------------------------------------
// 简称: iRef
// 名称: 跨周期求回溯值 读书山林
// 类别: 用户函数
// 类型: 用户函数
// 输出: 数值型
//------------------------------------------------------------------------

Params

        NumericSeries mtBarCnt(0);        // MtBar函数返回的mtBarCnt值
        Numeric Length(10);         // 目标周期下的回溯周期
Vars
        Numeric Length0(2);   
        Numeric i;
        Numeric j(0); // 与目标周期下的回溯周期 等值的小周期回溯周期值
Begin
        If(Length==0)
        {
          Return 0;          
        }Else   If(Length==1)
        {
          Return mtBarCnt;       
        }Else
        {
          j=0;
          Length0=Length;

          For i = 1 to Length0
          {
                If (mtBarCnt <> InvalidNumeric)
                {
                        j = j + mtBarCnt;
                }
                else Break;
         }
         Return j;
        }
End

读书山林 发表于 2015-5-9 00:37:55

本帖最后由 读书山林 于 2015-5-13 09:03 编辑

iEMA//------------------------------------------------------------------------
// 简称: iEMA
// 名称: 读书山林
// 类别: 用户函数
// 类型: 用户函数
// 输出: 数值型
//------------------------------------------------------------------------
Params
        NumericSeries iPrice;
        NumericSeries mtBarCnt;
        Numeric Length(10);
Vars
        Numeric sFcactor;
        NumericSeries XAvgValue;
        
Begin
                sFcactor = 2 / ( Length + 1 );
                if ( XAvgValue == InvalidNumeric)
                {
                        XAvgValue = iPrice;
                }else
                {
                        XAvgValue = XAvgValue + sFcactor * ( iPrice - XAvgValue ) ;
                }        
                Return XAvgValue;
End

feiniulala0723 发表于 2015-5-10 08:44:16

好东西,谢谢分享!:lol

读书山林 发表于 2015-5-10 22:33:13

iAMA   跨周期求考夫曼//------------------------------------------------------------------------
// 简称: iAMA
// 名称: 跨周期求考夫曼 读书山林
// 类别: 用户函数
// 类型: 用户函数
// 输出: 数值型
//------------------------------------------------------------------------


Params
        NumericSeries Price(1);
        NumericSeries mtBarCnt(1);       
        Numeric EffRatioLength(10);
        Numeric FastAvgLength(2);
        Numeric SlowAvgLength(30);
Vars
        Numeric oEffRatioLength(10);
        Numeric NetChg(0);
        Numeric TotChg(0);
        Numeric EffRatio(0);
        Numeric ScaledSFSqr(0);
        NumericSeries AMAValue;       
        Numeric SFDiff;
        NumericSeries sumx;       
Begin
              if ( AMAValue == InvalidNumeric)
              {
                  AMAValue = Price;
                  Return AMAValue;
               }
               
               oEffRatioLength=iRef(mtBarCnt,EffRatioLength);
               
                NetChg = Abs( Price - Price );
                sumx = Abs( Price - Price );
                TotChg = iSum(sumx ,mtBarCnt ,EffRatioLength );               
                EffRatio = IIF(TotChg > 0, NetChg / TotChg, 0);
                SFDiff = 2 / ( FastAvgLength + 1 ) - 2 / ( SlowAvgLength + 1 );               
                ScaledSFSqr = Sqr( 2 / ( SlowAvgLength + 1 ) + EffRatio * SFDiff );               
                AMAValue = AMAValue + ScaledSFSqr * ( Price - AMAValue );

               Return AMAValue;
End

读书山林 发表于 2015-5-10 22:36:03

再举个调用实例//------------------------------------------------------------------------
// 简称: testAMA
// 名称:
// 类别: 公式应用
// 类型: 用户应用
// 输出:
//------------------------------------------------------------------------
Params  
        Numeric TimeFrame(30);        // 目标时间周期参数,参数说明参见iBar
        Numeric BarsBack(1);          // 目标时间周期BAR偏移参数,说明见MtBar函数
        Numeric EffRatioLength(10);
        Numeric FastAvgLength(2);
        Numeric SlowAvgLength(30);
Vars
        Numeric closeX(1);  
        Numeric AMAValue(1);
        NumericSeries mtBarCnt(1);        
Begin
        closeX=iPrice0("Close",TimeFrame,BarsBack);//跨周期的数据源
        mtBarCnt=inBar(TimeFrame,BarsBack);       // 跨周期的inBar
       
        AMAValue=iAMA(closeX,mtBarCnt,EffRatioLength,FastAvgLength,SlowAvgLength);
        PlotNumeric("AdpMa",AMAValue);       
End

读书山林 发表于 2015-5-10 22:55:35

本帖最后由 读书山林 于 2015-5-10 22:57 编辑

//------------------------------------------------------------------------
// 简称: iHHV
// 名称: 跨期求Highest
// 类别: 用户函数
// 类型: 用户函数
// 输出: 数值型
//------------------------------------------------------------------------

Params
        NumericSeries Price(0);
        NumericSeries mtBarCnt(0);        
        Numeric Length(5);
Vars
        Numeric HighestValue;
        Numeric i;
        Numeric j;       
Begin                       
        HighestValue = Price;               
        for i=1 to Length - 1
       {
                j=iRef(mtBarCnt,i);
                If(Price > HighestValue)
                        HighestValue = Price;
        }
        Return HighestValue;
End

读书山林 发表于 2015-5-10 22:56:27

//------------------------------------------------------------------------
// 简称: iLLV
// 名称: 跨期求Lowest
// 类别: 用户函数
// 类型: 用户函数
// 输出: 数值型
//------------------------------------------------------------------------

Params
        NumericSeries Price(0);
        NumericSeries mtBarCnt(0);                
        Numeric Length(5);
Vars
        Numeric LowestValue;
        Numeric i;
        Numeric j;               
Begin
        LowestValue = Price;       
        for i=1 to Length - 1
       {
                j=iRef(mtBarCnt,i);       
                If(Price < LowestValue)
                        LowestValue = Price;
        }
        Return LowestValue;

End

glaceage 发表于 2015-5-10 22:58:01

还没完全看懂 谢谢山林老师 留着细细看

读书山林 发表于 2015-5-10 23:12:19

glaceage 发表于 2015-5-10 22:58 static/image/common/back.gif
还没完全看懂 谢谢山林老师 留着细细看

会用调用就行,调用已经很方便了

tsbftwo 发表于 2015-5-11 10:17:27

非常感谢!
页: 1 [2] 3 4 5 6
查看完整版本: 福利 跨周期的傻瓜式解决方案