Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1335

 
 как могу реялного счета открит
 
Artyom Trishkin:

Не должно быть никакой разницы. Просто для меня так приятнее код выглядит - меньше загружен скобками и отступами.

Для одной проверки (if) да, но в коде две, а если их много, то логика Если Да, континью и новая итерация цикла, Иначе действие     А логика  Если Нет тогда действие иначе переход к следующему условию Если нет. В этом случае тело цикла пройдет до конца. 

 
Valeriy Yastremskiy:

Для одной проверки (if) да, но в коде две, а если их много, то логика Если Да, континью и новая итерация цикла, Иначе действие     А логика  Если Нет тогда действие иначе переход к следующему условию Если нет. В этом случае тело цикла пройдет до конца. 

Ничё не понял, но пусть так.

 
Artyom Trishkin:

Будут. Я использую потому, что так хочу :) Это явно указывает методы какого именно класса используются.

Если у вас есть два класса - один родительский, а второй соответственно - наследник, и в них определены два метода с одинаковыми именами, но они не являются виртуальными по некоторым соображениям, то тут придётся явно указывать какой метод нужно использовать.

Допустим родительский класс - это CParent, а наследуемый класс - это класс CInherited, и они оба имеют метод Method().

В этом случае, если мы в родительском классе CParent вызываем метод Method(), то однозначно будет вызван метод класса CParent - здесь this не обязателен. Можно вызывать метод как с ним, так и без него.

Если мы в наследуемом классе CInherited вызовем метод Method(), то будет вызван тоже метод этого класса, так как сначала ищется метод, принадлежащий тому классу, из которого был его вызов.

Если мы в наследуемом классе CInherited вызовем этот метод таким образом CParent::Method(), то будет вызван уже метод родительского класса, так как тут мы явно оператором разрешения контекста указали метод, принадлежащий родительскому классу.

Но всё же я бы вызывал метод Method() в наследуемом классе CInherited с указанием this - чтобы быть точно уверенным, что будет вызван метод именно этого (this == "этот") наследуемого класса.

Есть и другие объяснения использования this. Может кто более опытный в ООП расскажет.

Артем, большое спасибо за столь развернутый ответ, который меняет в лучшую сторону отношение к ООП)

 
Ахад Ахмедрв:
 как могу реялного счета открит

1. Выбрать брокера.
2. Выбрать платформу, МТ4 или МТ5.
3. Открыть у брокера реальный счёт.

 
Artyom Trishkin:

Ну да. Я один из этих "некоторых", особенно, когда из класса вызываю стандартную функцию, то обязательно указываю глобальный контекст. Просто из-за того, что могу вздумать в этом классе прописать метод с таким же именем, как у стандартной функции - чтобы никогда не забыть что он делает. И вот тогда-то и пригодятся :: для вызова стандартной функции, а this - для вызова моего одноимённого метода.

Артём, это уже опровергает вторую часть выражения «надо — не надо». Надо, значит надо. Нет возражений…

 

Здравствуйте

Как вычислить расстояние в пунктах от текущей цены до ближайшего лимитного отложенного ордера. Интересует готовый код.


 
Valeriy Yastremskiy:

Для одной проверки (if) да, но в коде две, а если их много, то логика Если Да, континью и новая итерация цикла, Иначе действие     А логика  Если Нет тогда действие иначе переход к следующему условию Если нет. В этом случае тело цикла пройдет до конца. 

Для меня предпочтительный вариант

int a = 3, b = 7;
for(int i = 0; i < 10; i++)
 {
  if(i == a && b == 7)
   {
    Print(b);
   }
  // если условие if(i == a) НЕ выполнено, следующая итерация………
 }

или такой

int a = 3, b = 7;
for(int i = 0; i < 10; i++)
 {
  if(i == a)
   {
    if(b == 7)
     Print(b);
   }
  // если условие if(i == a) НЕ выполнено, следующая итерация………
 }

Другой вариант

int a = 3, b = 7;
for(int i = 0; i < 10; i++)
 {
  if(i != a)
   continue; // если условие if(i != a) выполнено, следующая итерация………
    if(b == 7)
     Print(b);
 }

И вариант на грани идиотизма

int a = 3, b = 7;
for(int i = 0; i < 10; i++)
 {
  if(i != a)
   continue; // если условие if(i != a) выполнено, следующая итерация………
    if(b != 7)
     continue;
     
  Print(b);
 }

Но это на любителя. Кому что нравится.

На сколько я понимаю, так писали когда в операторе if проверялись ВСЕ условия от начала до конца. Тогда это было оправдано тем, то если первое условие не выполнено, следующие проверять не придётся. Теперь-же все условия после не выполненного не проверяются. И в таких лесенках условий необходимость отпала, осталась только привычка.

 
Alexey Viktorov:

Артём, это уже опровергает вторую часть выражения «надо — не надо». Надо, значит надо. Нет возражений…

С оговоркой: если вздумаю.
 
Здравствуйте! в тестере стратегии показывает качество истории 44%, как это исправить?  Поиск по форуму ничего не дал, так же искал в справке какую то информацию, тоже нет ничего.