Неправильное определение баланса при работе с двух терминалов на одном счете - страница 2

 
Volkot >>:

Возможно и так, но баланс в окне "торговля" (и запрос AccountBalance()) не обновится и через час, если не будет перелогина. Т.е. вариант б) не проходит. Интересно, в каких случаях происходит запрос баланса на сервер.


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

После логина с сервера всё считывается.

 
DC2008 >>:

Скорее всего Вы торгуете разными валютами, а приход тиков у них не совпадает. Вот и получается, что обновление происходит не одновременно. Для синхронизации нужно советники вешать на одну и туже валюту, а торговля пусть идёт по разным. На чемпионате был такой советник, который был прикреплён к валюте с частыми тиками, а торговля велась на совершенно других.

Торгую действительно разными валютами. Но все сделки из эксперимента проводил руками. Т.е., думаю, что не поможет повесить советники на одну валюту. Даже наоборот - если сделки закрываются немного в разное время, то все ОК. А вот если в одно время (практически), то бывают такие сбои.

Вот и пытаюсь понять, где не происходит синхронизация и что с этим можно сделать...

 
VictorArt >>:


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

После логина с сервера всё считывается.


Как же сделать этот запрос на сервер, кроме перелогина? RefreshRates не помогает.

 
Попробуйте заменить AccountBalance() на свой AccountHistoryBalance().
 
Volkot >>:

Как же сделать этот запрос на сервер, кроме перелогина? RefreshRates не помогает.


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

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

1. прошла операция на первом

2. прошла операция на втором

3. проверяем баланс - что-то делаем, т.е. готовимся к последующим операциям, например, вычисляем размер нового лота.

В общем, нет правильного баланса и пусть не будет - алгоритм перепишите с учётом этого.

 
getch >>:
Попробуйте заменить AccountBalance() на свой AccountHistoryBalance().

Разве есть такая функция  AccountHistoryBalance()?

 
VictorArt >>:


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

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

1. прошла операция на первом

2. прошла операция на втором

3. проверяем баланс - что-то делаем, т.е. готовимся к последующим операциям, например, вычисляем размер нового лота.

В общем, нет правильного баланса и пусть не будет - алгоритм перепишите с учётом этого.


Насчет RefreshRates, это мне Решетов предлагал в этой ветке:

>>Reshetov писал(а) >>
>>RefreshRates() перед OrderSend() не пробовали?

Я попробовал на всякий случай в эксперте, котрый баланс проверяет. Хотя в торговом она у меня и так стоит.

Если это никак не лечится, то можно самому считать баланс перебирая сделки истории с определенного момента задав баланс на это время (чтобы не всю историю лопатить), но это, конечно, геморно, но возможно.

Хотелось бы узнать от разработчиков, может они подскажут как этого избежать. Им все-таки виднее, где сам сбой происходит.



 
Volkot >>:

Разве есть такая функция  AccountHistoryBalance()?

Используйте свою функцию. Баланс же еще зависит от модели представления сделок (неттинг или нет).

 
getch >>:

Используйте свою функцию. Баланс же еще зависит от модели представления сделок (неттинг или нет).

Баланс не должен зависеть от метода, когда все сделки закрыты.

Наверное, таки, прийдется использовать свою функцию определение баланса.

Думал, что это как-то лечится...

 
Volkot писал(а) >>

Хотелось бы узнать от разработчиков, может они подскажут как этого избежать. Им все-таки виднее, где сам сбой происходит.

По вашему вы правильно используете МТ4, с чего бы разработчикам заниматься этим.

Взяли бы уж 10 терминалов, чтобы все окончательно заглючило.

То что вы тут представили – это совсем мелочи, к которым ВСЕГДА нужно быть готовым. Они очевидны, окончательно их устранить будет невозможно.

В мт4 есть и другие проблемы возникающие и при нормальной эксплуатации терминала, которые тоже могут влиять на работу экспертов.

Самое простое решение, - это создавать запись о всех проведенных сделках и сверять их с историей, если их там нет, то добавлять недополученную прибыль в качестве доп информации вашего эксперта.

Но для этого нужны ДЛЛ и много времени, поэтому для вас лучшим выходом является попинать разработчиков.