Для МТ4 .
Может кто знает интересное и изящное решение торговли робота в определенные часы. Например торгуем только в 1 в 5 в 19 , 14 в 16 и с 19 до 22 часов (включительно).
Можно конечно сделать на каждый час переменную bool, но как то не хочется так в лоб.
Нажимать кнопки
на графике - тоже не выход. Вообще кнопки на чарте не нужны.
Высчитывать какие часы активированы если число
равно 312 или там 10986 - не вариант. Часы будут выставляться вручную и не будут оптимизироваться.
if(Hour()==1 || Hour()==5 || Hour()==19 || Hour()==14 || Hour()==16 || (Hour()>18 && Hour()<23 ))
еще раз прочитал ваш вопрос - похоже это не совсем то, что вам надо... :-)
Тогда варик через боол....
Ну да. Это не совсем то, что надо.
Как вариант - перечислить через разделитель нужные часы, а в роботе уже переконвертировать все в числа. Это пока пожалуй более менее
правильное решение, как мне видится.
Все еще жду другие варианты.
вот мой пример https://www.mql5.com/ru/forum/160683/page861#comment_11840254
но у меня как раз была задача с точностью до минут время работы советника получать, можно убрать минуты, да и проще только часы проверять, - где то было, поищу как только с часами делал
ЗЫ: но модератор сказал, что негоже такие простые классы писать, ибо класс это дело великое и класс должен уметь и то, и сё и ... "Я еще и вышивать могу, и на машинке... тоже." (С)
)))
Любой целый тип с числом байтов не меньше трех позволяет однозначно задать любую комбинацию торгов, т.к. всего таких комбинаций 2^24.
Написать скрипт, который создает это число по часам и обратно - из числа выдает часы.
Такое число удобно, т.к. проверка очень дешевая.
ЗЫ
#property strict // Число, однозначно задающее время торговли int GetNumber( const bool &Hours[] ) { int Num = 0; for (int i = ArraySize(Hours) - 1; i >= 0; i--) if (Hours[i]) Num |= 1 << i; return(Num); } // Проверка работы числа для часа bool CheckHour( const int Hour, const int Number ) { return((bool)(Number & (1 << Hour))); } void OnStart() { bool Hours[24]; ZeroMemory(Hours); // Задали, где торгуем. Hours[0] = true; Hours[1] = true; Hours[2] = true; Hours[11] = true; Hours[12] = true; Hours[13] = true; Hours[22] = true; Hours[23] = true; // Показали, где торгуем ArrayPrint(Hours); // Число, однозначно задающее время торговли const int Number = GetNumber(Hours); // Проверка работы числа для каждого часа for (int i = 0; i < 24; i++) Print((string)i + " " + (string)CheckHour(i, Number) + "\n"); }
ЗЫ: но модератор сказал, что негоже такие простые классы писать, ибо класс это дело великое и класс должен уметь и то, и сё и ...
Пример класса (структуры), который, вроде, ничего не делает, но очень удобный
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
fxsaber, 2019.07.06 22:55
struct FILE { const int handle; FILE( const string FileName, const int Flags ) : handle(::FileOpen(FileName, Flags)) {} ~FILE( void ) { if (this.handle != INVALID_HANDLE) ::FileClose(this.handle); } };
Для МТ4 .
Может кто знает интересное и изящное решение торговли робота в определенные часы. Например торгуем только в 1 в 5 в 19 , 14 в 16 и с 19 до 22 часов (включительно).
Можно конечно сделать на каждый час переменную bool, но как то не хочется так в лоб.
Нажимать кнопки
на графике - тоже не выход. Вообще кнопки на чарте не нужны.
Высчитывать какие часы активированы если число
равно 312 или там 10986 - не вариант. Часы будут выставляться вручную и не будут оптимизироваться.
Мне очень понравилось как сделано здесь https://www.mql5.com/ru/articles/2166
- www.mql5.com
Пример класса (структуры), который, вроде, ничего не делает, но очень удобный
постеснялся сразу спросить, но тут спрошу, а что будет если в Вашем примере структуру на класс заменить? - я максимально не использую структуры в MQL , заменяю их на классы - результат тот же, но не ограничений
можно убрать минуты, да и проще только часы проверять, - где то было, поищу как только с часами делал
вот нашел время работы, но только по часам:
input int StartHourSession1 =9; //Время начала торговли input int StopHourSession1 =18; //Время окончания торговли class CSession { private: int StartHour,StopHour; bool Intraday,UseThisSession; public: void CSession(void){}; void ~CSession(void){}; void CSession(int hstart,int hstop) { Intraday=(hstop>hstart) ? true : false; UseThisSession=(hstart<0 || hstop<0 || hstart>23 || hstop>23) ? false : true; StartHour=hstart; StopHour=hstop; if(!UseThisSession) Print("Время работы советника не используется"); }; int CheckSession(int hour) { int result=0; if(UseThisSession) { if(Intraday) if(hour>=StartHour && hour<StopHour) result=1; else result=-1; else if(hour>=StopHour && hour<StartHour) result=-1;else result=1; } return(result); }; } *Session; ..... int OnInit() { Session=new CSession(StartHourSession1,StopHourSession1); } ..... if(Session.CheckSession(Hour())<0) { Comment("Запрет торговли по времени"); return; }
в этом примере у меня учитывается ввод времени в часах не зависимо от StartHour > или <StopHour - т.е. код сам "сообразит", что торговля может быть с 23 ч до 2ч - это одно торговое время, а с 2 до 23 ч - это другое торговое время
ну и как в первом моем примере можно наращивать кол-во временных диапазонов - создаем новый экземпляр класса
что будет если в Вашем примере структуру на класс заменить?
Там не принципиально.
я максимально не использую структуры в MQL , заменяю их на классы - результат тот же, но не ограничений
Для структур свои плюсы, для классов - свои. Какие плюсы нужны, то и выбирается.
Там не принципиально.
Для структур свои плюсы, для классов - свои. Какие плюсы нужны, то и выбирается.
на минусы структур уже попадал, кажется ограничение на вызов конструктора в структуре было
плюсы то какие у структур? - не нашел
ЗЫ: в том же C# структуры/классы используют разную память и struct A = struct B - будет копирование полей , а class A = class B - будет создан новый указатель (причем без копирования, в дальнейшем изменяя B - будем изменять одновременно и А... этим чудесным свойством я и воспользовался когда код панельки на C# делал - удобно, обмен данными делать в разных частях кода и даже в разных процессах каким то чудом все работает - а не должно! ))) )
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Для МТ4 .
Может кто знает интересное и изящное решение торговли робота в определенные часы. Например торгуем только в 1 в 5 в 19 , 14 в 16 и с 19 до 22 часов (включительно).
Можно конечно сделать на каждый час переменную bool, но как то не хочется так в лоб.
Нажимать кнопки на графике - тоже не выход. Вообще кнопки на чарте не нужны.
Высчитывать какие часы активированы если число равно 312 или там 10986 - не вариант. Часы будут выставляться вручную и не будут оптимизироваться.