读书山林
发表于 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
非常感谢!