请教高手,程序错在哪儿了?
从楚天那里抄的,可是编译时出错了。
//+------------------------------------------------------------------+
//| 2.mq4 |
//| Copyright ?2005, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright ?2005, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Green
extern int Alert_Method = 2; //可选1,2,3
extern double Alert_Price_Hi = 0; //上方穿越价格报警价格
extern double Alert_Price_Lo = 0;//下方穿越报警价格
extern int Price_Min = 0;//报价周期
extern int Price_Period = 0;//ma周期
extern int Price_Shift = 0;
extern int Fast = 12;
extern int Slow = 26;
extern int Signal = 9;
double up,down;
double LastAlertTime = 0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,236);
SetIndexBuffer(0,up);
SetIndexEmptyValue(0,0.0);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,238);
SetIndexBuffer(1,down);
SetIndexEmptyValue(1,0.0);
IndicatorDigits(2);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//----
switch (Alert_Method)
{
case 1 : Alert_Start1(); break;
case 2 : Alert_Start2(); break;
case 3 : Alert_Start3(); break;
default:break;
}
return(0);
}
//+------------------------------------------------------------------+
//| Alert_start1 function for pirce Alert |
//+------------------------------------------------------------------+
void Alert_Start1()
{
if (Close[0] > Alert_Price_Hi && Alert_Price_Hi > 0)
{
Alert(Symbol()," price : ",Alert_Price_Hi,();
Sleep(1000);
SpeechText ("Alert , Alert");
}
else if (Close[0] < Alert_Price_Lo && Alert_Price_Lo > 0)
{
Alert(Symbol()," price : ",Alert_Price_Lo );
Sleep(1000);
SpeechText ("Alert , Alert");
}
}
//+------------------------------------------------------------------+
//| Alert_start2 function for Averages Alert |
//+------------------------------------------------------------------+
void Alert_Start2()
{
double Alert_Price = iMA(NULL,Price_Min,Price_Period,0,MODE_SMA,PRICE_CLOSE,Price_Shift);
for (int i=Bars-1;i>=0;i--)
{
if (iClose(NULL,Price_Min,i+Price_Shift+1) >= iMA(NULL,Price_Min,Price_Period,0,MODE_SMA,PRICE_CLOSE,i+Price_Shift+1) &&
iClose(NULL,Price_Min,i+Price_Shift) < iMA(NULL,Price_Min,Price_Period+1,0,MODE_SMA,PRICE_CLOSE,i+Price_Shift))
{
Alert_Price = iMA(NULL,Price_Min,Price_Period,0,MODE_SMA,PRICE_CLOSE,i+Price_Shift);
down=Low;
if (i == 1 && LastAlertTime!=Time[0])
{
Alert(Symbol()," Price down Cross : ",Alert_Price,": M",Price_Min,"(",Price_Period,")");
LastAlertTime=Time[0];
}
}
else if (iClose(NULL,Price_Min,i+Price_Shift+1) <= iMA(NULL,Price_Min,Price_Period,0,MODE_SMA,PRICE_CLOSE,i+Price_Shift+1) &&
iClose(NULL,Price_Min,i+Price_Shift) > iMA(NULL,Price_Min,Price_Period+1,0,MODE_SMA,PRICE_CLOSE,i+Price_Shift))
{
Alert_Price = iMA(NULL,Price_Min,Price_Period,0,MODE_SMA,PRICE_CLOSE,i+Price_Shift);
up=High;
if (i == 1 && LastAlertTime!=Time[0])
{
Alert(Symbol()," Price up Cross : ",Alert_Price,": M",Price_Min,"(",Price_Period,")");
LastAlertTime=Time[0];
}
}
}
}
void Alert_Start3()
{
int counted_bars=IndicatorCounted();
for(int i=Bars;i>=0;i--)
{
if (
iMACD(NULL,0,Fast,Slow,Signal,PRICE_CLOSE,MODE_MAIN,i) > iMACD(NULL,0,Fast,Slow,Signal,PRICE_CLOSE,MODE_SIGNAL,i)
&&
iMACD(NULL,0,Fast,Slow,Signal,PRICE_CLOSE,MODE_MAIN,i+1)iMACD(NULL,0,Fast,Slow,Signal,PRICE_CLOSE,MODE_SIGNAL,i+1)
)
{
if (i == 1 && LastAlertTime!=Time[0])
{
Alert(Symbol(),"MACD down cross");
LastAlertTime=Time[0];
}
}
}
}
//+------------------------------------------------------------------+
可是编译后提示:'\end_of_program' - unbalanced left parenthesis C:\PROGRAM FILES\METATRADER 4\experts\indicators\Alert.mq4 (173, 1)
发表于:2006-10-11 10:38只看该作者
2楼
//+------------------------------------------------------------------+
//| Alert_start1 function for pirce Alert |
//+------------------------------------------------------------------+
void Alert_Start1()
{
if (Close[0] > Alert_Price_Hi && Alert_Price_Hi > 0)
{
Alert(Symbol()," price : ",Alert_Price_Hi,();
Sleep(1000);
SpeechText ("Alert , Alert");
}
else if (Close[0] < Alert_Price_Lo && Alert_Price_Lo > 0)
{
Alert(Symbol()," price : ",Alert_Price_Lo );
Sleep(1000);
SpeechText ("Alert , Alert");
}
}
--------------------------改为
void Alert_Start1()
{
if (Close[0] > Alert_Price_Hi && Alert_Price_Hi > 0)
{
Alert(Symbol()," price : ",Alert_Price_Hi);
Sleep(1000);
SpeechText ("Alert , Alert");
}
else if (Close[0] < Alert_Price_Lo && Alert_Price_Lo > 0)
{
Alert(Symbol()," price : ",Alert_Price_Lo );
Sleep(1000);
SpeechText ("Alert , Alert");
}
}
发表于:2006-10-16 08:23只看该作者
3楼
好像还是不行,TOM兄能不能给个全的?谢谢了
发表于:2006-10-16 12:05只看该作者
4楼
Alert(Symbol()," price : ",Alert_Price_Hi,();
改为
Alert(Symbol()," price : ",Alert_Price_Hi);
韬客外汇论坛
发表于:2006-10-19 03:03只看该作者
5楼
//+------------------------------------------------------------------+
//| 2.mq4 |
//| Copyright ?2005, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright ?2005, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Green
extern int Alert_Method = 2; //可选1,2,3
extern double Alert_Price_Hi = 0; //上方穿越价格报警价格
extern double Alert_Price_Lo = 0;//下方穿越报警价格
extern int Price_Min = 0;//报价周期
extern int Price_Period = 0;//ma周期
extern int Price_Shift = 0;
extern int Fast = 12;
extern int Slow = 26;
extern int Signal = 9;
double up,down;
double LastAlertTime = 0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,236);
SetIndexBuffer(0,up);
SetIndexEmptyValue(0,0.0);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,238);
SetIndexBuffer(1,down);
SetIndexEmptyValue(1,0.0);
IndicatorDigits(2);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//----
switch (Alert_Method)
{
case 1 : Alert_Start1(); break;
case 2 : Alert_Start2(); break;
case 3 : Alert_Start3(); break;
default:break;
}
return(0);
}
//+------------------------------------------------------------------+
//| Alert_start1 function for pirce Alert |
//+------------------------------------------------------------------+
void Alert_Start1()
{
if (Close[0] > Alert_Price_Hi && Alert_Price_Hi > 0)
{
Alert(Symbol()," price : ",Alert_Price_Hi,);
Sleep(1000);
SpeechText ("Alert , Alert");
}
else if (Close[0] < Alert_Price_Lo && Alert_Price_Lo > 0)
{
Alert(Symbol()," price : ",Alert_Price_Lo );
Sleep(1000);
SpeechText ("Alert , Alert");
}
}
//+------------------------------------------------------------------+
//| Alert_start2 function for Averages Alert |
//+------------------------------------------------------------------+
void Alert_Start2()
{
double Alert_Price = iMA(NULL,Price_Min,Price_Period,0,MODE_SMA,PRICE_CLOSE,Price_Shift);
for (int i=Bars-1;i>=0;i--)
{
if (iClose(NULL,Price_Min,i+Price_Shift+1) >= iMA(NULL,Price_Min,Price_Period,0,MODE_SMA,PRICE_CLOSE,i+Price_Shift+1) &&
iClose(NULL,Price_Min,i+Price_Shift) < iMA(NULL,Price_Min,Price_Period+1,0,MODE_SMA,PRICE_CLOSE,i+Price_Shift))
{
Alert_Price = iMA(NULL,Price_Min,Price_Period,0,MODE_SMA,PRICE_CLOSE,i+Price_Shift);
down=Low;
if (i == 1 && LastAlertTime!=Time[0])
{
Alert(Symbol()," Price down Cross : ",Alert_Price,": M",Price_Min,"(",Price_Period,")");
LastAlertTime=Time[0];
}
}
else if (iClose(NULL,Price_Min,i+Price_Shift+1) <= iMA(NULL,Price_Min,Price_Period,0,MODE_SMA,PRICE_CLOSE,i+Price_Shift+1) &&
iClose(NULL,Price_Min,i+Price_Shift) > iMA(NULL,Price_Min,Price_Period+1,0,MODE_SMA,PRICE_CLOSE,i+Price_Shift))
{
Alert_Price = iMA(NULL,Price_Min,Price_Period,0,MODE_SMA,PRICE_CLOSE,i+Price_Shift);
up=High;
if (i == 1 && LastAlertTime!=Time[0])
{
Alert(Symbol()," Price up Cross : ",Alert_Price,": M",Price_Min,"(",Price_Period,")");
LastAlertTime=Time[0];
}
}
}
}
void Alert_Start3()
{
int counted_bars=IndicatorCounted();
for(int i=Bars;i>=0;i--)
{
if (
iMACD(NULL,0,Fast,Slow,Signal,PRICE_CLOSE,MODE_MAIN,i) > iMACD(NULL,0,Fast,Slow,Signal,PRICE_CLOSE,MODE_SIGNAL,i)
&&
iMACD(NULL,0,Fast,Slow,Signal,PRICE_CLOSE,MODE_MAIN,i+1)iMACD(NULL,0,Fast,Slow,Signal,PRICE_CLOSE,MODE_SIGNAL,i+1)
)
{
if (i == 1 && LastAlertTime!=Time[0])
{
Alert(Symbol(),"MACD down cross");
LastAlertTime=Time[0];
}
}
}
}
//+------------------------------------------------------------------+
晕啊,按照朋友你说的改了,不过错反而多了,我又看不来哪错了,麻烦再帮看看是怎么会事好吗?谢谢了!!
错误提示如下:123.GIF
韬客社区www.talkfx.co
6楼
在Tom老师的帮助下,我已经改好了,编译过了,没问题。
//+------------------------------------------------------------------+
//| 2.mq4 |
//| Copyright ?2005, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright ?2005, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Green
extern int Alert_Method = 2; //可选1,2,3
extern double Alert_Price_Hi = 0; //上方穿越价格报警价格
extern double Alert_Price_Lo = 0;//下方穿越报警价格
extern int Price_Min = 0;//报价周期
extern int Price_Period = 0;//ma周期
extern int Price_Shift = 0;
extern int Fast = 12;
extern int Slow = 26;
extern int Signal = 9;
double up,down;
double LastAlertTime = 0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,236);
SetIndexBuffer(0,up);
SetIndexEmptyValue(0,0.0);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,238);
SetIndexBuffer(1,down);
SetIndexEmptyValue(1,0.0);
IndicatorDigits(2);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//----
switch (Alert_Method)
{
case 1 : Alert_Start1(); break;
case 2 : Alert_Start2(); break;
case 3 : Alert_Start3(); break;
default:break;
}
return(0);
}
//+------------------------------------------------------------------+
//| Alert_start1 function for pirce Alert |
//+------------------------------------------------------------------+
void Alert_Start1()
{
if (Close[0] > Alert_Price_Hi && Alert_Price_Hi > 0)
{
Alert(Symbol()," price : ",Alert_Price_Hi);
//Sleep(1000);
//SpeechText ("Alert , Alert");
}
else if (Close[0] < Alert_Price_Lo && Alert_Price_Lo > 0)
{
Alert(Symbol()," price : ",Alert_Price_Lo );
//Sleep(1000);
//SpeechText ("Alert , Alert");
}
}
//+------------------------------------------------------------------+
//| Alert_start2 function for Averages Alert |
//+------------------------------------------------------------------+
void Alert_Start2()
{
double Alert_Price = iMA(NULL,Price_Min,Price_Period,0,MODE_SMA,PRICE_CLOSE,Price_Shift);
for (int i=Bars-1;i>=0;i--)
{
if (iClose(NULL,Price_Min,i+Price_Shift+1) >= iMA(NULL,Price_Min,Price_Period,0,MODE_SMA,PRICE_CLOSE,i+Price_Shift+1) &&
iClose(NULL,Price_Min,i+Price_Shift) < iMA(NULL,Price_Min,Price_Period+1,0,MODE_SMA,PRICE_CLOSE,i+Price_Shift))
{
Alert_Price = iMA(NULL,Price_Min,Price_Period,0,MODE_SMA,PRICE_CLOSE,i+Price_Shift);
down=Low;
if (i == 1 && LastAlertTime!=Time[0])
{
Alert(Symbol()," Price down Cross : ",Alert_Price,": M",Price_Min,"(",Price_Period,")");
LastAlertTime=Time[0];
}
}
else if (iClose(NULL,Price_Min,i+Price_Shift+1) <= iMA(NULL,Price_Min,Price_Period,0,MODE_SMA,PRICE_CLOSE,i+Price_Shift+1) &&
iClose(NULL,Price_Min,i+Price_Shift) > iMA(NULL,Price_Min,Price_Period+1,0,MODE_SMA,PRICE_CLOSE,i+Price_Shift))
{
Alert_Price = iMA(NULL,Price_Min,Price_Period,0,MODE_SMA,PRICE_CLOSE,i+Price_Shift);
up=High;
if (i == 1 && LastAlertTime!=Time[0])
{
Alert(Symbol()," Price up Cross : ",Alert_Price,": M",Price_Min,"(",Price_Period,")");
LastAlertTime=Time[0];
}
}
}
}
void Alert_Start3()
{
int counted_bars=IndicatorCounted();
for(int i=Bars;i>=0;i--)
{
if (
iMACD(NULL,0,Fast,Slow,Signal,PRICE_CLOSE,MODE_MAIN,i) > iMACD(NULL,0,Fast,Slow,Signal,PRICE_CLOSE,MODE_SIGNAL,i)
&&
iMACD(NULL,0,Fast,Slow,Signal,PRICE_CLOSE,MODE_MAIN,i+1)iMACD(NULL,0,Fast,Slow,Signal,PRICE_CLOSE,MODE_SIGNAL,i+1)
)
{
if (i == 1 && LastAlertTime!=Time[0])
{
Alert(Symbol(),"MACD down cross");
LastAlertTime=Time[0];
}
}
}
}
[ 本帖最后由 eagle 于 2006-10-19 12:40 编辑 ]
Think big-Start small-Move fast
8楼
http://www.talkforex.com/viewthread.php?tid=57788
这是一个“报警三件套”的指标,原程序是从“楚天”处抄来的,详细情况见上面的链接。
Think big-Start small-Move fast