Нужна помощь в советнике для отправки скрина на Telegram - страница 2

 
Alexey Viktorov:

Тогда зачем ChartSetSymbolPeriod со старыми значениями символа и периода?

У меня есть принципы, которые я стараюсь не нарушать. Могу только теоретически подсказывать. Готовое решение стараюсь не писать. Плюс ко всему с телеграмом никогда не связывался и нет желания.

Просто напишите алгоритм:

  • Пришло событие.
  • Сделали снимок экрана.
  • Изменили ТФ
  • Сделали снимок экрана
  • Вернули ТФ в первоначальное значение.

Пока я не вижу последовательности в алгоритме.

И когда будут проблемы, ищите причину.

  • Пришло событие.
  • Сделали снимок экрана.
  • Если событие пришло с Н1 тогда делаем еще один скрин Н4 в новом окне, которое создается, делаем скрин и сразу закрывается, но в этом и проблема, иногда оно глючит, хочу что бы второй скрин делался постоянно в одном и том же окне, только подставлялся нужный инструмент, можно в окне где установлен советник.  Alexandr Gavrilin это сделал, но проблема в том что нужный инструмент должен применяться до создания скрина, а у него после.
 
Andrey777:
  • Пришло событие.
  • Сделали снимок экрана.
  • Если событие пришло с Н1 тогда делаем еще один скрин Н4 в новом окне, которое создается, делаем скрин и сразу закрывается, но в этом и проблема, иногда оно глючит, хочу что бы второй скрин делался постоянно в одном и том же окне, только подставлялся нужный инструмент, можно в окне где установлен советник.  Alexandr Gavrilin это сделал, но проблема в том что нужный инструмент должен применяться до создания скрина, а у него после.

В одном случае вы говорите о другом ТФ, а в другом о другом инструменте. Где правда? И в своей интерпретации вы меняете алгоритм предложенный мной.

Если что-то не так в моём алгоритме, то начните с последнего пункта вашего.

  • Если событие пришло с Н1
  • Делаем снимок экрана на Н1
  • Меняем ТФ на Н4
  • Делаем снимок экрана на Н4.
  • Возвращаем ТФ к прежнему Н1.
Совсем нет необходимости открывать новое окно инструмента.

Если-же делать снимок на Н1 нет необходимости, то просто

  • Меняем ТФ на Н4
  • Делаем снимок экрана на Н4.
  • Возвращаем ТФ к прежнему Н1.
 
Alexey Viktorov:

В одном случае вы говорите о другом ТФ, а в другом о другом инструменте. Где правда? И в своей интерпретации вы меняете алгоритм предложенный мной.

Если что-то не так в моём алгоритме, то начните с последнего пункта вашего.

  • Если событие пришло с Н1
  • Делаем снимок экрана на Н1
  • Меняем ТФ на Н4
  • Делаем снимок экрана на Н4.
  • Возвращаем ТФ к прежнему Н1.
Совсем нет необходимости открывать новое окно инструмента.

Если-же делать снимок на Н1 нет необходимости, то просто

  • Меняем ТФ на Н4
  • Делаем снимок экрана на Н4.
  • Возвращаем ТФ к прежнему Н1.

Необходимость открывать Н4 в новом окне есть, что бы не сбивать работу индикатора на Н1 при переключении ТФ, но это не важно, там советник работает правильно. Главная проблема это сделать что бы второй скрин создавался в окне где установлен советник а не открывал каждый раз новое окно,  Alexandr Gavrilin  внес изменение, оно работает, но только есть ошибка, с начало советник делает скрин а только потом подставляет нужный инструмент, если можете, подправьте это в коде, должно быть наоборот, с начало ставит нужный инструмент с которого пришел сигнал в окно где установлен советник а только потом делает второй скрин.

bool ChartScreenShot(const string _symbol,
                     const ENUM_TIMEFRAMES _tf,
                     const string file_name,
                     const string _template)
  {

//---
//
//long chart_id=ChartOpen(_symbol,_tf);
   long chart_id=ChartID();
   if(!ChartSetSymbolPeriod(chart_id,_symbol,_tf))
     {
      Print("Change Symbol/Period error: ",_LastError);
      return false;
     }

   ChartRedraw(chart_id);
   Sleep(155);
//---
 
Объясните что дает команду индикатора, что посылает сообщение для создания скрина или приложите его сюда для понимания, что отправляется в ChartEvent и в какой момент. 
 
Alexandr Gavrilin:
Объясните что дает команду индикатора, что посылает сообщение для создания скрина или приложите его сюда для понимания, что отправляется в ChartEvent и в какой момент. 
void Send(const string msg)
  {
   long chart_id=ChartFirst();
   while(chart_id>0)
     {
      if(ChartID()!=chart_id)
         EventChartCustom(chart_id,234,ChartID(),0,msg);
      chart_id=ChartNext(chart_id);
     }
  }
 
Andrey777:
msg там что передается, какой формат? если передается символ, то где период? chart id с какого графика передает с того же самого или с другого?
 
Alexandr Gavrilin:

Send("BUY - "+Symbol()+"  "+StringSubstr(EnumToString((ENUM_TIMEFRAMES)Period()),7));

 

Alexandr Gavrilin:

msg там что передается, какой формат? если передается символ, то где период? chart id с какого графика передает с того же самого или с другого?
EventChartCustom(chart_id,234,ChartID(),0,msg);
lparam = ChartID(),lparam = 0
SignalIsAllowed(ChartSymbol(lparam),ChartPeriod(lparam))
SignalIsAllowed(const string _symbol,const ENUM_TIMEFRAMES _timeframe)
 

иногда оно глючит, 

а в чем именно глюк заключался изначально? какое сообщение в Журнале пишет в этот момент?

можно ведь сделать чтобы он не закрывал график ранее созданный.

 
Alexandr Gavrilin:

иногда оно глючит, 

а в чем именно глюк заключался изначально? какое сообщение в Журнале пишет в этот момент?

можно ведь сделать чтобы он не закрывал график ранее созданный.

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