论坛全局菜单下方 - TICKMILL 285X70论坛全局菜单下方 - ThinkMarkets285X70论坛全局菜单下方 - 荔枝返现285X70论坛全局菜单下方 -  icmarkets285X70
查看:1642回复:3
chio
注册时间2007-03-23
[MT4指标][讨论] 秃鹫老师请进, 请教如何将两个指标的运算组合在一起...
楼主发表于:2008-08-09 20:04只看该作者倒序浏览
1楼 电梯直达
电梯直达
之前拜读了您为网友们提供的MQL4语言编程指导, 获益匪浅, 我非常佩服您的专业知识, 最近我设计了一个技术指标, 希望可以和您探讨下. 这个指标分成两部分, 第一部分是一个"价格过滤器", 显示效果有点像 "抛物线转向指标Parabolic SAR". 其意义是通过计算历史行情波动百分比, 得出如果价格突破最高/最低价加上多少个点可以判断是真突破. 第二部分是从MQL代码基地下载的一个LW_Fractal指标, 这个指标的概念如下: 当某个高点左侧的2根K线, 和右侧的2根K线都要低于该高点时, 称该高点为"分形"点, 如果突破分形点, 就是比尔·威廉姆斯的"鳄鱼线"系统中的买入信号. 这两部分结合起来, 就是在"鳄鱼线"系统的基础上添加一个"价格过滤器"来更好地过滤假突破. 目前我已经通过下载和改写制作了两个部分各自的指标代码, 我所遇到的困难就是如何将他们结合起来. 即让"价格过滤器"的标记及其对应"价格"只显示在符合"分形"要求的对应K线上, 而不是每根K线都显示. 如您能拨冗查看, 乃至更进一步提供您的宝贵意见, 我将万分感激. 两个指标各自的代码在这里附上, 供您参考. "价格过滤器"的代码如下: #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Teal #property indicator_color2 Teal extern int r=3600; double Buffer1; double Buffer2; double HL; int init() { SetIndexBuffer(0,Buffer1); SetIndexBuffer(1,Buffer2); SetIndexBuffer(2,HL); SetIndexStyle(0,DRAW_ARROW); SetIndexStyle(1,DRAW_ARROW); SetIndexArrow(0,159); SetIndexArrow(1,159); IndicatorDigits(6); return(0); } int start() { int limit,t; int counted_bars=IndicatorCounted(); if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; for(t=0; t=cntdown) cnt=cntup; if (cntup0) cbars--; pos=0; if (cbars > (Bars-cnt-1)) pos=(Bars-cnt-1); else pos=cbars+nRightUp; //--- while(pos>=nRightUp) { FractalsUp[pos] =NULL; FractalsDown[pos]=NULL; //o?AEOAE AAA?O r=nRightUp; //i?iaa?yai i?aao? noi?iio o?aeoaea for(i=1;i<=r;i++) { if (High[pos]<=High[pos-i]) break; } //anee ni?aaa ana IE oi i aie?ii auou ?aaii r+1 if (i==r+1) //FractalsUp[pos]=High[pos]; { l=nLeftUp; //i?iaa?yai eaao? noi?iio o?aeoaea e=Equals; for(j=1;j<=l+Equals;j++) { if (High[pos] < High[pos+j]) break; if (High[pos] > High[pos+j]) l--; if (High[pos]==High[pos+j])e--; if (l==0) { FractalsUp[pos]=High[pos]; break; } if (e<0) break; } } //O?AEOAE AIEC r=nRightDown; //i?iaa?yai i?aao? noi?iio o?aeoaea for(i=1;i<=r;i++) { if (Low[pos]>=Low[pos-i]) break; } if (i==r+1) //FractalsUp[pos]=High[pos]; { l=nLeftDown; //i?iaa?yai eaao? noi?iio o?aeoaea e=Equals; for(j=1;j<=l+Equals;j++) { if (Low[pos] > Low[pos+j]) break; if (Low[pos] < Low[pos+j]) l--; if (Low[pos]==Low[pos+j])e--; if (l==0) { FractalsDown[pos]=Low[pos]; break; } if (e<0) break; } } pos--; } //---- return(0); } //+------------------------------------------------------------------+Frac.GIFFrac.GIFPFilter.GIFPFilter.GIF
TK29帖子1楼右侧xm竖版广告90-240
个性签名

韬客社区www.talkfx.co

广告
TK30+TK31帖子一樓廣告
TK30+TK31帖子一樓廣告
chio
注册时间2007-03-23
楼主发表于:2008-08-10 07:43只看该作者
2楼
补充下整合后指标的运算思路: 1) 用LW_Fractals的公式把"分形"点算出来 2) 因为LW_Fractals的取值都是以对应K线的最高点和最低点取值的, 所以直接对这些已经算出来的"分形"点进行Price Filter的运算. 3) Price Filter的运算中iMAOnArray这个函数的平均值样本集合对象使用最近的相邻K线, 而不是对最近的相邻"分形"点求平均值, 这点很重要. 试了几次都没报错, 只能向秃鹫老师和各位高手求助了, 谢谢!
秃鹫
注册时间2007-05-25
发表于:2008-08-10 08:33只看该作者
3楼
提供一个思路: 先用Price Filter中的语句计算Buffer1、Buffer2的值,然后再用LW_Fractals中的语句对Buffer1、Buffer2求分形高点和低点。 计算Buffer1、Buffer2语句可以不改。由于原LW_Fractals公式中是对High、Low求分形高点和分形低点的,而现在是要对Buffer1、Buffer2求分形高点和低点,所以只要把High和Low替换为Buffer1、Buffer2就可以了
个性签名

顺势

chio
注册时间2007-03-23
楼主发表于:2008-08-10 14:20只看该作者
4楼
非常感谢秃鹫老师的指导, 我已经把指标编写成功了, 新指标确实实现了之前两个指标的综合效果. 老师真是一语惊醒梦中人啊:lol 如果老师有兴趣看下完成后的指标效果的话可以发论坛短信给我, 我会另外发给您, 再次感谢!

本站免责声明:

1、本站所有广告及宣传信息均与韬客无关,如需投资请依法自行决定是否投资、斟酌资金安全及交易亏损风险;

2、韬客是独立的、仅为投资者提供交流的平台,网友发布信息不代表韬客的观点与意思表示,所有因网友发布的信息而造成的任何法律后果、风险与责任,均与韬客无关;

3、金融交易存在极高法律风险,未必适合所有投资者,请不要轻信任何高额投资收益的诱导而贸然投资;投资保证金交易导致的损失可能超过您投入的资金和预期。请您考虑自身的投资经验及风险承担能力,进行合法、理性投资;

4、所有投资者的交易帐户应仅限本人使用,不应交由第三方操作,对于任何接受第三方喊单、操盘、理财等操作的投资和交易,由此导致的任何风险、亏损及责任由投资者个人自行承担;

5、韬客不隶属于任何券商平台,亦不受任何第三方控制,韬客不邀约客户投资任何保证金交易,不接触亦不涉及投资者的任何资金及账户信息,不代理任何交易操盘行为,不向客户推荐任何券商平台,亦不存在其他任何推荐行为。投资者应自行选择券商平台,券商平台的任何行为均与韬客无关。投资者注册及使用韬客即表示其接受和认可上述声明,并自行承担法律风险。

版权所有:韬客外汇论坛 www.talkfx.com 联络我们:[email protected]