Sergey Gritsay: Первый раз о таком слышу, интересно чего в них такого страшного, я ими редко тоже пользуюсь, но для определенных задач они подходят лучше.
Дело в том, что static-переменную можно использовать только в случае, если NevDay() в течение всего периода работы эксперта вызывается для одного и того же символа и таймфрейма. Если символа 2 и более, то NevDay() будет возвращать некорректные значения. У меня эксперт спроектирован мультивалютным ... :(
MikeZv: Дело в том, что static-переменную можно использовать только в случае, если NevDay() в течение всего периода работы эксперта вызывается для одного и того же символа и таймфрейма. Если символа 2 и более, то NevDay() будет возвращать некорректные значения. У меня эксперт спроектирован мультивалютным ... :(
Если нужно для мультивалютного режима то тогда вот такой пример, работает как в МТ4 так и в МТ5
MikeZv: Дело в том, что static-переменную можно использовать только в случае, если NevDay() в течение всего периода работы эксперта вызывается для одного и того же символа и таймфрейма. Если символа 2 и более, то NevDay() будет возвращать некорректные значения. У меня эксперт спроектирован мультивалютным ... :(
Вот еще один вариант с использованием класса
//+------------------------------------------------------------------+//| тест.mq4 |//| Copyright 2016, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2016, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+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 *eurusd_H1; // объявим экземпляр класса для симмвола EURUSD
CNevBar *eurusd_M15; // объявим экземпляр класса для симмвола EURUSD
CNevBar *audusd_M30; // объявим экземпляр класса для симмвола AUDUSD
CNevBar *audusd_M5; // объявим экземпляр класса для симмвола AUDUSD//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//---
eurusd_H1=new CNevBar();// создадим экземпляр класса для симмвола EURUSD
audusd_M30=new CNevBar();// создадим экземпляр класса для симмвола AUDUSD
eurusd_M15=new CNevBar();// создадим экземпляр класса для симмвола EURUSD
audusd_M5=new CNevBar();// создадим экземпляр класса для симмвола AUDUSD//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---delete eurusd_H1;// удалим экземпляр класса для симмвола EURUSDdelete audusd_M30;// удалим экземпляр класса для симмвола AUDUSDdelete eurusd_M15;// удалим экземпляр класса для симмвола EURUSDdelete audusd_M5;// удалим экземпляр класса для симмвола AUDUSD
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
if(eurusd_H1.new_bar("EURUSD",PERIOD_H1))
{
Alert("EURUSD"," Новый бар на Н1");
}
if(eurusd_M15.new_bar("EURUSD",PERIOD_M15))
{
Alert("EURUSD"," Новый бар на M15");
}
if(audusd_M30.new_bar("AUDUSD",PERIOD_M30))
{
Alert("AUDUSD"," Новый бар на M30");
}
if(audusd_M5.new_bar("AUDUSD",PERIOD_M5))
{
Alert("AUDUSD"," Новый бар на M5");
}
//---
}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+
Результат теста
2016.02.2021:09:432015.01.1000:00 тест3 test started
2016.02.2021:09:452015.01.1200:00 тест3 EURUSD,M1: Alert: EURUSD Новый бар на M15
2016.02.2021:09:472015.01.1200:00 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M30
2016.02.2021:09:502015.01.1200:00 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:09:532015.01.1200:05 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:09:592015.01.1200:10 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:042015.01.1200:15 тест3 EURUSD,M1: Alert: EURUSD Новый бар на M15
2016.02.2021:10:042015.01.1200:15 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:102015.01.1200:20 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:132015.01.1200:25 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:162015.01.1200:30 тест3 EURUSD,M1: Alert: EURUSD Новый бар на M15
2016.02.2021:10:162015.01.1200:30 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M30
2016.02.2021:10:162015.01.1200:30 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:232015.01.1200:35 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:262015.01.1200:40 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:292015.01.1200:45 тест3 EURUSD,M1: Alert: EURUSD Новый бар на M15
2016.02.2021:10:292015.01.1200:45 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:342015.01.1200:50 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:362015.01.1200:55 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:392015.01.1201:00 тест3 EURUSD,M1: Alert: EURUSD Новый бар на Н12016.02.2021:10:392015.01.1201:00 тест3 EURUSD,M1: Alert: EURUSD Новый бар на M15
2016.02.2021:10:392015.01.1201:00 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M30
2016.02.2021:10:392015.01.1201:00 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:462015.01.1201:05 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:502015.01.1201:10 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:552015.01.1201:15 тест3 EURUSD,M1: Alert: EURUSD Новый бар на M15
2016.02.2021:10:552015.01.1201:15 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:572015.01.1201:17 Tester: stop button pressed
Спасибо большое, Сергей ! Если я правильно понял: в первом случае создается массив static-переменных, каждая для своего символа с фиксированным таймфреймом, т.е. другой таймфрейм для этого символа использовать нельзя; во втором - класс для каждого сочетания символ+таймфрейм.
MikeZv: Спасибо большое, Сергей ! Если я правильно понял: в первом случае создается массив static-переменных, каждая для своего символа с фиксированным таймфреймом, т.е. другой таймфрейм для этого символа использовать нельзя; во втором - класс для каждого сочетания символ+таймфрейм.
Да верно, но если немного подумать то можно в варианте с массивом заменить одномерный массив на двухмерный.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Ответ на первый вопрос, функция определяет новый бар.
Большое спасибо, Сергей, я документацию пролистал, но вот iTime() как-то пропустил ... :
А зачем в OnInit() вызывать NevBar() ?
Первый вызов функции, иначе будет срабатывание сразу. Доработал чтобы в OnInit() не вызывать
Первый вызов функции, иначе будет срабатывание сразу. Доработал чтобы в OnInit() не вызывать
Спасибо, Сергей ! На форуме меня пугали сильно-сильно: " Не используй статические переменные ! " :)
Спасибо, Сергей ! На форуме меня пугали сильно-сильно: " Не используй статические переменные ! " :)
Первый раз о таком слышу, интересно чего в них такого страшного, я ими редко тоже пользуюсь, но для определенных задач они подходят лучше.
Дело в том, что static-переменную можно использовать только в случае, если NevDay() в течение всего периода работы эксперта вызывается для одного и того же символа и таймфрейма. Если символа 2 и более, то NevDay() будет возвращать некорректные значения. У меня эксперт спроектирован мультивалютным ... :(
Если нужно для мультивалютного режима то тогда вот такой пример, работает как в МТ4 так и в МТ5
Дело в том, что static-переменную можно использовать только в случае, если NevDay() в течение всего периода работы эксперта вызывается для одного и того же символа и таймфрейма. Если символа 2 и более, то NevDay() будет возвращать некорректные значения. У меня эксперт спроектирован мультивалютным ... :(
Вот еще один вариант с использованием класса
Результат теста
Вот еще один вариант с использованием класса
Результат теста
в первом случае создается массив static-переменных, каждая для своего символа с фиксированным таймфреймом, т.е. другой таймфрейм для этого символа использовать нельзя;
во втором - класс для каждого сочетания символ+таймфрейм.
Спасибо большое, Сергей ! Если я правильно понял:
в первом случае создается массив static-переменных, каждая для своего символа с фиксированным таймфреймом, т.е. другой таймфрейм для этого символа использовать нельзя;
во втором - класс для каждого сочетания символ+таймфрейм.