Необходимо, чтобы после после определенного события советник завершал работу.
я так понимаю это функция deinit(), мне нужно ее как то вызвать. Цитата из учебника:
"Специальная функция deinit() вызывается для исполнения клиентским терминалом также при завершении работы клиентского терминала, при закрытии окна финансового инструмента, непосредственно перед сменой финансового инструмента и/или периода графика, при удачной перекомпиляции программы в редакторе MetaEditor, при смене входных параметров, а также при смене счета. "
То есть мне нужно вручную, например, закрыть терминал, чтобы эта функция вызывалась?
Я пытался вызвать эту функцию при срабатывании условия, она выполнялась, но приходил новый тик и снова запускалась функция start.
int deinit()
{
Alert("Закрываем программу");
return(0);
}
int start()
{
//код
..............
if (OrdersTotal()==0) deinit();
return(0);
}
Необходимо, чтобы после после определенного события советник завершал работу.
я так понимаю это функция deinit(), мне нужно ее как то вызвать. Цитата из учебника:
"Специальная функция deinit() вызывается для исполнения клиентским терминалом также при завершении работы клиентского терминала, при закрытии окна финансового инструмента, непосредственно перед сменой финансового инструмента и/или периода графика, при удачной перекомпиляции программы в редакторе MetaEditor, при смене входных параметров, а также при смене счета. "
То есть мне нужно вручную, например, закрыть терминал, чтобы эта функция вызывалась?
Я пытался вызвать эту функцию при срабатывании условия, она выполнялась, но приходил новый тик и снова запускалась функция start.
Как мне все таки завершить программу?
Спасибо.
Чтобы программно закрыть терминал, в самом начале кода перед функцией start() вставьте:
Если не ошибаюсь, return(0) просто завершит текущую функцию start() и будет ждать следующего тика, а мне нужно, чтобы советник завершил работу, как если бы я вручную открепил советник от графика.
Я проверил на практике - бесконечно с каждым тиком выдает алерт "Открытых ордеров - 0"
Заветного "Пока" не дождался
int start()
{
if (OrdersTotal()==0)
{
Alert("Открытых ордеров - ", OrdersTotal());
return(0);
}
}
//+------------------------------------------------------------------+int deinit()
{
Alert("Пока");
return(0);
}
Не могу удалить с компа Terminal.exe от Alpari Limited, build 509.
При использовании панели управления для удаления выдается "У Вас недостаточно прав для удаления. Обратитесь к системному Администратору!"
При использовании Uninstall.exe выдает "Сервер возвратил ссылку".
Техподдержка Alpari ничего вразумительного сказать не может, предлагает просто снести всю папку и установить терминал в другую директорию.
Стоит Win 7, Ultimate. Права администратора активированы, Uninstall.exe запускал от имени Администратора.
Буду очень благодарен за любой совет по решению данной проблемы
Некоторые злостные программки (mail.ru у меня было) перераспределяют права доступа и делают так что вы с правами администратора не имеете доступа к их удалению.
Проблема решалась методом научного тыка в перераспределении прав ( ПКМ на папке, свойства, безопасность, изменить, добавить,дополнительно,типы обьектов,поиск.......)
Но потом познакомился с "Revo uninstaller" и весь гемор с удалением чего-то пропал, + увереность что реестр почищен ОТ их деятельности.
Если не ошибаюсь, return(0) просто завершит текущую функцию start() и будет ждать следующего тика, а мне нужно, чтобы советник завершил работу, как если бы я вручную открепил советник от графика.
Я проверил на практике - бесконечно с каждым тиком выдает алерт "Открытых ордеров - 0"
Заветного "Пока" не дождался
Ваше желание напоминает анекдот про "шашечки". Если нужно, чтобы советник перестал торговать, то через активацию (глобального) флага (после наступления каких-то условий), прерывание функции start() (выход через return) даст ожидаемый результат.
Некоторые злостные программки (mail.ru у меня было) перераспределяют права доступа и делают так что вы с правами администратора не имеете доступа к их удалению.
Проблема решалась методом научного тыка в перераспределении прав ( ПКМ на папке, свойства, безопасность, изменить, добавить,дополнительно,типы обьектов,поиск.......)
Но потом познакомился с "Revo uninstaller" и весь гемор с удалением чего-то пропал, + увереность что реестр почищен ОТ их деятельности.
Большое спсибо! Буду знакомиться с Revo uninstaller.
TarasBY: Ваше желание напоминает анекдот про "шашечки". Если нужно, чтобы советник перестал торговать, то через активацию (глобального) флага (после наступления каких-то условий), прерывание функции start() (выход через return) даст ожидаемый результат.
Добрый день.
Необходимо, чтобы после после определенного события советник завершал работу.
я так понимаю это функция deinit(), мне нужно ее как то вызвать. Цитата из учебника:
"Специальная функция deinit() вызывается для исполнения клиентским терминалом также при завершении работы клиентского терминала, при закрытии окна финансового инструмента, непосредственно перед сменой финансового инструмента и/или периода графика, при удачной перекомпиляции программы в редакторе MetaEditor, при смене входных параметров, а также при смене счета. "
То есть мне нужно вручную, например, закрыть терминал, чтобы эта функция вызывалась?
Я пытался вызвать эту функцию при срабатывании условия, она выполнялась, но приходил новый тик и снова запускалась функция start.
Как мне все таки завершить программу?
Спасибо.
Добрый день.
Необходимо, чтобы после после определенного события советник завершал работу.
я так понимаю это функция deinit(), мне нужно ее как то вызвать. Цитата из учебника:
"Специальная функция deinit() вызывается для исполнения клиентским терминалом также при завершении работы клиентского терминала, при закрытии окна финансового инструмента, непосредственно перед сменой финансового инструмента и/или периода графика, при удачной перекомпиляции программы в редакторе MetaEditor, при смене входных параметров, а также при смене счета. "
То есть мне нужно вручную, например, закрыть терминал, чтобы эта функция вызывалась?
Я пытался вызвать эту функцию при срабатывании условия, она выполнялась, но приходил новый тик и снова запускалась функция start.
Как мне все таки завершить программу?
Спасибо.
Чтобы программно закрыть терминал, в самом начале кода перед функцией start() вставьте:
В функции start(), когда вам необходимо закрыть терминал, вызываете функцию ExitMT4(), которую объявляете за пределами функции start()
Чтобы программно закрыть терминал, в самом начале кода перед функцией start() вставьте:
В функции start(), когда вам необходимо закрыть терминал, вызываете функцию ExitMT4(), которую объявляете за пределами функции start()
Большое спасибо за развернутый ответ.
Мне в принципе было бы достаточно просто завершить работу советника, закрывать терминал необязательно. Неужели нет простого способа?
Я думаю deinit() как то должен решить этот вопрос, но видимо я что-то не так делаю..
Не могу удалить с компа Terminal.exe от Alpari Limited, build 509.
При использовании панели управления для удаления выдается "У Вас недостаточно прав для удаления. Обратитесь к системному Администратору!"
При использовании Uninstall.exe выдает "Сервер возвратил ссылку".
Техподдержка Alpari ничего вразумительного сказать не может, предлагает просто снести всю папку и установить терминал в другую директорию.
Стоит Win 7, Ultimate. Права администратора активированы, Uninstall.exe запускал от имени Администратора.
Буду очень благодарен за любой совет по решению данной проблемы
Большое спасибо за развернутый ответ.
Мне в принципе было бы достаточно просто завершить работу советника, закрывать терминал необязательно. Неужели нет простого способа?
Я думаю deinit() как то должен решить этот вопрос, но видимо я что-то не так делаю..
Не deinit(), а return(0);
Если не ошибаюсь, return(0) просто завершит текущую функцию start() и будет ждать следующего тика, а мне нужно, чтобы советник завершил работу, как если бы я вручную открепил советник от графика.
Я проверил на практике - бесконечно с каждым тиком выдает алерт "Открытых ордеров - 0"
Заветного "Пока" не дождался
Не могу удалить с компа Terminal.exe от Alpari Limited, build 509.
При использовании панели управления для удаления выдается "У Вас недостаточно прав для удаления. Обратитесь к системному Администратору!"
При использовании Uninstall.exe выдает "Сервер возвратил ссылку".
Техподдержка Alpari ничего вразумительного сказать не может, предлагает просто снести всю папку и установить терминал в другую директорию.
Стоит Win 7, Ultimate. Права администратора активированы, Uninstall.exe запускал от имени Администратора.
Буду очень благодарен за любой совет по решению данной проблемы
Некоторые злостные программки (mail.ru у меня было) перераспределяют права доступа и делают так что вы с правами администратора не имеете доступа к их удалению.
Проблема решалась методом научного тыка в перераспределении прав ( ПКМ на папке, свойства, безопасность, изменить, добавить,дополнительно,типы обьектов,поиск.......)
Но потом познакомился с "Revo uninstaller" и весь гемор с удалением чего-то пропал, + увереность что реестр почищен ОТ их деятельности.
Если не ошибаюсь, return(0) просто завершит текущую функцию start() и будет ждать следующего тика, а мне нужно, чтобы советник завершил работу, как если бы я вручную открепил советник от графика.
Я проверил на практике - бесконечно с каждым тиком выдает алерт "Открытых ордеров - 0"
Заветного "Пока" не дождался
Некоторые злостные программки (mail.ru у меня было) перераспределяют права доступа и делают так что вы с правами администратора не имеете доступа к их удалению.
Проблема решалась методом научного тыка в перераспределении прав ( ПКМ на папке, свойства, безопасность, изменить, добавить,дополнительно,типы обьектов,поиск.......)
Но потом познакомился с "Revo uninstaller" и весь гемор с удалением чего-то пропал, + увереность что реестр почищен ОТ их деятельности.
Ваше желание напоминает анекдот про "шашечки". Если нужно, чтобы советник перестал торговать, то через активацию (глобального) флага (после наступления каких-то условий), прерывание функции start() (выход через return) даст ожидаемый результат.
Это, примерно, выглядит так: