以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  策略编写求助区  (http://222.73.7.161/bbs/list.asp?boardid=11)
----  [求助]关于小周期内取大周期的数值  (http://222.73.7.161/bbs/dispbbs.asp?boardid=11&id=89019)

--  作者:saintlucifer
--  发布时间:2015/12/30 10:56:52
--  [求助]关于小周期内取大周期的数值

董小球版主曾经发布过一个在1分钟周期内取5分钟周期ma无未来数据的代码,如下

 

鉴于许多人需要夸周期引用数据,尤其是小周期引用大周期的数据或者指标者居多,而通常情况下,这种小引大的方式容易出现未来数据,从而影响计算结果和条件判断,因此,我给出下面算法,大家可以验证一下,是否可以解决未来数据问题。



//利用下面算法可以解决在1分钟周期下引用5分钟MA均线产生未来数据的问题
//下面例子以在1分钟周期下引用5分钟周期下的MA5均线为例作为讲解,大家可以学习方法然后扩展到任意周期任意指标;

{
算法的原理是:利用MA均线的算法可知,将前4根5分钟K线的收盘价相加,然后再加上当前1分钟的收盘价,
取得这5根K线收盘价总和之后,除以5,即是当根1分钟K线收盘那一时间点所对应的5分钟K线下的MA5均线。

这个算法解决了下面具体问题,通常情况下,例如13.53分这根K线,在1分钟周期下引用5分钟周期数据时,引用的其实是引用的13.55分
这个时间点的5分钟数据,这种情况下将出现未来数据,系统把54分和55分这两分钟的数据也归到均线中去。
所以利用下面的算法将不再产生未来数据。
}


//取上4个五分钟整点K线的和,也就是求前4根5分钟K线收盘价的和;
M5:=IF(MOD(MINUTE,5)=0,CLOSE,0);
SUMMIN5MA4:=REF(SUM(M5,20),MOD(MINUTE,5));

//把四个5分钟K线的收盘价和当前1分钟的收盘价相加,再除以5,也就得出了此刻所对应的5分钟下的MA5了;
//这里分两种情况,一种是对于5分钟整点位置的均线也就是相当于直接调用5分钟下的MA5;另一种是对于不
//能够被5整除的K线,我们应当按照把四个5分钟K线的收盘价和当前1分钟的收盘价相加再除以5的方法来计算;
IF MOD(MINUTE,5)>0 THEN BEGIN
MIN5MA5A:=(SUMMIN5MA4+CLOSE)/5;
END;
ELSE BEGIN
MIN5MA5B:="MA.MA1#MIN5";
END;

//JG就是我们所要求的无未来数据的5分钟下的MA5均价数值;
JG:IF(MOD(MINUTE,5)=0,MIN5MA5B,MIN5MA5A);


//我们来跨周期调用一下5分钟下的MA5均线看看是否相同;如果“MIN5MA5A”始终与“MIN5MA5对比”相等,则目的达到;
MIN5MA5对比:"MA.MA1#MIN5";
 
现在我想修改成在60分钟周期内取日线周期下DMI指标内ADX,PDI与MDI的数值,请问怎么修改?因为牵涉到SMA,所以上述修改办法不行。
DMI指标如下
 

INPUT : P(5,1,100),M(6,1,100);

TR1 := SMA(MAX(MAX(HIGH-LOW,ABS(HIGH-REF(CLOSE,1))),ABS(LOW-REF(CLOSE,1))),P,1);
HD := HIGH-REF(HIGH,1);
LD := REF(LOW,1)-LOW;
DMP:= SMA(IFELSE(HD>0&&HD>LD,HD,0),P,1);
DMM:= SMA(IFELSE(LD>0&&LD>HD,LD,0),P,1);
PDI: DMP*100/TR1,COLORRED;
MDI: DMM*100/TR1,COLORGREEN;
ADX: SMA(ABS(MDI-PDI)/(MDI+PDI)*100,P,1),COLORYELLOW;


--  作者:jinzhe
--  发布时间:2016/1/4 10:03:36
--  
是的,董版主的办法只适用于简单的函数比如ma这样的,复杂的函数没有办法进行转换
--  作者:fly
--  发布时间:2016/1/4 10:08:35
--  

1楼帖提供的是一个思路。

SMA拆分起来复杂,暂时没有好办法,抱歉

 


--  作者:saintlucifer
--  发布时间:2016/1/4 10:13:42
--  
以下是引用jinzhe在2016/1/4 10:03:36的发言:
是的,董版主的办法只适用于简单的函数比如ma这样的,复杂的函数没有办法进行转换

 

那有办法在60min周期里面记录一下当时的日线周期的adx pdi跟mdi的数值吗?这样曲线一下也行


--  作者:fly
--  发布时间:2016/1/4 10:53:59
--  
用跨周期调用函数STKINDI  引用任意品种任意周期的任意指标输出
--  作者:saintlucifer
--  发布时间:2016/1/4 11:10:59
--  

这样不行的,在60分钟引用日线周期的指标,对于昨天以前只会引用当日收盘的时候的数值,我希望的时候引用每个60min线结束的时候,当时对应的日线的值