trader781: Thank you, I'm not familiar with this record, but I will look into it, I need to modify mine to do this
P entry is quite simple, written CNevBar class with one new_bar method. The new_bar method creates a new bar event, at a given character and period. If new bar event occurs, then new_bar method returns true otherwise false.
} //+------------------------------------------------------------------+ //| 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
trader781: I just don't understand why classes need to be dragged in here
classes are more convenient to program, if you only use on the current symbol and period, you don't need a class, you can get by with a user-defined function
I would like to calculate the square root of the value of minutes of the period ( timeframe ), in which the chart is placed, for later use in calculations.
I've found Period(), but how to do mathematical operation with it?
I would like to calculate the square root of the value of minutes of the period ( timeframe ), in which the chart is placed, for later use in calculations.
I've found Period(), but how to do mathematical operation with it?
trader781: I just don't understand why we need to drag classes in here ie roughly speakingOnTick will check every tick and gobble up resources, for example, 60-90 pairs as before?
What the hell are the resources, here's a verification code for processing 49 characters in my terminal that basically takes less than 200 milliseconds.
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," миллисекунд"); } //+------------------------------------------------------------------+
Result
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
You could do this...
...
Thank you, I'm not familiar with it, but I'll look into it, I'll have to convert mine to it.
You can fit it into 3 lines, you don't have to write a code as long as a tin for such a simple design.
void OnTick()
{
if(BBars!=Bars)
{BBars=Bars;
// код....
}
}
Thank you, I'm not familiar with this record, but I will look into it, I need to modify mine to do this
P entry is quite simple, written CNevBar class with one new_bar method. The new_bar method creates a new bar event, at a given character and period. If new bar event occurs, then new_bar method returns true otherwise 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);
}
Next comes the class declaration
next is using a method of the class in your code
Here is an example of using this class on different symbols and periods
//| 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");
}
//+------------------------------------------------------------------+
The result of working of this class
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
You can fit it into 3 lines. You don't have to write a code as long as a footlocker for such a simple design.
void OnTick()
{
if(BBars!=Bars)
{BBars=Bars;
// код....
}
}
I just don't understand why classes need to be dragged in here
classes are more convenient to program, if you only use on the current symbol and period, you don't need a class, you can get by with a user-defined function
//| 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);
}
//+------------------------------------------------------------------+
it is easier to program with classes
Hello.
I would like to calculate the square root of the value of minutes of the period ( timeframe ), in which the chart is placed, for later use in calculations.
I've found Period(), but how to do mathematical operation with it?
Please give me a tip.
Hello.
I would like to calculate the square root of the value of minutes of the period ( timeframe ), in which the chart is placed, for later use in calculations.
I've found Period(), but how to do mathematical operation with it?
Please give me a tip.
I just don't understand why we need to drag classes in here
ie roughly speakingOnTick will check every tick and gobble up resources, for example, 60-90 pairs as before?
What the hell are the resources, here's a verification code for processing 49 characters in my terminal that basically takes less than 200 milliseconds.
//| 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," миллисекунд");
}
//+------------------------------------------------------------------+
Result
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