Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 220

 
Привет! Мужики, выручайте! Ни как не могу придумать функцию. Советник открывает одну позицию в день (в промежуток с 00:00 до 23:59), то есть один день-один ордер. Задача такая --> найти серию непрерывных убытков и вывести ее в лог (через команду Print(), вывести один раз). Кол-во элементов в серии вводится с клавиатуры (Например, если с клавы введено значение 5, а серия из 4х убыточных дней, то мы ее игнорируем --> ждем появление 5 и более дней). Серией считается, если убыточные дни идут подряд или ордера закрыты в один день (открываются один раз в день, а уже рыночные могут "висеть" более одного дня). В лог должно выводится (например) " убыточная серия в эти дни: 01.05, 02.05, 03.05, 04.05, 05.05 ". Важное условие: распознавать серию ( и соответсвенно выводить ее в лог), которая больше или равна значению, введенному с клавы (extern). 
//
Лично у меня идея сложена так:
1. Фия заполняет массив Убыточных ордеров значениями их закрытия ( Mass[i] = OrderCloseTime();). То есть в массиве хранятся только даты-время закрытия убыточных ордеров 
2. Начинаем сравнивать элемент на позиции i и на позиции i-1 (2 соседних)
2.1 сравниваем их путем преобразования данных ячейки в номер дня года ( TimeDayOfYear(Mass[i]) и TimeDayOfYear(Mass[i-1])
2.2 такое сравнение позволяет узнать, идут ли убыточные дни друг за другом (Допустим первый убыточный день = 178, а предыдущий = 176 --> серии нет, т.к дни идут неподряд, соответственно если первый = 178, а второй 177 --> серия есть)
2.3 Через цикл for перебираем все ячейки  массива и сравниваем соседние. Если есть серия убытков на соседних элементах массива --> начинаем гнать пока 1.НЕ дойдем до минимально необходимого  кол-ва  убыточных дней, чтобы считать это серией. 2. (если выполнен пункт 1)  ПОКА серия не прекратиться. 
2.4 СЕРИЯ ПРЕКРАЩАЕТСЯ --> запоминаем индекс элемента массива, на котором она закончилась, и запоминаем кол-во элементов в серии (серия может быть == ИЛИ больше значения, введенного с клавы)
3. ---вот здесь начинается проблема реализации---
3.1 Нужно через for как-то "отшагать" обратно по серии убыточных дней, при этом узнавая у каждого элемента его дату, переводить эту дату из datetime --> string, 
3.11 на основе этого заполнить строку ( Не знаю, может как-нибудь через StringAdd()?), и вывести ее в ЛОГ-файл (не миллион раз, а всего-лишь один)

Алгоритм советника не играет роли, важна сама пользовательская функция 

Христа ради, помогите!))
Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Переменные должны быть объявлены перед их использованием. Для идентификации переменных используются уникальные имена. Описания переменных используются для их определения и объявления типов. Описание не является оператором. Индексом массива может быть только целое число. Допускаются не более чем четырехмерные массивы. Нумерация элементов массива...
Файлы:
 
Здравствуйте. Подписался на сигнал. Но через несколько дней показатель процента общего прироста с нескольких сотен стал всего 58%. Проценты по предыдущим месяцам потеряли синий цвет и стали серыми. Почему так происходит? В чем может быть причина?
Файлы:
 
Maestro8:
Здравствуйте. Подписался на сигнал. Но через несколько дней показатель процента общего прироста с нескольких сотен стал всего 58%. Проценты по предыдущим месяцам потеряли синий цвет и стали серыми. Почему так происходит? В чем может быть причина?

Вы подписались на очередного разводчика депозитов. Видите вертикальную линию на графике слева 76-ой сделки? Эта линия показывает момент подключения к мониторингу. До подключения к мониторингу этот счет был "выведен" из нескольких десятков других, которые не имеют такой красивой картинки (они благополучно слиты). Депозит с красивыми показателями подключается к мониторингу и получает деньги от новичков, которым нравятся красивые картинки. Так что не верьте показателям, которые были получены до подключения к мониторингу.

 

Копия экземпляра класса.

Если я делаю такое присвоение:

Cl1 = Cl2;

то при последующем изменении Cl1, изменяется и Cl2.

То есть, очевидно, присваивается просто ссылка.

А мне требуется сохранить экземпляр класса, который бы хранил все свойства преданные ему в момент присваивания.

Как это сделать?

 
Evgeny Potapov:

Копия экземпляра класса.

Если я делаю такое присвоение:

то при последующем изменении Cl1, изменяется и Cl2.

То есть, очевидно, присваивается просто ссылка.

А мне требуется сохранить экземпляр класса, который бы хранил все свойства преданные ему в момент присваивания.

Как это сделать?

Ты, наверное, это делаешь:

CClass* cl1=new CClass;
CClass* cl2=cl1;

, а тебе нужно это

CClass cl1;
CClass* _cl1=new CClass;
CClass cl2=cl1;
CClass _cl2=_cl1;
CClass* cl3=new CClass(cl1);
CClass* cl4=new CClass(_cl1);

Конструктор копирования тебе нужен:

class CClass{
public:
   CClass(){}
   CClass(CClass &mOther){this=mOther;}
};
 
Vladimir Simakov:

Конструктор копирования тебе нужен:

Спасибо!

Попробую, но не понятно ка это работает.

Если он передаёт копии ссылку на копируемый класс, то какая разница?

Опять оба будут ссылаться друг на друга?

 
Evgeny Potapov:

Спасибо!

Попробую, но не понятно ка это работает.

Если он передаёт копии ссылку на копируемый класс, то какая разница?

Опять оба будут ссылаться друг на друга?

Не будут. Это новый объект. А в конструкторе ты просто заполняешь поля. Там свои тонкости тоже есть, так, что - грызи) В местной справке об этом ничего (хотя может и ошибаюсь), так, что читай, как в с++ это все делается и поправки на местные реалии делай. Удачи)

 
Vladimir Simakov:

Не будут. Это новый объект. А в конструкторе ты просто заполняешь поля. Там свои тонкости тоже есть, так, что - грызи) В местной справке об этом ничего (хотя может и ошибаюсь), так, что читай, как в с++ это все делается и поправки на местные реалии делай. Удачи)

Да, так работает.

Спасибо!

Интересно было бы узнать у авторов, как это работает:

{this=mOther;}

Почему происходит передача по значению, когда можно было ожидать передачу ссылки?

К счастью, такой конструктор копирования возможен!

 

Добрый день!

Подскажите, пожалуйста, почему у меня МТ4 от точки входа в позицию, я не могу мышкой установить тейк и стоп лосс?

Возможно нужно что то настроить, но я не понимаю что, помогите плиз

 
from_Reva:

Добрый день!

Подскажите, пожалуйста, почему у меня МТ4 от точки входа в позицию, я не могу мышкой установить тейк и стоп лосс?

Возможно нужно что то настроить, но я не понимаю что, помогите плиз

Попробуйте зажать на клавиатуре "Alt" и перетянуть