[求助]能否请大神帮忙改一下这个提醒指标,让她只发固定次数的邮件,现在简直是邮箱炸弹~~~
比如小时图里穿越条件成立的那条k线时段内隔12分钟才检测一下,现在波动一下就是一封,堪比炸弹~
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Yellow
#property indicator_color2 White
#property indicator_color3 Yellow
#property indicator_color4 White
//---- input parameters
extern int 均线周期1=10;
extern int 均线周期2=130;
extern int 类型1=1; //类型: 0-SMA; 1-EMA; 2-SMMA; 3-LWMA
extern int 类型2=1; //类型: 0-SMA; 1-EMA; 2-SMMA; 3-LWMA
extern string 类型说明="0-SMA; 1-EMA; 2-SMMA; 3-LWMA";
extern int 文字水平=0;
extern int 文字垂直=0;
extern int 文字大小=14;
extern string 文字标识="1";
extern color 文字颜色=Yellow;
extern int 是否报警=1;
extern int 是否发邮件=1;
//---- buffers
double Ma10;
double Ma130;
double Up;
double Down;
int TimeInMinute;
int FlagAlert=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
IndicatorBuffers(4);
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_LINE);
SetIndexStyle(2,DRAW_ARROW);
SetIndexStyle(3,DRAW_ARROW);
SetIndexBuffer(0,Ma10);
SetIndexBuffer(1,Ma130);
SetIndexBuffer(2,Up);
SetIndexBuffer(3,Down);
SetIndexArrow(2,233);
SetIndexArrow(3,234);
TimeInMinute=0;
//----
return(0);
}
int start()
{
int i;
int limit;
string Signal;
int counted_bars=IndicatorCounted();
//---- check for possible errors
if(counted_bars<0) return(-1);
//---- the last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
for (i=limit-1;i>=0;i--)
{
Ma10=iMA(NULL,0,均线周期1,0,类型1,PRICE_CLOSE,i);
Ma130=iMA(NULL,0,均线周期2,0,类型2,PRICE_CLOSE,i);
if ((Ma10[i+1]Ma130)&&(Close>Ma10)&&(Close>Ma130))
{
Signal="["+Period()+"分钟]"+TimeMonth(Time+TimeInMinute)+"月"+TimeDay(Time+TimeInMinute)+"日"+TimeHour(Time+TimeInMinute)+"点"+TimeMinute(Time+TimeInMinute)+"分 "+Symbol()+"在价格"+DoubleToStr(Close,4)+"发生"+均线周期1+"均线上穿"+均线周期2+"均线";
writetext(文字标识,Signal,20+文字水平,40+文字垂直,文字颜色,文字大小);
Up=Low-3*Point;
if (i==0)
{
if (FlagAlert==0)
{
if (是否报警==1)
Alert(Signal);
if (是否发邮件==1)
SendMail(Signal,Signal);
FlagAlert=1;
}
}
}
if ((Ma10[i+1]>Ma130[i+1])&&(Ma10
2楼
完成请发个微信赞赏码上来,有小小红包送上:lol
韬客社区www.talkfx.co
发表于:2017-10-24 09:36只看该作者
3楼
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Yellow
#property indicator_color2 White
#property indicator_color3 Yellow
#property indicator_color4 White
//---- input parameters
extern int 均线周期1=10;
extern int 均线周期2=130;
extern int 类型1=1; //类型: 0-SMA; 1-EMA; 2-SMMA; 3-LWMA
extern int 类型2=1; //类型: 0-SMA; 1-EMA; 2-SMMA; 3-LWMA
extern string 类型说明="0-SMA; 1-EMA; 2-SMMA; 3-LWMA";
extern int 文字水平=0;
extern int 文字垂直=0;
extern int 文字大小=14;
extern string 文字标识="1";
extern color 文字颜色=Yellow;
extern bool 是否报警=true;
//extern int 是否报警=1;
extern bool 是否发邮件=true;
//extern int 是否发邮件=1;
extern int 邮件间隔=12;
//---- buffers
double Ma10;
double Ma130;
double Up;
double Down;
int TimeInMinute;
int FlagAlert=0;
datetime prvEmailTime=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
IndicatorBuffers(4);
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_LINE);
SetIndexStyle(2,DRAW_ARROW);
SetIndexStyle(3,DRAW_ARROW);
SetIndexBuffer(0,Ma10);
SetIndexBuffer(1,Ma130);
SetIndexBuffer(2,Up);
SetIndexBuffer(3,Down);
SetIndexArrow(2,233);
SetIndexArrow(3,234);
TimeInMinute=0;
//----
return(0);
}
int start()
{
int i;
int limit;
string Signal;
int counted_bars=IndicatorCounted();
//---- check for possible errors
if(counted_bars<0) return(-1);
//---- the last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
for (i=limit-1;i>=0;i--)
{
Ma10=iMA(NULL,0,均线周期1,0,类型1,PRICE_CLOSE,i);
Ma130=iMA(NULL,0,均线周期2,0,类型2,PRICE_CLOSE,i);
if ((Ma10[i+1]Ma130)&&(Close>Ma10)&&(Close>Ma130))
{
Signal="["+Period()+"分钟]"+TimeMonth(Time+TimeInMinute)+"月"+TimeDay(Time+TimeInMinute)+"日"+TimeHour(Time+TimeInMinute)+"点"+TimeMinute(Time+TimeInMinute)+"分 "+Symbol()+"在价格"+DoubleToStr(Close,4)+"发生"+均线周期1+"均线上穿"+均线周期2+"均线";
writetext(文字标识,Signal,20+文字水平,40+文字垂直,文字颜色,文字大小);
Up=Low-3*Point;
if (i==0)
{
if (FlagAlert==0)
{
if (是否报警)
{Alert(Signal);}
if (是否发邮件)
{
if(prvEmailTime+邮件间隔*60 <= TimeCurrent())
{
SendMail(Signal,Signal);
prvEmailTime=TimeCurrent();
}
}
FlagAlert=1;
}
}
}
if ((Ma10[i+1]>Ma130[i+1])&&(Ma10
韬客社区www.talkfx.co
发表于:2017-10-24 11:05只看该作者
4楼
你把这段代码放到void OnTimer()里面,在int OnInit()里面初始化设置EventSetTimer(12*60).
发表于:2017-10-24 11:07只看该作者
5楼
int start()里面的代码放到void OnTimer()里面,实现12*60秒,12分钟检测一次。
韬客社区www.talkfx.co
发表于:2017-10-24 11:08只看该作者
6楼
什么咚咚?
韬客社区www.talkfx.co
发表于:2017-10-24 11:21只看该作者
7楼
int start()里面的代码放到void OnTimer()里面,实现12*60秒,12分钟检测一次。然后int start()里面代码清空,重新编译
韬客社区www.talkfx.co
发表于:2017-10-24 11:27只看该作者
8楼
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Yellow
#property indicator_color2 White
#property indicator_color3 Yellow
#property indicator_color4 White
//---- input parameters
extern int 均线周期1=10;
extern int 均线周期2=130;
extern int 类型1=1; //类型: 0-SMA; 1-EMA; 2-SMMA; 3-LWMA
extern int 类型2=1; //类型: 0-SMA; 1-EMA; 2-SMMA; 3-LWMA
extern string 类型说明="0-SMA; 1-EMA; 2-SMMA; 3-LWMA";
extern int 文字水平=0;
extern int 文字垂直=0;
extern int 文字大小=14;
extern string 文字标识="1";
extern color 文字颜色=Yellow;
extern int 是否报警=1;
extern int 是否发邮件=1;
//---- buffers
double Ma10;
double Ma130;
double Up;
double Down;
int TimeInMinute;
int FlagAlert=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
EventSetTimer(12*60);
IndicatorBuffers(4);
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_LINE);
SetIndexStyle(2,DRAW_ARROW);
SetIndexStyle(3,DRAW_ARROW);
SetIndexBuffer(0,Ma10);
SetIndexBuffer(1,Ma130);
SetIndexBuffer(2,Up);
SetIndexBuffer(3,Down);
SetIndexArrow(2,233);
SetIndexArrow(3,234);
TimeInMinute=0;
//----
return(0);
}
int start()
{ }
void OnTimer()
{
int i;
int limit;
string Signal;
int counted_bars=IndicatorCounted();
//---- check for possible errors
if(counted_bars<0) return(-1);
//---- the last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
for (i=limit-1;i>=0;i--)
{
Ma10=iMA(NULL,0,均线周期1,0,类型1,PRICE_CLOSE,i);
Ma130=iMA(NULL,0,均线周期2,0,类型2,PRICE_CLOSE,i);
if ((Ma10[i+1]Ma130)&&(Close>Ma10)&&(Close>Ma130))
{
Signal="["+Period()+"分钟]"+TimeMonth(Time+TimeInMinute)+"月"+TimeDay(Time+TimeInMinute)+"日"+TimeHour(Time+TimeInMinute)+"点"+TimeMinute(Time+TimeInMinute)+"分 "+Symbol()+"在价格"+DoubleToStr(Close,4)+"发生"+均线周期1+"均线上穿"+均线周期2+"均线";
writetext(文字标识,Signal,20+文字水平,40+文字垂直,文字颜色,文字大小);
Up=Low-3*Point;
if (i==0)
{
if (FlagAlert==0)
{
if (是否报警==1)
Alert(Signal);
if (是否发邮件==1)
SendMail(Signal,Signal);
FlagAlert=1;
}
}
}
if ((Ma10[i+1]>Ma130[i+1])&&(Ma10
韬客社区www.talkfx.co
发表于:2017-10-24 11:28只看该作者
9楼
改过的代码上传木有显示。
韬客社区www.talkfx.co
发表于:2017-10-24 11:35只看该作者
10楼
或者在int OnInit()里面初始化设置加入语句EventSetTimer(12*60); int start() 改成 void OnTimer(), void OnDeinit(const int reason){
EventKillTimer();//必须包含此语句,释放定时器
}
韬客社区www.talkfx.co
发表于:2017-10-24 11:38只看该作者
11楼
在原文的int start()上面增加 后面程序: void OnDeinit(const int reason){
EventKillTimer();//必须包含此语句,释放定时器
}
韬客社区www.talkfx.co
12楼
好的,明天我试试哈
韬客社区www.talkfx.co
发表于:2017-10-24 11:45只看该作者
13楼
简述一下, 原文int init(){ 替换成 int init(){EventSetTimer(12*60); int start(){ 替换成 void OnDeinit(const int reason){
EventKillTimer();//必须包含此语句,释放定时器
} void OnTimer(){
韬客社区www.talkfx.co
发表于:2017-10-24 13:22只看该作者
14楼
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Yellow
#property indicator_color2 White
#property indicator_color3 Yellow
#property indicator_color4 White
//---- input parameters
extern int 均线周期1=10;
extern int 均线周期2=130;
extern int 类型1=1; //类型: 0-SMA; 1-EMA; 2-SMMA; 3-LWMA
extern int 类型2=1; //类型: 0-SMA; 1-EMA; 2-SMMA; 3-LWMA
extern string 类型说明="0-SMA; 1-EMA; 2-SMMA; 3-LWMA";
extern int 文字水平=0;
extern int 文字垂直=0;
extern int 文字大小=14;
extern string 文字标识="1";
extern color 文字颜色=Yellow;
extern int 是否报警=1;
extern int 是否发邮件=1;
//---- buffers
double Ma10;
double Ma130;
double Up;
double Down;
int TimeInMinute;
int FlagAlert=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init(){EventSetTimer(12*60);
//---- indicators
IndicatorBuffers(4);
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_LINE);
SetIndexStyle(2,DRAW_ARROW);
SetIndexStyle(3,DRAW_ARROW);
SetIndexBuffer(0,Ma10);
SetIndexBuffer(1,Ma130);
SetIndexBuffer(2,Up);
SetIndexBuffer(3,Down);
SetIndexArrow(2,233);
SetIndexArrow(3,234);
TimeInMinute=0;
//----
return(0);
}
void OnDeinit(const int reason){
EventKillTimer();//必须包含此语句,释放定时器
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time,
const double &open,
const double &high,
const double &low,
const double &close,
const long &tick_volume,
const long &volume,
const int &spread)
{
//---
//--- return value of prev_calculated for next call
return(rates_total);
}
void OnTimer(){
int i;
int limit;
string Signal;
int counted_bars=IndicatorCounted();
//---- check for possible errors
if(counted_bars<0) return(-1);
//---- the last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
for (i=limit-1;i>=0;i--)
{
Ma10=iMA(NULL,0,均线周期1,0,类型1,PRICE_CLOSE,i);
Ma130=iMA(NULL,0,均线周期2,0,类型2,PRICE_CLOSE,i);
if ((Ma10[i+1]Ma130)&&(Close>Ma10)&&(Close>Ma130))
{
Signal="["+Period()+"分钟]"+TimeMonth(Time+TimeInMinute)+"月"+TimeDay(Time+TimeInMinute)+"日"+TimeHour(Time+TimeInMinute)+"点"+TimeMinute(Time+TimeInMinute)+"分 "+Symbol()+"在价格"+DoubleToStr(Close,4)+"发生"+均线周期1+"均线上穿"+均线周期2+"均线";
writetext(文字标识,Signal,20+文字水平,40+文字垂直,文字颜色,文字大小);
Up=Low-3*Point;
if (i==0)
{
if (FlagAlert==0)
{
if (是否报警==1)
Alert(Signal);
if (是否发邮件==1)
SendMail(Signal,Signal);
FlagAlert=1;
}
}
}
if ((Ma10[i+1]>Ma130[i+1])&&(Ma10
韬客社区www.talkfx.co
发表于:2017-10-24 13:24只看该作者
15楼
最后发出的代码可以运行的。mt4新建一个技术指标,把这段代码替换原有代码重新编译。
韬客社区www.talkfx.co
发表于:2017-10-24 13:25只看该作者
16楼
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Yellow
#property indicator_color2 White
#property indicator_color3 Yellow
#property indicator_color4 White
//---- input parameters
extern int 均线周期1=10;
extern int 均线周期2=130;
extern int 类型1=1; //类型: 0-SMA; 1-EMA; 2-SMMA; 3-LWMA
extern int 类型2=1; //类型: 0-SMA; 1-EMA; 2-SMMA; 3-LWMA
extern string 类型说明="0-SMA; 1-EMA; 2-SMMA; 3-LWMA";
extern int 文字水平=0;
extern int 文字垂直=0;
extern int 文字大小=14;
extern string 文字标识="1";
extern color 文字颜色=Yellow;
extern int 是否报警=1;
extern int 是否发邮件=1;
//---- buffers
double Ma10;
double Ma130;
double Up;
double Down;
int TimeInMinute;
int FlagAlert=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init(){EventSetTimer(12*60);
//---- indicators
IndicatorBuffers(4);
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_LINE);
SetIndexStyle(2,DRAW_ARROW);
SetIndexStyle(3,DRAW_ARROW);
SetIndexBuffer(0,Ma10);
SetIndexBuffer(1,Ma130);
SetIndexBuffer(2,Up);
SetIndexBuffer(3,Down);
SetIndexArrow(2,233);
SetIndexArrow(3,234);
TimeInMinute=0;
//----
return(0);
}
void OnDeinit(const int reason){
EventKillTimer();//必须包含此语句,释放定时器
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time,
const double &open,
const double &high,
const double &low,
const double &close,
const long &tick_volume,
const long &volume,
const int &spread)
{
//---
//--- return value of prev_calculated for next call
return(rates_total);
}
void OnTimer(){
int i;
int limit;
string Signal;
int counted_bars=IndicatorCounted();
//---- check for possible errors
if(counted_bars<0) return(-1);
//---- the last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
for (i=limit-1;i>=0;i--)
{
Ma10=iMA(NULL,0,均线周期1,0,类型1,PRICE_CLOSE,i);
Ma130=iMA(NULL,0,均线周期2,0,类型2,PRICE_CLOSE,i);
if ((Ma10[i+1]Ma130)&&(Close>Ma10)&&(Close>Ma130))
{
Signal="["+Period()+"分钟]"+TimeMonth(Time+TimeInMinute)+"月"+TimeDay(Time+TimeInMinute)+"日"+TimeHour(Time+TimeInMinute)+"点"+TimeMinute(Time+TimeInMinute)+"分 "+Symbol()+"在价格"+DoubleToStr(Close,4)+"发生"+均线周期1+"均线上穿"+均线周期2+"均线";
writetext(文字标识,Signal,20+文字水平,40+文字垂直,文字颜色,文字大小);
Up=Low-3*Point;
if (i==0)
{
if (FlagAlert==0)
{
if (是否报警==1)
Alert(Signal);
if (是否发邮件==1)
SendMail(Signal,Signal);
FlagAlert=1;
}
}
}
if ((Ma10[i+1]>Ma130[i+1])&&(Ma10
发表于:2017-10-24 13:25只看该作者
17楼
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Yellow
#property indicator_color2 White
#property indicator_color3 Yellow
#property indicator_color4 White
//---- input parameters
extern int 均线周期1=10;
extern int 均线周期2=130;
extern int 类型1=1; //类型: 0-SMA; 1-EMA; 2-SMMA; 3-LWMA
extern int 类型2=1; //类型: 0-SMA; 1-EMA; 2-SMMA; 3-LWMA
extern string 类型说明="0-SMA; 1-EMA; 2-SMMA; 3-LWMA";
extern int 文字水平=0;
extern int 文字垂直=0;
extern int 文字大小=14;
extern string 文字标识="1";
extern color 文字颜色=Yellow;
extern int 是否报警=1;
extern int 是否发邮件=1;
//---- buffers
double Ma10;
double Ma130;
double Up;
double Down;
int TimeInMinute;
int FlagAlert=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init(){EventSetTimer(12*60);
//---- indicators
IndicatorBuffers(4);
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_LINE);
SetIndexStyle(2,DRAW_ARROW);
SetIndexStyle(3,DRAW_ARROW);
SetIndexBuffer(0,Ma10);
SetIndexBuffer(1,Ma130);
SetIndexBuffer(2,Up);
SetIndexBuffer(3,Down);
SetIndexArrow(2,233);
SetIndexArrow(3,234);
TimeInMinute=0;
//----
return(0);
}
void OnDeinit(const int reason){
EventKillTimer();//必须包含此语句,释放定时器
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time,
const double &open,
const double &high,
const double &low,
const double &close,
const long &tick_volume,
const long &volume,
const int &spread)
{
//---
//--- return value of prev_calculated for next call
return(rates_total);
}
void OnTimer(){
int i;
int limit;
string Signal;
int counted_bars=IndicatorCounted();
//---- check for possible errors
if(counted_bars<0) return(-1);
//---- the last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
for (i=limit-1;i>=0;i--)
{
Ma10=iMA(NULL,0,均线周期1,0,类型1,PRICE_CLOSE,i);
Ma130=iMA(NULL,0,均线周期2,0,类型2,PRICE_CLOSE,i);
if ((Ma10[i+1]Ma130)&&(Close>Ma10)&&(Close>Ma130))
{
Signal="["+Period()+"分钟]"+TimeMonth(Time+TimeInMinute)+"月"+TimeDay(Time+TimeInMinute)+"日"+TimeHour(Time+TimeInMinute)+"点"+TimeMinute(Time+TimeInMinute)+"分 "+Symbol()+"在价格"+DoubleToStr(Close,4)+"发生"+均线周期1+"均线上穿"+均线周期2+"均线";
writetext(文字标识,Signal,20+文字水平,40+文字垂直,文字颜色,文字大小);
Up=Low-3*Point;
if (i==0)
{
if (FlagAlert==0)
{
if (是否报警==1)
Alert(Signal);
if (是否发邮件==1)
SendMail(Signal,Signal);
FlagAlert=1;
}
}
}
if ((Ma10[i+1]>Ma130[i+1])&&(Ma10
点评
发表于 2017-10-25 00:22
韬客社区www.talkfx.co
18楼
再次感谢!
韬客社区www.talkfx.co
发表于:2017-10-25 00:22只看该作者
19楼
qhsps 发表于 2017-10-24 21:25
#property indicator_chart_window #property indicator_buffers 4 #property indicator_color1 Yellow
韬客社区www.talkfx.co
20楼
tempasdf 发表于 2017-10-25 08:22
问题1 这个指标是画线的 ontimer 12钟画一次??? 问题2 正好12分钟时无tick 且在下一tick达到条件,那不是 ...