Много лет назад в англ части в ветке (сейчас просто долго искать извиняюсь) был советник, который при торговле (и анализе рынка) генерировал и обновлял текстовый файл, который с определенной периодичностью считывал другой советник, работающий на том же Метатрейдере, но на другой паре (или на той же, но на другом графике). И оба торговали, общаясь друг с другом этим файлом.
У меня так сделано для общения скальпера-master с скальперами-slave на других терминалах. Но там передаются только команды управления от трейдера, чтобы одни и те же кнопки на всех терминалах вручную не щелкать. Хотя ничто не мешает передавать и данные.
Можно общаться через memory mapping, то тогда прощай маркет
Много работаю с кастомными символами. Почти всегда нужно грохнуть кастомный, но делать это приходится руками. Решил автоматизировать.
И оказалось, что это как раз сценарий для Сервиса. Возможно, это не совсем стандартный подход к Сервисам, но мне нужен был скрипт, который не привязан к чартам. И вот почему
// Удаляет символ активного графика из Обзора рынка (кастомный - удаляет полностью).#property service// Находит чарт в фокусе.long GetFocusChart()
{
long Chart = ChartFirst();
for (; Chart != -1; Chart = ChartNext(Chart))
if (ChartGetInteger(Chart, CHART_BRING_TO_TOP))
break;
return(Chart);
}
// Удаляет чарты символа.int DeleteCharts( conststring Symb )
{
int Res = 0;
for (long Chart = ChartFirst(); Chart != -1; Chart = ChartNext(Chart))
if (ChartSymbol(Chart) == Symb)
Res += ChartClose(Chart);
return(Res);
}
// Удаляет символ из Обзора рынка (кастомный - удаляет полностью).bool DeleteSymbol( conststring Symb )
{
DeleteCharts(Symb);
return(SymbolSelect(Symb, false) && (!SymbolInfoInteger(Symb, SYMBOL_CUSTOM) || CustomSymbolDelete(Symb)));
}
voidOnStart()
{
constlong Chart = GetFocusChart();
if (Chart != -1)
DeleteSymbol(ChartSymbol(Chart));
}
Думал, повесить на этот скрипт/сервис горячую клавишу и прибивать символ через нее, когда вижу чарт неугодного символа. Было бы очень удобно. Однако столкнулся с трудностями.
Невозможно повесить горячую клавишу на Сервис.
Чтобы Сервис повторно запустить, нужно его перед этим удалить. Предполагалось, что это нужно для запуска Сервисов на первом этапе старта Терминала. Но у меня другой случай.
SymbolSelect не срабатывает - не может удалить символ. Баг, видимо.
По итогу облом. Возможно ли как-то порешать практическую сторону Сервисов?
ЗЫ Есть обходной путь решения задачи удаления символа активного чарта.
Много работаю с кастомными символами. Почти всегда нужно грохнуть кастомный, но делать это приходится руками. Решил автоматизировать.
И оказалось, что это как раз сценарий для Сервиса. Возможно, это не совсем стандартный подход к Сервисам, но мне нужен был скрипт, который не привязан к чартам. И вот почему
Думал, повесить на этот скрипт/сервис горячую клавишу и прибивать символ через нее, когда вижу чарт неугодного символа. Было бы очень удобно. Однако столкнулся с трудностями.
Невозможно повесить горячую клавишу на Сервис.
Чтобы Сервис повторно запустить, нужно его перед этим удалить. Предполагалось, что это нужно для запуска Сервисов на первом этапе старта Терминала. Но у меня другой случай.
SymbolSelect не срабатывает - не может удалить символ. Баг, видимо.
По итогу облом. Возможно ли как-то порешать практическую сторону Сервисов?
ЗЫ Есть обходной путь решения задачи удаления символа активного чарта.
Невозможно повесить горячую клавишу на Сервис, потому что там не работает функция OnChartEvent(); Но, полагаю Вы в курсе. Значит, советник должен работать с горячими клавишами и через ресурсы перередавать в Сервис комманды. Попробуйте управлять сервисом через ресурсы.
ЗЫ. Конечно, при этом теряется смысл использования Сервиса. Ведь можно из советника закрывать чарты при нажатии на горячие клавиши...
ЗЫЫ. Единственный смысл в том, чтобы не плодить лишний функционал в советниках. Скидываем общий функционал разных совеников в Сервис и обращаемся к нему через ресурс. Даем комманду что делать.
Сервис оперирует данными(котировками) с возможностью их корректировки, но не позволяет управлять чем-либо; в частности - окнами терминала, а нужно именно это. Отсюда очевидный вывод: при необходимости закрытия того, или иного окна, сервис генерирует очевидно невозможную котировку для этого окна, а скрипт, прикрепленный к этому окну, закрывает его при получении этой котировки.
Много лет назад в англ части в ветке (сейчас просто долго искать извиняюсь) был советник, который при торговле (и анализе рынка) генерировал и обновлял текстовый файл, который с определенной периодичностью считывал другой советник, работающий на том же Метатрейдере, но на другой паре (или на той же, но на другом графике). И оба торговали, общаясь друг с другом этим файлом.
У меня так сделано для общения скальпера-master с скальперами-slave на других терминалах. Но там передаются только команды управления от трейдера, чтобы одни и те же кнопки на всех терминалах вручную не щелкать. Хотя ничто не мешает передавать и данные.
Можно общаться через memory mapping, то тогда прощай маркет
Много работаю с кастомными символами. Почти всегда нужно грохнуть кастомный, но делать это приходится руками. Решил автоматизировать.
И оказалось, что это как раз сценарий для Сервиса. Возможно, это не совсем стандартный подход к Сервисам, но мне нужен был скрипт, который не привязан к чартам. И вот почему
Думал, повесить на этот скрипт/сервис горячую клавишу и прибивать символ через нее, когда вижу чарт неугодного символа. Было бы очень удобно. Однако столкнулся с трудностями.
ЗЫ Есть обходной путь решения задачи удаления символа активного чарта.
Много работаю с кастомными символами. Почти всегда нужно грохнуть кастомный, но делать это приходится руками. Решил автоматизировать.
И оказалось, что это как раз сценарий для Сервиса. Возможно, это не совсем стандартный подход к Сервисам, но мне нужен был скрипт, который не привязан к чартам. И вот почему
Думал, повесить на этот скрипт/сервис горячую клавишу и прибивать символ через нее, когда вижу чарт неугодного символа. Было бы очень удобно. Однако столкнулся с трудностями.
ЗЫ Есть обходной путь решения задачи удаления символа активного чарта.
Невозможно повесить горячую клавишу на Сервис, потому что там не работает функция OnChartEvent(); Но, полагаю Вы в курсе. Значит, советник должен работать с горячими клавишами и через ресурсы перередавать в Сервис комманды. Попробуйте управлять сервисом через ресурсы.
ЗЫ. Конечно, при этом теряется смысл использования Сервиса. Ведь можно из советника закрывать чарты при нажатии на горячие клавиши...
ЗЫЫ. Единственный смысл в том, чтобы не плодить лишний функционал в советниках. Скидываем общий функционал разных совеников в Сервис и обращаемся к нему через ресурс. Даем комманду что делать.
Невозможно повесить горячую клавишу на Сервис, потому что там не работает функция OnChartEvent()
Спасибо. Тогда в чем проблема?
Вам же нужно, чтобы сам Сервис (работающий нон-стоп) реагировал на нажатия клавиш.
Спасибо. Тогда в чем проблема?
Вам же нужно, чтобы сам Сервис (работающий нон-стоп) реагировал на нажатия клавиш.
Нет. Нужно, чтобы Сервис мог работать в режиме Скрипта без привязки к чарту.
Нет. Нужно, чтобы Сервис мог работать в режиме Скрипта без привязки к чарту.
А разве он работает как то иначе?
А разве он работает как то иначе?
Да.
Да.
Чтобы он мог управлять любым чартом? Легко.