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

 

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

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

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

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

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

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

 
ForTorg:

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

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

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

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

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

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

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

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

Как...

 

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

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

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

 
Integer:

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

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

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

 
ForTorg:

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

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

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

 
А ч
Integer:

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

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

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

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

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

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

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

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

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

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

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

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

 
ENSED:

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

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

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

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

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

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

Причина обращения: