查看完整版本: 求助:关于iMACD()函数中时间周期的问题

rende 2008-9-25 19:40

求助:关于iMACD()函数中时间周期的问题

一个指标文件有如下代码:

for([font=宋体]int[/font] i=0; i<500; i++)
{
    if (iMACD(NULL,[color=red]PERIOD_M15[/color],12,26,3,PRICE_CLOSE,MODE_MAIN,i)>0) //如果MACD VALUE大于0
    ObjectCreate(DoubleToStr(i,0),OBJ_VLINE,0,Time[color=red][0][/color][i],0);[/i]
[i]}[/i]

意思是从右侧开始遍历500个柱体,如果当前柱体MACD大于0则在当前柱体画一条竖线。
现在问题来了,如果把该指标添加到15M图表上,会得到如下图片:
[attach]32256[/attach]


显示的结果是正确的。MACD大于0的全部有竖线。

但是如果把该指标添加到5M图表的话:

[attach]32257[/attach]

然后再把5M图表直接切换到15M图表,会得到如下图片:

[attach]32258[/attach]

请注意看图中画圆圈的区域MACD是小于0的,为什么也会有竖线呢?

我的理解是,虽然同一个指标两次添加的图表不一样,但指标代码中已经明确指出周期是[color=#ff0000]PERIOD_M15[/color]了啊。结果应该是一样的啊。

同一个指标,都是在15M的图表上,为什么两次显示的结果不同呢? 麻请高手赐教。

[[i] 本帖最后由 rende 于 2008-9-26 00:50 编辑 [/i]]

shawnyau 2008-9-25 20:11

for(int i=0; i<500; i++)
{
    ObjectDelete(DoubleToStr(i,0));
   
    if (iMACD(NULL,PERIOD_M15,12,26,3,PRICE_CLOSE,MODE_MAIN,i)>0) //如果MACD VALUE大于0
    ObjectCreate(DoubleToStr(i,0),OBJ_VLINE,0,Time[i],0);
}

你试试看。

xfxyldj 2008-9-26 00:29

问题的产生源于i变量的标示意义。
你这段程序实际上在5分钟图表上画的线是错误的。
你没有转换周期建议你研究下。iBarShift() 函数。

简单的一个解决办法就是在deinit()卸载函数中增加删除所有对象的语句ObjectsDeleteAll() 函数。这样由5分钟切换回15分钟应该就正常了。
但5分钟绝对不是你想表达的意思。

rende 2008-9-26 01:14

谢谢楼上两位兄台的回复,你们提供的方法都有效,但这并没有解决我的问题。我真正的上目的是:

如果交易系统运行的5M的图表上,我想结合15M图表的MACD值来判断是否开仓,如何得知此时15M图表的MACD值是大于0还是小于0呢?

if (iMACD(NULL,PERIOD_M15,12,26,3,PRICE_CLOSE,MODE_MAIN,i)>0)

如果上面的这段代码没问题,那么我的5M图表上运行代码:
if (iMACD(NULL,PERIOD_M15,12,26,3,PRICE_CLOSE,MODE_MAIN,i)>0)
    ObjectCreate(DoubleToStr(i,0),OBJ_VLINE,0,Time[0],0);
在5M图表上所画出来的直线,切换到15M后(注意切换后没有重画直线)应该都处于MACD大于0的柱体上啊。

也有可能弄错了iMACD函数中变量“i”的标示意义,是不是i要通过iBarShift来转换呢?如何转换?

[[i] 本帖最后由 rende 于 2008-9-26 01:19 编辑 [/i]]

shawnyau 2008-9-26 08:58

明白你的意思了,下面这句是不是你想要的?

if (iMACD(NULL,PERIOD_M15,12,26,3,PRICE_CLOSE,MODE_MAIN,iBarShift(NULL, PERIOD_M15, Time[i]))>0)

xfxyldj 2008-9-26 09:24

5楼的基本理解了关于周期转换的问题。语句中Time换成Time[ i ]即可。
另外如果不重新绘制对象会有些问题。因为15分钟1条K线在5分钟内是3条K线,也就是说会在5分钟内连续的绘制3条。当直接切换到15分钟,会出现对象重叠,另外对象名字也容易出现冲突。建议还是重绘的好。

shawnyau 2008-9-26 10:22

[quote]原帖由 [i]xfxyldj[/i] 于 2008-9-26 09:24 发表 [url=http://www.onefx.net/bbs/redirect.php?goto=findpost&pid=322138&ptid=52573][img]http://www.onefx.net/bbs/images/common/back.gif[/img][/url]
5楼的基本理解了关于周期转换的问题。语句中Time换成Time[ i ]即可。
另外如果不重新绘制对象会有些问题。因为15分钟1条K线在5分钟内是3条K线,也就是说会在5分钟内连续的绘制3条。当直接切换到15分钟,会出现对象重叠,另 ... [/quote]

你没有理解他的意思,他不是想正确显示图表,而是想在交易系统里面正确的跨周期调用数据,呵呵。

rende 2008-9-27 02:24

谢谢二位兄台,搞定了,的确是自己没有完全理解 I 的标示意义。

rende 2008-9-27 02:24

[quote]原帖由 [i]shawnyau[/i] 于 2008-9-26 10:22 发表 [url=http://www.onefx.net/bbs/redirect.php?goto=findpost&pid=322166&ptid=52573][img]http://www.onefx.net/bbs/images/common/back.gif[/img][/url]


你没有理解他的意思,他不是想正确显示图表,而是想在交易系统里面正确的跨周期调用数据,呵呵。 [/quote]

没错。!!!
页: [1]
查看完整版本: 求助:关于iMACD()函数中时间周期的问题