Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1145
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я вам уже отвечал:
Вы берёте последний в списке ордер:
А вам нужно сначала узнать на сколько изменилось состояние в списке ордеров. Было 12, стало 8 - изменилось на 4 ордера. Соответственно - вам нужно все четыре ордера распечатать. А вы всегда распечатываете только самый последний в списке.
Как узнать на сколько изменилось? Нужно при запуске советника записать количество ордеров в переменную, например int last_total. Затем на каждом тике сравнивать OrdersTotal() с last_total. Если они НЕ равны - произошло изменение. Записать разницу между OrdersTotal() и last_total в переменную, например num_changes и сохранить в last_total новое состояние OrdersTotal().
Тут могут быть нюансы, например, при срабатывании отложенных ордеров. Но пока вам бы сделать то, что нужно для начала.
Зная количество пропавших ордеров, вы можете их посмотреть в истории. Впрочем, можно ограничиться только контролем ордеров в историческом списке - сделать всё вышеописанное не для списка рыночных, а для списка исторических ордеров. Разница между тем, что было, и тем что стало - это и есть то количество ордеров, которые нужно проанализировать. Вы же всегда анализируете только самый последний в списке.
При этом никто не гарантирует, что последний в историческом списке ордер будет последним закрытым. Это тоже нюансы, которые нужно учитывать. Но потом.
Спасибо большое. Так намного понятнее. Ключевые слова - нужно распечатывать не один а сразу 4 ордера. Если бы Вы мне их сказали в первом посте я бы Вас не "мучил".
Спасибо большое. Так намного понятнее. Ключевые слова - нужно распечатывать не один а сразу 4 ордера. Если бы Вы мне их сказали в первом посте я бы Вас не "мучил".
Не за что. Пока вы не научитесь для себя составлять логику того или иного действия, вы так и не сдвинетесь с мёртвой точки - будете спрашивать на форуме. А логику составить проще некуда - она составляется простыми словами. При этом не обязательно привязываться к ордерам/спискам/тикетам и проч..
Думаю, что на яблоках вы бы легко составили алгоритм отслеживания их количества - тут всё как в жизни: запомнил сколько яблок лежит на столе, ушёл курить, пришёл - яблок стало меньше...
Как вы про это узнали? Легко - было 5, стало 3. Два пропали. Кот наверное... Или было 5, стало 6. Одно появилось. От сырости наверное... В любом из случаев вы в уме посчитали разницу.
Так а чем такие же действия отличаются от подсчёта ордеров? Те же яблоки... Вместо "в уме" пишите "в функции"
подскажите пожалуйста как вынести функцию из кода (декомпозиция), если получилось уже больше 200 строк кода и неудобно все это листать. Интересует "механика": как "выносится" функция, куда записывается, чтоб потом вызывать ее в основном коде.
Если есть пример с описанием - буду признателен за ссылкуподскажите пожалуйста как вынести функцию из кода (декомпозиция), если получилось уже больше 200 строк кода и неудобно все это листать. Интересует "механика": как "выносится" функция, куда записывается, чтоб потом вызывать ее в основном коде.
Если есть пример с описанием - буду признателен за ссылкуБыло:
double a = (b + c) / (d - e);
Стало:
Не за что. Пока вы не научитесь для себя составлять логику того или иного действия, вы так и не сдвинетесь с мёртвой точки - будете спрашивать на форуме. А логику составить проще некуда - она составляется простыми словами. При этом не обязательно привязываться к ордерам/спискам/тикетам и проч..
Думаю, что на яблоках вы бы легко составили алгоритм отслеживания их количества - тут всё как в жизни: запомнил сколько яблок лежит на столе, ушёл курить, пришёл - яблок стало меньше...
Как вы про это узнали? Легко - было 5, стало 3. Два пропали. Кот наверное... Или было 5, стало 6. Одно появилось. От сырости наверное... В любом из случаев вы в уме посчитали разницу.
Так а чем такие же действия отличаются от подсчёта ордеров? Те же яблоки... Вместо "в уме" пишите "в функции"
Понял.Спасибо за пояснение. Давно так же в голове крутиться такой вопрос.... В моем коде предполагается что в журнале будет часто печататься функция Print(). Автоматически в журнале печатается каждый открытый ордер и каждое закрытие каждого ордера. У меня ордеров много. Соответственно будет много и записей об ордерах. Эти записи часто мешают мне воспринимать данные из функций Print(), которых так же может быть много.
ВОПРОС
Как сделать так, что бы, когда мне нужно, информация об открытых и закрытых ордерах в журнал не выводилась, но выводилась только функция Print()
Это можно сделать при помощи какой то функции языка MQL4 , или для этого нужно вносить изменения в код терминала МТ4 ?
Спасибо.Понял.Спасибо за пояснение. Давно так же в голове крутиться такой вопрос.... В моем коде предполагается что в журнале будет часто печататься функция Print(). Автоматически в журнале печатается каждый открытый ордер и каждое закрытие каждого ордера. У меня ордеров много. Соответственно будет много и записей об ордерах. Эти записи часто мешают мне воспринимать данные из функций Print(), которых так же может быть много.
ВОПРОС
Как сделать так, что бы, когда мне нужно, информация об открытых и закрытых ордерах в журнал не выводилась, но выводилась только функция Print()
Это можно сделать при помощи какой то функции языка MQL4 , или для этого нужно вносить изменения в код терминала МТ4 ?
Спасибо.Если Вы делаете исследование то писать лучше в файл. Запрет отображения действий с ордерами в журнале не знаю как делать и думаю его нет, это уровень записей начала и конца работы советника. Это записи логфайла. В файле будет только то что вы хотите, в журнале кроме ваших записей будут и терминальные. Внести изменение можно в терминал, можно написать даже свой))) только сколько это будет стоить???
подскажите пожалуйста как вынести функцию из кода (декомпозиция), если получилось уже больше 200 строк кода и неудобно все это листать. Интересует "механика": как "выносится" функция, куда записывается, чтоб потом вызывать ее в основном коде.
Если есть пример с описанием - буду признателен за ссылкуhttps://www.mql5.com/ru/docs/runtime/imports
https://www.mql5.com/ru/docs/basis/preprosessor/include
а дальше по ссылкам... в общих чертах: все "лишнее" в библиотеку *.mqh, в начале основного кода подключаете. компилятор сам "склеит"
но вообще, 200 строк - это не много - используя кнопки можно и в более тысячи строк спокойно себя чувствовать.
Если Вы делаете исследование то писать лучше в файл. Запрет отображения действий с ордерами в журнале не знаю как делать и думаю его нет, это уровень записей начала и конца работы советника. Это записи логфайла. В файле будет только то что вы хотите, в журнале кроме ваших записей будут и терминальные. Внести изменение можно в терминал, можно написать даже свой))) только сколько это будет стоить???
Спасибо за подсказку. Но , как мне кажется, я ни разу не писал советника в файл. Я всегда писал советника в редакторе Метаэдитор 4. Что бы посмотреть что вывела функция Рrint() за весь период тестирования я выбираю вкладку Журнал - Открыть . И открывается в блокноте файл с тем же содержанием , что и во вкладке Журнал. Как мне кажется это лог файл.
Но убрать все открытые ордера и их закрытие из этого блокнотовского файла , как мне кажется у меня нет возможности. А точнее есть. Но это очень нудная и трудоемкая работа.
Буду Вам очень признателен если откроете мне секрет как сделать так что бы мой код ордера открывал и закрывал, но в файле информации об открытии и закрытии всех ордеров не было, а были только записи функции Рrint().
Спасибо за помощь.
А Вы не знаете где можно почитать по подробнее о последних обновлениях MQL4 А то информации везде очень много, а нужной найти очень сложно.
https://www.mql5.com/ru/forum/160683/page1109#comment_15711102
Спасибо за подсказку. Но , как мне кажется, я ни разу не писал советника в файл. Я всегда писал советника в редакторе Метаэдитор 4. Что бы посмотреть что вывела функция Рrint() за весь период тестирования я выбираю вкладку Журнал - Открыть . И открывается в блокноте файл с тем же содержанием , что и во вкладке Журнал. Как мне кажется это лог файл.
Но убрать все открытые ордера и их закрытие из этого блокнотовского файла , как мне кажется у меня нет возможности. А точнее есть. Но это очень нудная и трудоемкая работа.
Буду Вам очень признателен если откроете мне секрет как сделать так что бы мой код ордера открывал и закрывал, но в файле информации об открытии и закрытии всех ордеров не было, а были только записи функции Рrint().
Спасибо за помощь.
делаю так, в тестере файл будет в папке \tester\files, если на окно кинуть то в папке \MQL4\Files . И у Ковалева это есть подробно.