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

 
psyman:

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

Пока придумал только запускать предварительно скрипт, создающий ГП и копировать тикет оттуда.

Можно ли подать значение тикета на вход совы в качестве input int или хотя бы в качестве enum перечислений тикетов всех позиций данного символа?

Щелчок по значку открытой позиции/установленного ордера выбирает его в качестве цели трала. Щелчки+Ctrl выбирают множество позиций/ордеров для трала. Нужно лишь вписать реакцию на события клика по объектам. Ну и разрешить выставлять значки позиций/ордеров.

 
Artyom Trishkin:

:)

А если вы советник запустите в 9.22 ?

А если сбой системы или терминала? Цена-то потеряется запомненная.

Т.е., нужно искать то, что было 20 минут назад тогда, когда наступает время этой проверки. Наступило время, в котором минуты больше или равны кратно двадцати - проверили состояние RSI на баре, который был 20 минут назад. Если там есть нужное пересечение, то дальше действуем по плану...

Правда, на тф М15 точное время пересечения и точную цену вы не определите, но можно поглядеть цену на М1 - по крайней мере точнее в 15 раз.

а нельзя сделать к примеру блокнот который будет фиксировать точное время пересечения и цену?))
есть ведь такие советники,которые записывают разную информацию в блокнот

 
Alexey Viktorov:

Чаще используется GV от GlobalVariable*** тогда я и не задавал-бы вопрос. В вопросе нет однозначности. Позиций много, но тралить нужно одну... Тралит тот-же советник который ставил позиции? В этом случае странно звучит вопрос. Если-же позиции ставятся руками или другим советником, то во время запуска советника вставить в input тикет и все дела... Ну и если надо чтобы советник тралил случайное количество позиций и список можно было менять на ходу... Фриланс в помощь.


Вы правильно понимаете и даже пишите что нужно делать, но не говорите как :-)

Позиции открываются руками, сова их различить может только по тикету. Вставить тикет руками через копирование в буфер я могу, но лучше этого не делать, а предложить выбрать из списка. Можно ли так сделать?

 
Artyom Trishkin:

Вопрос: вы говорите о среде разработки IntelliJ IDEA ?

да, я говорою об IntelliJ IDEA

 
secret:

Похоже, вся жизнь здесь, в отдельные ветки никто не заглядывает.

Посмотрите мой вопрос, плиз: можно ли изобрести аналог CopyBuffer() для МТ4?

https://www.mql5.com/ru/forum/302404

можно, но тогда нужно дописывать и код индикатора, который должен будет выдавать свой буфер

 
psyman:

Вы правильно понимаете и даже пишите что нужно делать, но не говорите как :-)

Позиции открываются руками, сова их различить может только по тикету. Вставить тикет руками через копирование в буфер я могу, но лучше этого не делать, а предложить выбрать из списка. Можно ли так сделать?

Все можно. Например вывести панель с позициями, и в ней выбирать за какими отслеживать. Но это скорее уже как вам сказали выше в Фриланс.

 
Artyom Trishkin:

Щелчок по значку открытой позиции/установленного ордера выбирает его в качестве цели трала. Щелчки+Ctrl выбирают множество позиций/ордеров для трала. Нужно лишь вписать реакцию на события клика по объектам. Ну и разрешить выставлять значки позиций/ордеров.


То есть это соответствует выполнению PositionSelect?

 
psyman:


То есть это соответствует выполнению PositionSelect?

Нет, не соответствует. Это было предложение как можно сделать.

 
Artyom Trishkin:

Щелчок по значку открытой позиции/установленного ордера выбирает его в качестве цели трала. Щелчки+Ctrl выбирают множество позиций/ордеров для трала. Нужно лишь вписать реакцию на события клика по объектам. Ну и разрешить выставлять значки позиций/ордеров.

Вы наверное имели в виду трал встроенный в терминал? Он не умеет делать частичное закрытие, что я и хочу сделать, потому и получается такой огород.


=Нужно лишь вписать реакцию на события клика по объектам.

А как можно обрабатывать события за пределами графического окна?

Из того что в справке написано ни один тип события не подходит.

 
psyman:

Вы наверное имели в виду трал встроенный в терминал? Он не умеет делать частичное закрытие, что я и хочу сделать, потому и получается такой огород.


=Нужно лишь вписать реакцию на события клика по объектам.

А как можно обрабатывать события за пределами графического окна?

Из того что в справке написано ни один тип события не подходит.

Я так понял, вам нужно советнику как-то указать тикет позиции, открытой вручную, которую нужно чтобы он тралил.

  1. Добавляете в советник отслеживание вновь открытых позиций и, если она не имеет магика, значит она открыта вручную. Советник при этом должен выставить значок открытия этой позиции на цене и баре её открытия. В имени объекта обязательно должен присутствовать префикс с общим названием объекта для всех таких объектов, например - "manual_", и обязательно должен присутствовать тикет позиции. В итоге имя создаваемого объекта может быть таким: "manual_12345678". Здесь: manual_ - префикс, 12345678 - тикет позиции.
  2. Добавляете в советник OnChartEvent() и отслеживаете событие щелчка мыши по объекту. Анализируете имя объекта и, если там присутствует подстрока manual_, то смотрите что там за номер после manual_. Этот номер и есть тикет позиции, по значку которой вы щёлкнули мышкой.
  3. Далее дело техники: нужно сохранить найденный номер так, чтобы он не потерялся при перезапуске советника/терминала/компьютера/мира... Например, в ресурсах или глобальных переменных терминала.
  4. Советник должен читать этот ресурс и брать из него тикеты позиций, которые ему предстоит тралить
  5. В цикле трала берёте тикет выбранной позиции и ищете этот номер в сохранённом списке тикетов. Если такой тикет найден, то позицию с этим тикетом нужно тралить.
  6. При изменении количества позиций нужно проверить тикет закрытой позиции и найти его в сохранённом списке. Если такой тикет в списке существует, то его нужно удалить из этого списка - позиции уже нету, и нечего её тикету делать в списке тикетов для трала.
Как-то так примерно. Логику писал на коленке, так что мог не учесть чего...