} //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ voidOnTick() { if(nb_1.new_bar("EURUSD",PERIOD_M5))Alert("Новый бар на EURUSD M5"); if(nb_2.new_bar("GBPUSD",PERIOD_M15))Alert("Новый бар на GBPUSD M15"); if(nb_3.new_bar("USDJPY",PERIOD_M30))Alert("Новый бар на USDJPY M30"); if(nb_4.new_bar("AUDCAD",PERIOD_H1))Alert("Новый бар на AUDCAD H1");
2016.12.2720:00:02.827 test03 EURUSD,M1: Alert: Новый бар на USDJPY M30 2016.12.2720:00:01.663 test03 EURUSD,M1: Alert: Новый бар на AUDCAD H1 2016.12.2720:00:01.663 test03 EURUSD,M1: Alert: Новый бар на GBPUSD M15 2016.12.2720:00:01.663 test03 EURUSD,M1: Alert: Новый бар на EURUSD M5 2016.12.2719:55:01.999 test03 EURUSD,M1: Alert: Новый бар на EURUSD M5
CNevBar *nb[]; int SymbolTotal=0; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ intOnInit() { //--- SymbolTotal=SymbolsTotal(false); ArrayResize(nb,SymbolTotal);
for(int i=0;i<SymbolTotal;i++) { nb[i]=new CNevBar(); //Print("Экземпляр класса = ",nb[i]); } //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ voidOnDeinit(constint reason) { for(int i=0;i<SymbolTotal;i++)delete(nb[i]); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ voidOnTick() { ulong Start=0; Start=GetMicrosecondCount(); for(int i=0;i<SymbolTotal;i++) { string symbol=SymbolName(i,false); if(nb[i].new_bar(symbol,PERIOD_M1))Print("Новый бар на ",symbol," M1"); } Print("На обработку всех символов в терминале ушло: ",GetMicrosecondCount()-Start," миллисекунд"); } //+------------------------------------------------------------------+
结果
2016.12.2722:24:01.182 Expert test03 EURUSD,M1: loaded successfully 2016.12.2722:24:05.046 test03 EURUSD,M1: initialized 2016.12.2722:24:39.497 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 66522 миллисекунд 2016.12.2722:24:42.819 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 181 миллисекунд 2016.12.2722:24:47.743 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 181 миллисекунд 2016.12.2722:24:48.658 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 172 миллисекунд 2016.12.2722:25:03.367 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 173 миллисекунд 2016.12.2722:25:10.051 test03 EURUSD,M1: Новый бар на EURUSD M1 2016.12.2722:25:10.051 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 183 миллисекунд 2016.12.2722:25:17.232 test03 EURUSD,M1: Новый бар на USDJPY M1 2016.12.2722:25:17.232 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 191 миллисекунд 2016.12.2722:25:19.668 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 162 миллисекунд 2016.12.2722:25:19.788 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 130 миллисекунд 2016.12.2722:25:23.064 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 160 миллисекунд 2016.12.2722:25:25.579 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 132 миллисекунд 2016.12.2722:25:57.800 test03 EURUSD,M1: Новый бар на GBPUSD M1 2016.12.2722:25:57.800 test03 EURUSD,M1: Новый бар на USDCHF M1 2016.12.2722:25:57.800 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 154 миллисекунд 2016.12.2722:25:58.510 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 129 миллисекунд 2016.12.2722:25:58.610 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 176 миллисекунд 2016.12.2722:25:58.850 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 173 миллисекунд 2016.12.2722:25:58.892 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 136 миллисекунд 2016.12.2722:25:59.043 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 138 миллисекунд 2016.12.2722:26:00.252 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 147 миллисекунд 2016.12.2722:26:19.801 test03 EURUSD,M1: Новый бар на EURUSD M1 2016.12.2722:26:19.801 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 156 миллисекунд 2016.12.2722:26:26.219 test03 EURUSD,M1: Новый бар на GBPUSD M1 2016.12.2722:26:26.219 test03 EURUSD,M1: Новый бар на USDCHF M1 2016.12.2722:26:26.219 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 170 миллисекунд 2016.12.2722:26:35.065 test03 EURUSD,M1: Новый бар на USDJPY M1 2016.12.2722:26:35.065 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 204 миллисекунд 2016.12.2722:26:41.118 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 135 миллисекунд 2016.12.2722:26:49.655 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 239 миллисекунд 2016.12.2722:26:49.745 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 129 миллисекунд 2016.12.2722:26:56.357 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 133 миллисекунд 2016.12.2722:26:56.467 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 132 миллисекунд 2016.12.2722:27:01.395 test03 EURUSD,M1: Новый бар на EURUSD M1 2016.12.2722:27:01.395 test03 EURUSD,M1: Новый бар на USDCHF M1 2016.12.2722:27:01.395 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 148 миллисекунд 2016.12.2722:27:02.204 test03 EURUSD,M1: Новый бар на USDJPY M1 2016.12.2722:27:02.204 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 148 миллисекунд 2016.12.2722:27:02.304 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 129 миллисекунд 2016.12.2722:27:02.464 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 132 миллисекунд 2016.12.2722:27:03.143 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 134 миллисекунд 2016.12.2722:28:33.018 test03 EURUSD,M1: Новый бар на EURUSD M1 2016.12.2722:28:33.018 test03 EURUSD,M1: Новый бар на GBPUSD M1 2016.12.2722:28:33.018 test03 EURUSD,M1: Новый бар на USDJPY M1 2016.12.2722:28:33.018 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 174 миллисекунд 2016.12.2722:28:33.308 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 133 миллисекунд 2016.12.2722:28:33.509 test03 EURUSD,M1: Новый бар на USDCHF M1 2016.12.2722:28:33.509 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 154 миллисекунд 2016.12.2722:28:44.137 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 132 миллисекунд 2016.12.2722:28:45.088 test03 EURUSD,M1: uninit reason 1 2016.12.2722:28:45.158 Expert test03 EURUSD,M1: removed
你可以这样做...
...
谢谢你,我对它不熟悉,但我要研究一下,我得把我的东西转换为它。
你可以把它装进3行,你不需要为这样一个简单的设计写出像铁皮一样长的代码。
void OnTick()
{
if(BBars!=Bars)
{BBars=Bars;
// код....
}
}
谢谢你,我对这个记录不熟悉,但我会研究一下,我需要修改我的记录来做这个。
P条目很简单,写成CNevBar类,有一个new_bar方法。new_bar方法在给定的字符和周期处创建一个新的bar事件。如果发生了新栏事件,那么new_bar方法返回true,否则返回false。
{
private:
datetime curbar;
datetime lastbar;
public:
CNevBar();
~CNevBar();
bool new_bar(string symbol,ENUM_TIMEFRAMES period);
};
//+------------------------------------------------------------------+
void CNevBar::CNevBar()
{
}
//+------------------------------------------------------------------+
void CNevBar::~CNevBar(void)
{
}
//+------------------------------------------------------------------+
bool CNevBar:: new_bar(string symbol,ENUM_TIMEFRAMES period)
{
curbar=(datetime) SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE);
if(lastbar==0)lastbar=(datetime)SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE);
if(lastbar!=curbar)
{
lastbar=curbar;
return(true);
}
return(false);
}
接下来是类的声明
接下来是在你的代码中使用类的一个方法
下面是一个在不同符号和时期上使用该类的例子
//| test03.mq4 |
//| Sergey Gritsay |
//| https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link "https://www.mql5.com/ru/users/sergey1294"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
class CNevBar
{
private:
datetime curbar;
datetime lastbar;
public:
CNevBar();
~CNevBar();
bool new_bar(string symbol,ENUM_TIMEFRAMES period);
};
//+------------------------------------------------------------------+
void CNevBar::CNevBar()
{
}
//+------------------------------------------------------------------+
void CNevBar::~CNevBar(void)
{
}
//+------------------------------------------------------------------+
bool CNevBar:: new_bar(string symbol,ENUM_TIMEFRAMES period)
{
curbar=(datetime) SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE);
if(lastbar==0)lastbar=(datetime)SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE);
if(lastbar!=curbar)
{
lastbar=curbar;
return(true);
}
return(false);
}
CNevBar nb_1;
CNevBar nb_2;
CNevBar nb_3;
CNevBar nb_4;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(nb_1.new_bar("EURUSD",PERIOD_M5))Alert("Новый бар на EURUSD M5");
if(nb_2.new_bar("GBPUSD",PERIOD_M15))Alert("Новый бар на GBPUSD M15");
if(nb_3.new_bar("USDJPY",PERIOD_M30))Alert("Новый бар на USDJPY M30");
if(nb_4.new_bar("AUDCAD",PERIOD_H1))Alert("Новый бар на AUDCAD H1");
}
//+------------------------------------------------------------------+
这类工作的结果
2016.12.27 20:00:01.663 test03 EURUSD,M1: Alert: Новый бар на AUDCAD H1
2016.12.27 20:00:01.663 test03 EURUSD,M1: Alert: Новый бар на GBPUSD M15
2016.12.27 20:00:01.663 test03 EURUSD,M1: Alert: Новый бар на EURUSD M5
2016.12.27 19:55:01.999 test03 EURUSD,M1: Alert: Новый бар на EURUSD M5
你可以把它装进3行。 你不需要为这样一个简单的设计写出像脚踏车一样长的代码。
void OnTick()
{
if(BBars!=Bars)
{BBars=Bars;
// код....
}
}
我只是不明白为什么要把班级拉到这里来
类的编程更方便,如果你只在当前的符号和周期上使用,你不需要一个类,你可以用一个自定义的函数来完成。
//| test03.mq4 |
//| Sergey Gritsay |
//| https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link "https://www.mql5.com/ru/users/sergey1294"
#property version "1.00"
#property strict
datetime curbar;
datetime lastbar;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(new_bar(_Symbol,PERIOD_CURRENT))Alert("Новый бар");
}
//+------------------------------------------------------------------+
bool new_bar(string symbol,ENUM_TIMEFRAMES period)
{
curbar=(datetime) SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE);
if(lastbar==0)lastbar=(datetime)SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE);
if(lastbar!=curbar)
{
lastbar=curbar;
return(true);
}
return(false);
}
//+------------------------------------------------------------------+
用类来编程更容易
你好。
我想计算图表所处的时期(时间框架)的分钟值的平方根,以便以后用于计算。
我已经找到了Period(),但如何用它进行数学运算?
请给我一个提示。
你好。
我想计算图表所处的时期(时间框架)的分钟值的平方根,以便以后用于计算。
我已经找到了Period(),但如何用它进行数学运算?
请给我一个提示。
我只是不明白为什么我们需要把班级拖到这里来
也就是说,大致上OnTick 会检查每一个tick,并吞噬资源,例如,像以前一样,60-90对?
到底是什么资源,这是一个在我的终端处理49个字符的验证码,基本上只需要不到200毫秒的时间。
//| test03.mq4 |
//| Sergey Gritsay |
//| https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link "https://www.mql5.com/ru/users/sergey1294"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
class CNevBar
{
private:
datetime curbar;
datetime lastbar;
public:
CNevBar();
~CNevBar();
bool new_bar(string symbol,ENUM_TIMEFRAMES period);
};
//+------------------------------------------------------------------+
void CNevBar::CNevBar()
{
}
//+------------------------------------------------------------------+
void CNevBar::~CNevBar(void)
{
}
//+------------------------------------------------------------------+
bool CNevBar:: new_bar(string symbol,ENUM_TIMEFRAMES period)
{
curbar=(datetime) SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE);
if(lastbar==0)lastbar=(datetime)SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE);
if(lastbar!=curbar)
{
lastbar=curbar;
return(true);
}
return(false);
}
CNevBar *nb[];
int SymbolTotal=0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
SymbolTotal=SymbolsTotal(false);
ArrayResize(nb,SymbolTotal);
for(int i=0;i<SymbolTotal;i++)
{
nb[i]=new CNevBar();
//Print("Экземпляр класса = ",nb[i]);
}
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
for(int i=0;i<SymbolTotal;i++)delete(nb[i]);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
ulong Start=0;
Start=GetMicrosecondCount();
for(int i=0;i<SymbolTotal;i++)
{
string symbol=SymbolName(i,false);
if(nb[i].new_bar(symbol,PERIOD_M1))Print("Новый бар на ",symbol," M1");
}
Print("На обработку всех символов в терминале ушло: ",GetMicrosecondCount()-Start," миллисекунд");
}
//+------------------------------------------------------------------+
结果
2016.12.27 22:24:05.046 test03 EURUSD,M1: initialized
2016.12.27 22:24:39.497 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 66522 миллисекунд
2016.12.27 22:24:42.819 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 181 миллисекунд
2016.12.27 22:24:47.743 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 181 миллисекунд
2016.12.27 22:24:48.658 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 172 миллисекунд
2016.12.27 22:25:03.367 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 173 миллисекунд
2016.12.27 22:25:10.051 test03 EURUSD,M1: Новый бар на EURUSD M1
2016.12.27 22:25:10.051 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 183 миллисекунд
2016.12.27 22:25:17.232 test03 EURUSD,M1: Новый бар на USDJPY M1
2016.12.27 22:25:17.232 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 191 миллисекунд
2016.12.27 22:25:19.668 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 162 миллисекунд
2016.12.27 22:25:19.788 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 130 миллисекунд
2016.12.27 22:25:23.064 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 160 миллисекунд
2016.12.27 22:25:25.579 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 132 миллисекунд
2016.12.27 22:25:57.800 test03 EURUSD,M1: Новый бар на GBPUSD M1
2016.12.27 22:25:57.800 test03 EURUSD,M1: Новый бар на USDCHF M1
2016.12.27 22:25:57.800 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 154 миллисекунд
2016.12.27 22:25:58.510 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 129 миллисекунд
2016.12.27 22:25:58.610 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 176 миллисекунд
2016.12.27 22:25:58.850 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 173 миллисекунд
2016.12.27 22:25:58.892 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 136 миллисекунд
2016.12.27 22:25:59.043 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 138 миллисекунд
2016.12.27 22:26:00.252 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 147 миллисекунд
2016.12.27 22:26:19.801 test03 EURUSD,M1: Новый бар на EURUSD M1
2016.12.27 22:26:19.801 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 156 миллисекунд
2016.12.27 22:26:26.219 test03 EURUSD,M1: Новый бар на GBPUSD M1
2016.12.27 22:26:26.219 test03 EURUSD,M1: Новый бар на USDCHF M1
2016.12.27 22:26:26.219 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 170 миллисекунд
2016.12.27 22:26:35.065 test03 EURUSD,M1: Новый бар на USDJPY M1
2016.12.27 22:26:35.065 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 204 миллисекунд
2016.12.27 22:26:41.118 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 135 миллисекунд
2016.12.27 22:26:49.655 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 239 миллисекунд
2016.12.27 22:26:49.745 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 129 миллисекунд
2016.12.27 22:26:56.357 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 133 миллисекунд
2016.12.27 22:26:56.467 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 132 миллисекунд
2016.12.27 22:27:01.395 test03 EURUSD,M1: Новый бар на EURUSD M1
2016.12.27 22:27:01.395 test03 EURUSD,M1: Новый бар на USDCHF M1
2016.12.27 22:27:01.395 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 148 миллисекунд
2016.12.27 22:27:02.204 test03 EURUSD,M1: Новый бар на USDJPY M1
2016.12.27 22:27:02.204 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 148 миллисекунд
2016.12.27 22:27:02.304 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 129 миллисекунд
2016.12.27 22:27:02.464 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 132 миллисекунд
2016.12.27 22:27:03.143 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 134 миллисекунд
2016.12.27 22:28:33.018 test03 EURUSD,M1: Новый бар на EURUSD M1
2016.12.27 22:28:33.018 test03 EURUSD,M1: Новый бар на GBPUSD M1
2016.12.27 22:28:33.018 test03 EURUSD,M1: Новый бар на USDJPY M1
2016.12.27 22:28:33.018 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 174 миллисекунд
2016.12.27 22:28:33.308 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 133 миллисекунд
2016.12.27 22:28:33.509 test03 EURUSD,M1: Новый бар на USDCHF M1
2016.12.27 22:28:33.509 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 154 миллисекунд
2016.12.27 22:28:44.137 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 132 миллисекунд
2016.12.27 22:28:45.088 test03 EURUSD,M1: uninit reason 1
2016.12.27 22:28:45.158 Expert test03 EURUSD,M1: removed