论坛全局菜单下方 - TICKMILL 285X70论坛全局菜单下方 - ThinkMarkets285X70论坛全局菜单下方 - 荔枝返现285X70论坛全局菜单下方 -  icmarkets285X70
查看:2874回复:7
YHT
注册时间2006-12-26
请教如何实现" KD交叉报警后10个周期内不再报警"
楼主发表于:2008-06-09 15:39只看该作者倒序浏览
1楼 电梯直达
电梯直达
想要实现的功能: 1. 当MACD的双线都在0轴以上时, KD的双线在20以下交叉(即双线的值相等)时报警. 2. 当MACD的双线都在0轴以下时,KD的双线在80以上交叉(即双线的值相等)时报警. 由于KD的双线的值随价格的变化, 有时会在高位或者低位有很多次相等值的出现,如果实现在第一次相等报警后, 10个周期内都不再报警的功能呢(如果用在5分钟图就是10个5分钟周期,用在1小时图就是10个1小时周期)? 请高人指点一下,我刚学程序不久, 下面是我编写的, 请帮我修改呀, 谢谢了! #property indicator_chart_window //---- input parameters extern int MACD_Fast=25; extern int MACD_Slow=50; extern int MACD_Signal=9; extern int KD_KPeriod=9; extern int KD_DPeriod=3; extern int KD_Slowing=5; extern int KD_UpLimit=80; extern int KD_LowLimit=20; int Alert_Mark=0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- Comment("KD Alert"); //---- } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { double a=iMACD(NULL,0,MACD_Fast,MACD_Slow,MACD_Signal,PRICE_CLOSE,MODE_MAIN,0); double b=iMACD(NULL,0,MACD_Fast,MACD_Slow,MACD_Signal,PRICE_CLOSE,MODE_SIGNAL,0); double x=iStochastic(NULL,0,KD_KPeriod,KD_DPeriod,KD_Slowing,MODE_SMA,0,MODE_MAIN,0); double y=iStochastic(NULL,0,KD_KPeriod,KD_DPeriod,KD_Slowing,MODE_SMA,0,MODE_SIGNAL,0); if (a>=0 && b>=0 && xKD_UpLimit && y>KD_UpLimit && x==y && Alert_Mark==0) { Alert(Symbol()," ",Period(),": KD Crossed for Short"); Alert_Mark=1; } return(0); } //+------------------------------------------------------------------+
TK29帖子1楼右侧xm竖版广告90-240
个性签名

韬客社区www.talkfx.co

广告
TK30+TK31帖子一樓廣告
TK30+TK31帖子一樓廣告
踏浪
注册时间2008-04-29
发表于:2008-06-10 03:15只看该作者
2楼
创建一个自定义变量,例如:Alert_Mark 当报警时,令Alert_Mark=Time[0]记下此时的K线的时间 假设我们需要在一次报警后n根K线之内都不再报警 加一个报警条件 Time[0] - Alert_Mark > n*Period()*60 就可以了 这是俺的想法 解释一下: Time[0] - Alert_Mark 即现在的K线时间与上次报警K线的时间差(秒数) Period()是图表周期,即一根K线的时长(分钟数)。例:在1小时图上Period()=60,在15分钟图上Period()=15等 [ 本帖最后由 踏浪 于 2008-6-10 11:18 编辑 ]
YHT
注册时间2006-12-26
楼主发表于:2008-06-10 04:58只看该作者
3楼
非常感谢啊, 我回去试试看, 有需要的地方再向你请教啊! emoji-image emoji-image
YHT
注册时间2006-12-26
楼主发表于:2008-06-10 13:30只看该作者
4楼
请帮我看看,哪个地方错了,还是报警不了:( #property indicator_chart_window //---- input parameters extern int MACD_Fast=25; extern int MACD_Slow=50; extern int MACD_Signal=9; extern int KD_KPeriod=9; extern int KD_DPeriod=3; extern int KD_Slowing=5; extern int KD_UpLimit=80; extern int KD_LowLimit=20; int Alert_Mark1=0; int Alert_Mark2=0; datetime Alert_Time1; datetime Alert_Time2; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- Comment("KD Alert"); //---- } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { double a=iMACD(NULL,0,MACD_Fast,MACD_Slow,MACD_Signal,PRICE_CLOSE,MODE_MAIN,0); double b=iMACD(NULL,0,MACD_Fast,MACD_Slow,MACD_Signal,PRICE_CLOSE,MODE_SIGNAL,0); double x=iStochastic(NULL,0,KD_KPeriod,KD_DPeriod,KD_Slowing,MODE_SMA,0,MODE_MAIN,0); double y=iStochastic(NULL,0,KD_KPeriod,KD_DPeriod,KD_Slowing,MODE_SMA,0,MODE_SIGNAL,0); if (a>=0 && b>=0 && x10) Alert_Mark1=0; } if (a<=0 && b<=0 && x>KD_UpLimit && y>KD_UpLimit && x==y && Alert_Mark2==0) { Alert(Symbol()," ",Period(),": KD Crossed for Short"); Alert_Mark2=1; Alert_Time2=Time[0]; if (((Time[0]-Alert_Time2)/(Period()*60))>10) Alert_Mark2=0; } return(0); } //+------------------------------------------------------------------+
踏浪
注册时间2008-04-29
发表于:2008-06-10 14:05只看该作者
5楼
略 ...... datetime Alert_Mark=0; ...... 略 int start() { double a=iMACD(NULL,0,MACD_Fast,MACD_Slow,MACD_Signal,PRICE_CLOSE,MODE_MAIN,0); double b=iMACD(NULL,0,MACD_Fast,MACD_Slow,MACD_Signal,PRICE_CLOSE,MODE_SIGNAL,0); double x=iStochastic(NULL,0,KD_KPeriod,KD_DPeriod,KD_Slowing,MODE_SMA,0,MODE_MAIN,0); double y=iStochastic(NULL,0,KD_KPeriod,KD_DPeriod,KD_Slowing,MODE_SMA,0,MODE_SIGNAL,0); if (a>=0 && b>=0 && x 10*Period()*60 ) { Alert(Symbol()," ",Period(),": KD Crossed for Long"); Alert_Mark=Time[0]; } if (a<=0 && b<=0 && x>KD_UpLimit && y>KD_UpLimit && x==y && (Time[0]-Alert_Mark) > 10*Period()*60) { Alert(Symbol()," ",Period(),": KD Crossed for Short"); Alert_Mark=Time[0]; } return(0); }
YHT
注册时间2006-12-26
楼主发表于:2008-06-10 14:51只看该作者
6楼
这样表达的话,好象是在第一次报警条件出来以后的10周期后再报警呀?
踏浪
注册时间2008-04-29
发表于:2008-06-10 15:11只看该作者
7楼
原帖由 YHT 于 2008-6-10 22:51 发表 http://www.talkforex.com/images/common/back.gif 这样表达的话,好象是在第一次报警条件出来以后的10周期后再报警呀?
由于Alert_Mark初值为零,所以第一次条件达到时即会报警, 报警后Alert_Mark被赋了新的时间值,所以要等10个K线后才会再报警
也峰
注册时间2010-03-10
发表于:2010-03-11 06:41只看该作者
8楼
:) 第一次报警条件出来以后的10周期后再报警呀?

本站免责声明:

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

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

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

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

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

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