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]
没错。!!!