秃鹫大哥请
秃鹫大哥小弟有一个报警指标,对指标的其他功能比较满意,可是对报警功能感觉不够用。这个报警只是一声响,小弟详情秃鹫大哥帮着改成直到取消,报警声才停止。多谢秃鹫大哥
也请其他高手大哥赐教,谢谢诸位哥哥
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 DodgerBlue
#property indicator_color2 Red
#property indicator_color3 Red
#property indicator_color4 Yellow
double CrossUp;
double CrossDown;
double MAF;
double MAS;
extern bool Alert_X=true;
extern int FasterMode = 0; //0=sma, 1=ema, 2=smma, 3=lwma
extern int FasterMA = 5;
extern int SlowerMode = 0; //0=sma, 1=ema, 2=smma, 3=lwma
extern int SlowerMA = 10;
static double UP_Alert,DO_Alert;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0, DRAW_ARROW, 2);
SetIndexArrow(0, 233);
SetIndexBuffer(0, CrossUp);
SetIndexStyle(1, DRAW_ARROW, 2);
SetIndexArrow(1, 234);
SetIndexBuffer(1, CrossDown);
SetIndexBuffer(2, MAF);
SetIndexBuffer(3, MAS);
SetIndexStyle(2, DRAW_LINE);
SetIndexStyle(3, DRAW_LINE);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectDelete("onefx_label0");
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int limit, i, counter;
double fasterMAnow, slowerMAnow, fasterMAprevious, slowerMAprevious, fasterMAafter, slowerMAafter;
double Range;
int counted_bars=IndicatorCounted();
//---- check for possible errors
if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
for(i = 0; i <= limit; i++)
{
MAF = iMA(NULL, 0, FasterMA, 0, FasterMode, PRICE_CLOSE, i);
MAS = iMA(NULL, 0, SlowerMA, 0, SlowerMode, PRICE_CLOSE, i);
}
for(i = 0; i <= limit; i++)
{
Range=iATR(NULL,0,10,i+1);
if (MAF > MAS && MAF[i+1] > MAS[i+1] && MAF[i+2] < MAS[i+2])
{
CrossUp = Open;//Low - Range*0.5;
}
if (MAF < MAS && MAF[i+1] < MAS[i+1] && MAF[i+2] > MAS[i+2])
{
CrossDown = Open;//High + Range*0.5;
}
}
if (Alert_X==false)
{
DO_Alert=Time[0];
UP_Alert=Time[0];
}
if (UP_Alert!=Time[0] && MAF[0] > MAS[0] && MAF[1] > MAS[1] && MAF[2] < MAS[2])
{
Alert(Symbol()+" "+Period()+" MA-Crossover_Signal "+FasterMA+" 金叉 "+SlowerMA);
UP_Alert=Time[0];
}
if (DO_Alert!=Time[0] && MAF[0] < MAS[0] && MAF[1] < MAS[1] && MAF[2] > MAS[2])
{
Alert(Symbol()+" "+Period()+" MA-Crossover_Signal "+FasterMA+" 死叉"+SlowerMA);
DO_Alert=Time[0];
}
return(0);
}
//+------------------------------------------------------------------+
发表于:2008-10-06 03:58只看该作者
2楼
按你说的功能做不到,不过可以加入报警次数。试一下下面这个改过的
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 DodgerBlue
#property indicator_color2 Red
#property indicator_color3 Red
#property indicator_color4 Yellow
extern int FasterMode = 0;
extern int FasterMA = 5;
extern int SlowerMode = 0;
extern int SlowerMA = 10;
extern bool Alert_X=true;
extern int Alert_max=5;
datetime preTime=0;
int count;
double CrossUp;
double CrossDown;
double MAF;
double MAS;
void init() {
SetIndexStyle(0, DRAW_ARROW, 2);
SetIndexArrow(0, 233);
SetIndexBuffer(0, CrossUp);
SetIndexStyle(1, DRAW_ARROW, 2);
SetIndexArrow(1, 234);
SetIndexBuffer(1, CrossDown);
SetIndexBuffer(2, MAF);
SetIndexBuffer(3, MAS);
SetIndexStyle(2, DRAW_LINE);
SetIndexStyle(3, DRAW_LINE);
}
void deinit() {
ObjectDelete("onefx_label0");
}
void start(){
int limit, t, counter;
double fasterMAnow, slowerMAnow, fasterMAprevious, slowerMAprevious, fasterMAafter, slowerMAafter;
double Range;
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
for(t = 0; t <= limit; t++) {
MAF[t] = iMA(NULL, 0, FasterMA, 0, FasterMode, PRICE_CLOSE, t);
MAS[t] = iMA(NULL, 0, SlowerMA, 0, SlowerMode, PRICE_CLOSE, t);
}
for(t = 0; t <= limit; t++) {
Range=iATR(NULL,0,10,t+1);
if (MAF[t] > MAS[t] && MAF[t+1] > MAS[t+1] && MAF[t+2] < MAS[t+2]) {
CrossUp[t] = Open[t];
}
if (MAF[t] < MAS[t] && MAF[t+1] < MAS[t+1] && MAF[t+2] > MAS[t+2]) {
CrossDown[t] = Open[t];
}
}
if( Time[0]>preTime ){
count=0;
preTime=Time[0];
}
if(count<=Alert_max){
if ( MAF[0] > MAS[0] && MAF[1] > MAS[1] && MAF[2] < MAS[2]) {
Alert(Symbol()+" "+Period()+" MA-Crossover_Signal "+FasterMA+" 金叉 "+SlowerMA+"NO."+count);
count++;
}
if ( MAF[0] < MAS[0] && MAF[1] < MAS[1] && MAF[2] > MAS[2]) {
Alert(Symbol()+" "+Period()+" MA-Crossover_Signal "+FasterMA+" 死叉"+SlowerMA+"NO."+count);
count++;
}
}
}