Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 933

 
Yevhenii Levchenko:
Как установить временной фильтр (по часам) для торговли советника? Подойдет ли следующий вариант:

ВЫ загуглите (ограничение работы советника по времени - например) - там могут быть особенности, например, торги с 22:00 час до 04:00 час. В ф-иях Ким И.В. Тема: Только полезные ф-ии от Кима - посмотрите.

Вот есть вариант:

extern int HourStart=2;
// время начала работы советника в часах по времени терминала - может быть от 0 до 23
extern int HourEnd=22;
// время окончания работы советника в часах по времени терминала
// пример - советник начинает работать в 2 часа 0 минут, заканчивает работу в 22, то есть в 22 часа и после советник не выставляет новых ордеров и ждет рабочего времени - 2 часа
extern bool Use_Time=false;

...

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  { 
   bool time_trade=false;
   if(Use_Time==false) {time_trade=true;}
   if(Use_Time==true && Hour()>=HourStart && Hour()<HourEnd) {time_trade=true;}

...
   
 
Roman Shiredchenko:

ВЫ загуглите - там могут быть особенности, например, торги с 22:00 час до 04:00 час. В ф-иях Ким И.В. Тема: Только полезные ф-ии от Кима - посмотрите.

Вот есть вариант:

Ого какая там тема крутая! Спасибо!


А то что я сделал работать не будет?
 
Yevhenii Levchenko:

Ого какая там тема крутая! Спасибо!


А то что я сделал работать не будет?

Да хз - берите готовое и юзайте, разбирайтесь в правильном. Велосипеды все изобретены, ИМХО.

 
Yevhenii Levchenko:
Как установить временной фильтр (по часам) для торговли советника? Подойдет ли следующий вариант:

не давно это обсуждали, вот топик, мои примеры все рабочие, пользуюсь, все работает в МТ4  https://www.mql5.com/ru/forum/317351


Yevhenii Levchenko:

Какие особенности использования Symbol() и _Symbol ?  Когда лучше использовать тот или иной Symbol ?

Будет ли правильно работать следующий код для проверки наличия ордеров по текущему инструменту:

никаких, Symbol() это старая форма получения имени символа, в последних билдах для совместимости MQL4 - MQL5 добавили _Symbol

если пишете код с нуля, используйте _Symbol, захотите код перенести на MQL5 меньше править придется

 
Igor Makanu:

не давно это обсуждали, вот топик, мои примеры все рабочие, пользуюсь, все работает в МТ4  https://www.mql5.com/ru/forum/317351


никаких, Symbol() это старая форма получения имени символа, в последних билдах для совместимости MQL4 - MQL5 добавили _Symbol

если пишете код с нуля, используйте _Symbol, захотите код перенести на MQL5 меньше править придется

Спасибо!

Код, конечно, намного больше того, что я пытался прописать... :) Нужно будет сидеть разбираться...
 
Igor Makanu:

не давно это обсуждали, вот топик, мои примеры все рабочие, пользуюсь, все работает в МТ4  https://www.mql5.com/ru/forum/317351


никаких, Symbol() это старая форма получения имени символа, в последних билдах для совместимости MQL4 - MQL5 добавили _Symbol

если пишете код с нуля, используйте _Symbol, захотите код перенести на MQL5 меньше править придется

Разница в другом. _Symbol - предопределённая переменная, а Symbol() - функция.

И то, и другое работает и там, и там. Всё абсолютно идентично. Но когда-то давно кто-то из разработчиков (не помню уже кто именно) говорил, что предпочтительней использовать функцию.

 

Forum on trading, automated trading systems and testing trading strategies

What is different between Symbol() and _Symbol

fxsaber, 2019.07.07 14:47

void Func( const string& ) {}

void OnStart()
{
  Func(Symbol()); // ERROR: 'Symbol' - parameter passed as reference, variable expected
  Func(_Symbol);  // OK   
}
 
Artyom Trishkin:

Разница в другом. _Symbol - предопределённая переменная, а Symbol() - функция.

И то, и другое работает и там, и там. Всё абсолютно идентично. Но когда-то давно кто-то из разработчиков (не помню уже кто именно) говорил, что предпочтительней использовать функцию.

по моему, что удобнее то и нужно использовать, пролистал справку, однозначных рекомендаций нет от разработчиков

из практики, в некоторых библиотеках разработчики переопределяют Symbol() в методах класса , я у себя для кастомного ТФ в MQL5 тоже переопределил метод в классе на Symbol() .... как удобно так и юзаю, не вижу правонарушений по книжным аксиомам )))

ЗЫ: по моему это уже религия... то функции iClose() нельзя использовать - "это поделки!" (С)

то вот новое веяние _Symbol хуже Symbol() ...замерил скорость на всякий случай, вообще нет разницы, один в один работают

#property strict
//+------------------------------------------------------------------+
#define   test(count_x10,msg,EX)        {uint mss=GetTickCount(); ulong count=(ulong)pow(10,count_x10);for(ulong i=0;i<count&&!_StopFlag;i++){EX;} \
                                printf("%s: loops=%i ms=%u",msg,count,GetTickCount()-mss);}

//+------------------------------------------------------------------+
void OnStart()
  {
   Print("test 1:"); srand(GetTickCount()); test(9,"_Symbol",string s=_Symbol+IntegerToString(rand()));
   Print("test 2:"); srand(GetTickCount()); test(9,"Symbol()",string s=Symbol()+IntegerToString(rand()));
   Print("test 3:"); srand(GetTickCount()); test(9,"_Symbol",string s=_Symbol+IntegerToString(rand()));
   Print("test 4:"); srand(GetTickCount()); test(9,"Symbol()",string s=Symbol()+IntegerToString(rand()));
   Print("test 5:"); srand(GetTickCount()); test(9,"_Symbol",string s=_Symbol+IntegerToString(rand()));
   Print("test 6:"); srand(GetTickCount()); test(9,"Symbol()",string s=Symbol()+IntegerToString(rand()));
  }
//+------------------------------------------------------------------+

2019.08.09 00:54:20.631 tst EURUSD,H1: Symbol(): loops=1000000000 ms=66203

2019.08.09 00:53:14.432 tst EURUSD,H1: test 6:

2019.08.09 00:53:14.432 tst EURUSD,H1: _Symbol: loops=1000000000 ms=65515

2019.08.09 00:52:08.921 tst EURUSD,H1: test 5:

2019.08.09 00:52:08.921 tst EURUSD,H1: Symbol(): loops=1000000000 ms=65610

2019.08.09 00:51:03.301 tst EURUSD,H1: test 4:

2019.08.09 00:51:03.301 tst EURUSD,H1: _Symbol: loops=1000000000 ms=65890

2019.08.09 00:49:57.418 tst EURUSD,H1: test 3:

2019.08.09 00:49:57.418 tst EURUSD,H1: Symbol(): loops=1000000000 ms=65563

2019.08.09 00:48:51.850 tst EURUSD,H1: test 2:

2019.08.09 00:48:51.850 tst EURUSD,H1: _Symbol: loops=1000000000 ms=65750

2019.08.09 00:47:46.105 tst EURUSD,H1: test 1:

 
Igor Makanu:

по моему, что удобнее то и нужно использовать, пролистал справку, однозначных рекомендаций нет от разработчиков

из практики, в некоторых библиотеках разработчики переопределяют Symbol() в методах класса , я у себя для кастомного ТФ в MQL5 тоже переопределил метод в классе на Symbol() .... как удобно так и юзаю, не вижу правонарушений по книжным аксиомам )))

ЗЫ: по моему это уже религия... то функции iClose() нельзя использовать - "это поделки!" (С)

то вот новое веяние _Symbol хуже Symbol() ...замерил скорость на всякий случай, вообще нет разницы, один в один работают

2019.08.09 00:54:20.631 tst EURUSD,H1: Symbol(): loops=1000000000 ms=66203

2019.08.09 00:53:14.432 tst EURUSD,H1: test 6:

2019.08.09 00:53:14.432 tst EURUSD,H1: _Symbol: loops=1000000000 ms=65515

2019.08.09 00:52:08.921 tst EURUSD,H1: test 5:

2019.08.09 00:52:08.921 tst EURUSD,H1: Symbol(): loops=1000000000 ms=65610

2019.08.09 00:51:03.301 tst EURUSD,H1: test 4:

2019.08.09 00:51:03.301 tst EURUSD,H1: _Symbol: loops=1000000000 ms=65890

2019.08.09 00:49:57.418 tst EURUSD,H1: test 3:

2019.08.09 00:49:57.418 tst EURUSD,H1: Symbol(): loops=1000000000 ms=65563

2019.08.09 00:48:51.850 tst EURUSD,H1: test 2:

2019.08.09 00:48:51.850 tst EURUSD,H1: _Symbol: loops=1000000000 ms=65750

2019.08.09 00:47:46.105 tst EURUSD,H1: test 1:

Как говорится - за что купил, за то и продал. Рекомендация была не в документации, а со слов на форуме.

 
Igor Makanu:

Почему последняя строчка без слеша,и можно ли вернуть из макроса значение

#define FOR3(a,b,c,loop) for(int i=0; i<a; i++) \
for(int j=0; j<b; j++) \
for(int k=0; k<c; k++) \
{loop;} 
Причина обращения: