论坛全局菜单下方 - exness285X70 - 韬客社区论坛全局菜单下方 - 荔枝返现285X70 - 韬客社区论坛全局菜单下方 - ThinkMarkets285X70 - 韬客社区论坛全局菜单下方 - TICKMILL 285X70 - 韬客社区
查看:3234回复: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周期后再报警呀?
版权所有:韬客外汇论坛 www.talkfx.com 联络我们:[email protected]