问题是3均线交叉后,每一根K都报警,只需要交叉后报警一次就好。 哪位大侠帮我修改一下,感谢。
extern int 短均线周期=10; extern int 短平移=0; extern int 短移动平均=1; extern int 短应用于=0; extern int 中均线周期=20; extern int 中平移=0; extern int 中移动平均=1; extern int 中应用于=0; extern int 长均线周期=30; extern int 长平移=0; extern int 长移动平均=1; extern int 长应用于=0; extern string 看多报警声音="ok.wav"; extern string 看空报警声音="ok.wav";
int sj; string 注释="0"; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //----
//---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- int Ticket; if(看多报警()&&sj!=Time[0]) { PlaySound(看多报警声音); Print(Symbol()+"看多报警成功!!"); sj=Time[0];
} if(看空报警()&&sj!=Time[0]) { PlaySound(看空报警声音); Print(Symbol()+"看空报警成功!!"); sj=Time[0]; }
//---- return(0); } //+------------------------------------------------------------------+ bool 看多报警() { double d1=iMA(NULL,0,短均线周期,短平移,短移动平均,短应用于,1); double z1=iMA(NULL,0,中均线周期,中平移,中移动平均,中应用于,1); double c1=iMA(NULL,0,长均线周期,长平移,长移动平均,长应用于,1); if(d1>c1&&z1>c1&&d1>z1&&Close[1]*Point )return(true); else return(false); } bool 看空报警() { double d1=iMA(NULL,0,短均线周期,短平移,短移动平均,短应用于,1); double z1=iMA(NULL,0,中均线周期,中平移,中移动平均,中应用于,1); double c1=iMA(NULL,0,长均线周期,长平移,长移动平均,长应用于,1); if(d1<c1&&z1<c1&&d1<z1&&Close[1]*Point )return(true); else return(false); }
|