Скачать MetaTrader 5

Алерт по балансу или журналу. Возможно?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Evgeniy Zykov
781
Evgeniy Zykov  

Добрый день. Помогите с написанием функции Алерта по балансу или журналу сделок. (MQL4)

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

  1. Открытие ордера.
  2. Закрытие ордера. (SL/TP)
  3. Сработка отложки.

При этом код  не должен обращаться к брокеру. Тоесть использовать данные которые терминал получает автоматом от брокера.

Неважно что произошло. Только факт что чтото произошло.

Если возможно подскажите как реализовать.?

transcendreamer
3365
transcendreamer  
ForTorg:

Добрый день. Помогите с написанием функции Алерта по балансу или журналу сделок. (MQL4)

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

  1. Открытие ордера.
  2. Закрытие ордера. (SL/TP)
  3. Сработка отложки.

При этом код  не должен обращаться к брокеру. Тоесть использовать данные которые терминал получает автоматом от брокера.

Если возможно подскажите как реализовать.?

банально мониторить OrdersTotal()
Evgeniy Zykov
781
Evgeniy Zykov  
transcendreamer:
банально мониторить OrdersTotal()

А OrdersTotal() запрос на сервер разве не отправляет?

Была BUYSTOP стала BUY...   1 была. 1 осталась.

Как...

Dmitry Fedoseev
43505
Dmitry Fedoseev  

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

OrdersTotal() - это не вариант. Один ордер может закрыться по стоплосс, при этом отложенный ордер сработать (число рыночных ордеров не изменилось).

Запросы на сервер  OrdersTotal() не отправляет.

Evgeniy Zykov
781
Evgeniy Zykov  
Integer:

Запросы на сервер  OrdersTotal() не отправляет.

Но если так то ,открытие ордера, закрытие ордера мы поймаем а как быть с отложками...

Была BUYSTOP стала BUY...   1 была. 1 осталась.

Dmitry Fedoseev
43505
Dmitry Fedoseev  
ForTorg:

Но если так то ,открытие ордера, закрытие ордера мы поймаем а как быть с отложками...

Была BUYSTOP стала BUY...   1 была. 1 осталась.

Еще один массив (или поле в структуре) для типа. Определять по смене типа. 

Evgeniy Zykov
781
Evgeniy Zykov  
А ч
Integer:

Еще один массив (или поле в структуре) для типа. Определять по смене типа. 

А чтобы тип ордера определить разве не нужно отправлять запрос на сервер? Мне неважно что произошло. Только факт что произошло торговое событие.
Sergey Eremin
4394
Sergey Eremin  
ForTorg:

Но если так то ,открытие ордера, закрытие ордера мы поймаем а как быть с отложками...

Была BUYSTOP стала BUY...   1 была. 1 осталась.

В своих проектах так делаю (описываю упрощённо, на идейном уровне):

  1. При старте советника запоминаем ордера, которые есть на счёту (динамический массив структур; структура объединяет такие данные как тикет, тип, цена открытия, sl, tp и т.п.).
  2. Раз в xx секунд (например, по таймеру) вызываю метод проверки изменений. В этом методе фомирую массив структур по ордерам в текущий момент времени.
  3. Сравниваю массив структур из шага 1 с массивом из шага 2. Если изменился тип какого-то ордера (или ещё что-то, что нам интересно, например sl/tp), то выполняем нужное действие (в моём случае формируется массив, где описываются изменения и отдаётся как результат работы метода).
  4. Актуализируем массив из шага 1 (обнуляем его, а затем копируем в него массив из шага 2).

Всё это обёрнуто в класс, массив из шага 1 - член класса, массив из шага 2 - локальный массив внутри метода определения различий.

Если делать без ООП, то массив из шага 1 может быть статическим, или глобальным (что не есть гуд).

Sergey Eremin
4394
Sergey Eremin  
ForTorg:
А чА чтобы тип ордера определить разве не нужно отправлять запрос на сервер? Мне неважно что произошло. Только факт что произошло торговое событие.

Как сказано в этой ветке:

Вообщето история храниться на серверной части и регулярно синхронизируется, 

но Roger прав терминал имеет для этих целей всё необходимое у себя и по OrderSelect() к серверу не обращается.

Evgeniy Zykov
781
Evgeniy Zykov  
ENSED:

В своих проектах так делаю (описываю упрощённо, на идейном уровне):

  1. При старте советника запоминаем ордера, которые есть на счёту (динамический массив структур; структура объединяет такие данные как тикет, тип, цена открытия, sl, tp и т.п.).
  2. Раз в xx секунд (например, по таймеру) вызываю метод проверки изменений. В этом методе фомирую массив структур по ордерам в текущий момент времени.
  3. Сравниваю массив структур из шага 1 с массивом из шага 2. Если изменился тип какого-то ордера (или ещё что-то, что нам интересно, например sl/tp), то выполняем нужное действие (в моём случае формируется массив, где описываются изменения и отдаётся как результат работы метода).
  4. Актуализируем массив из шага 1 (обнуляем его, а затем копируем в него массив из шага 2).

Всё это обёрнуто в класс, массив из шага 1 - член класса, массив из шага 2 - локальный массив внутри метода определения различий.

Если делать без ООП, то массив из шага 1 может быть статическим, или глобальным (что не есть гуд).

Примерно также  делаю.... ну или пытаюсь.  Но интересует как поймать торговое событие не обращаясь к серверу... Совсем...
Sergey Eremin
4394
Sergey Eremin  
ForTorg:
Примерно также  делаю.... ну или пытаюсь.  Но интересует как поймать торговое событие не обращаясь к серверу... Совсем...

Насколько я понимаю, все эти функции не вызывают принудительного обращения к серверу. Они работают с тем, что терминалу уже известно. А терминал узнает об этом самостоятельно, без пинков от советников. Обратное было бы серьёзной дырой: злоумышленник запустит несколько тысяч "плохих" советников на счетах одного сервера брокера и тот ляжет :)

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий