Any questions from newcomers on MQL4 and MQL5, help and discussion on algorithms and codes - page 50

You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
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