как по клику на одном графике попасть на график другой валютной пары

 

Добрый день, господа программисты!

Подскажите самоучке пожалуйста с помощью какой функции или набора таковых сделать следующий трюк:

Есть индикатор, он показывает сводную инфу по множеству инструментов на графике например евродоллара. И показывает например что надо покупать Cad/Jpy.

Пока я найду эту валютную пару из 30 открытых графиков сто лет пройдет. Нельзя ли прикрутить типа кнопку чтоли на график, при нажатии на которую открывался бы как раз нужный в данный момент график. 

Заранее спасибо.

 
Привет!

Заказ в фрилансе сделай.
За 30$ сделают.
И очень быстро.
 
За деньги каждый сможет, тогда и форум можно снести оставить тока биржу фрилансеров здесь. Бгггг))
 
fantomas56:

Добрый день, господа программисты!

Подскажите самоучке пожалуйста с помощью какой функции или набора таковых сделать следующий трюк:

Есть индикатор, он показывает сводную инфу по множеству инструментов на графике например евродоллара. И показывает например что надо покупать Cad/Jpy.

Пока я найду эту валютную пару из 30 открытых графиков сто лет пройдет. Нельзя ли прикрутить типа кнопку чтоли на график, при нажатии на которую открывался бы как раз нужный в данный момент график. 

Заранее спасибо.

Можно делать вывод сообщений на отдельный график с других графиков, например, "CADJPY - UP". Потом кликаешь на это сообщение, узнаешь какой в нем символ. Делаешь перебор всех графиков и находишь с нужным символом, потом активируешь этот найденный график с помощью ChartSetInteger(), параметр CHART_BRING_TO_TOP.

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

 
Vasiliy Pushkaryov:

Можно делать вывод сообщений на отдельный график с других графиков, например, "CADJPY - UP". Потом кликаешь на это сообщение, узнаешь какой в нем символ. Делаешь перебор всех графиков и находишь с нужным символом, потом активируешь этот найденный график с помощью ChartSetInteger(), параметр CHART_BRING_TO_TOP.

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

Все понятно, кроме этого:"делать вывод сообщений на отдельный график с других графиков, например, "CADJPY - UP". Потом кликаешь на это сообщение, узнаешь какой в нем символ"


Какой функцией делать сообщения на другой график не подскажете, и как их можно кликать чтобы узнать какие в нем символы?

 
fantomas56:

Все понятно, кроме этого:"делать вывод сообщений на отдельный график с других графиков, например, "CADJPY - UP". Потом кликаешь на это сообщение, узнаешь какой в нем символ"


Какой функцией делать сообщения на другой график не подскажете, и как их можно кликать чтобы узнать какие в нем символы?

Создать объект OBJ_LABEL - т.е. обычная надпись.

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

void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam)
{
  if(id == CHARTEVENT_OBJECT_CLICK)
  {
    string lableText = ObjectGetString(0, sparam, OBJPROP_TEXT);
    int nPos = StringFind(lableText, " ");                    // номер позиции, с которой начинается пробел
    string lableSymbol = StringSubstr(lableText, 0, nPos);    // Извлекаем из метки, на которой щелкнули имя символа
    long chartPrev = ChartFirst();                            // Получим ID 1-го графика
    
    while(true)
    {
      chartPrev = ChartNext(chartPrev);                   // Получаем ID след.графика
      if(chartPrev < 0) break;                            // Если список графиков закончился
      
      if(compareSymbol(chartPrev, lableSymbol))           // Если нашли график с нужным именем символа
      {
        ChartSetInteger(chartPrev, CHART_BRING_TO_TOP, true); // выведем его наверх, активируем
        ChartSymbol(chartPrev);
      }
    }
  }
}
 
Vasiliy Pushkaryov:

Создать объект OBJ_LABEL - т.е. обычная надпись.

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

Премного благодарен! К Вашей карме добавлено 100 пойнтов)))  Это поистине ценная информация! Буду разбираться и самодельничать. 

Хотел лишь уточнить про последнюю информативную строчку (без комментариев которая) - ChartSymbol(chartPrev);

Какой она несет смысл? 

 
fantomas56:

Премного благодарен! К Вашей карме добавлено 100 пойнтов)))  Это поистине ценная информация! Буду разбираться и самодельничать. 

Хотел лишь уточнить про последнюю информативную строчку (без комментариев которая) - ChartSymbol(chartPrev);

Какой она несет смысл? 

Вы о справке в редакторе слышали? Ставите курсор на ChartSymbol(chartPrev) и нажимаете F1 - о сколько там открытий чудных...

 
fantomas56:

Премного благодарен! К Вашей карме добавлено 100 пойнтов)))  Это поистине ценная информация! Буду разбираться и самодельничать. 

Хотел лишь уточнить про последнюю информативную строчку (без комментариев которая) - ChartSymbol(chartPrev);

Какой она несет смысл? 

void OnStart()
{
  long chartPrev = ChartFirst();                          // Получим ID 1-го графика
  ChartSetInteger(chartPrev, CHART_BRING_TO_TOP, true);   // выведем его наверх, активируем
}

void OnStart()
{
  long chartPrev = ChartFirst();                          // Получим ID 1-го графика
  ChartSymbol(chartPrev);
}

Вот два простых скрипта.

В январе я подавал заявку в СервисДеск о том, что верхний скрипт работает в МТ5. В МТ4 он не работал. Случайно обнаружил, что нижний скрипт, хотя должен просто возвращать имя, тем не менее, он выводил благодаря ChartSymbol() график на первый план. Это работало в МТ4, билд 1090. Наверное, оставил у себя для универсальности, уже не помню.

Но вот только что проверил. В МТ4 нижний скрипт не всегда кидает на первый график. А в МТ5 верхний скрипт - работает. Поэтому там сейчас ChartSymbol()  не нужно использовать.

 
Artyom Trishkin:

Вы о справке в редакторе слышали? Ставите курсор на ChartSymbol(chartPrev) и нажимаете F1 - о сколько там открытий чудных

Да слышал, слышал. Тут я речь то не о том веду "а что это за функция", а о том, а зачем она в коде, ведь она вроде возвращает значение для самой себя, не присваивая никакой переменной ничего, для красоты получается. Ну или нет. Вот это и хотел у автора уточнить, и он кстати понял меня.