Советники: All information about the symbol 2

 

All information about the symbol 2:

Панель-утилита: вся информация о текущем символе (информация берётся из объекта класса CSymbolInfo). Панель на базе класса CDialog

All information about the symbol 2

Автор: Vladimir Karputov

 

его можно и как Индикатор создать - проверил работает как Экспертом так и Индикатором 

EURUSDM3

 
SanAlex:

его можно и как Индикатор создать - проверил работает как Экспертом так и Индикатором 


Да. А также работает и в виде скрипта.
 
Vladimir Karputov:
Да. А также работает и в виде скрипта.

Я уже задумался что не будь из него слепить. Интересная панелька с информацией, с которой можно брать значения 

 
Automated-Trading:

All information about the symbol 2:

Автор: Vladimir Karputov

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

 
Vitaly Muzichenko:

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

Я видел Ваш вопрос - мне не удалось это сделать. Пока только вариант - дождаться изменения размера панели после чего убивать и пересоздавать список.

 
Vladimir Karputov:

Я видел Ваш вопрос - мне не удалось это сделать. Пока только вариант - дождаться изменения размера панели после чего убивать и пересоздавать список.

Вот с этим возникают проблемы.

Задача такая: добавлять в панель открытые позиции и удалять с неё закрытые.

Логика примерно: одна запись занимает 15рх, если имеется 50 позиций, им нужно 50*15=750рх.

Считаем новый размер для панели:

int heightChart = ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS); // ширина окна графика
int heightСontent = PositionTotal()*15;
 int heightDialog = heightСontent;
 if(heightChart < heightСontent) heightDialog = heightChart;
//--
 // Здесь перерисовка высоты диалог-окна и содержимого в чём собственно и проблемы

Спасибо!

---

P.S. Данные в панели также должны обновляться, показывать текущий профит по каждой позиции, для этого можно использовать в таймере: ExtDialog.m_list_view.ItemUpdate(i,str);

 
Vitaly Muzichenko:

Вот с этим возникают проблемы.

Задача такая: добавлять в панель открытые позиции и удалять с неё закрытые.

Логика примерно: одна запись занимает 15рх, если имеется 50 позиций, им нужно 50*15=750рх.

Считаем новый размер для панели:

Спасибо!

---

P.S. Данные в панели также должны обновляться, показывать текущий профит по каждой позиции, для этого можно использовать в таймере: ExtDialog.m_list_view.ItemUpdate(i,str);

В общем через наследование не вышло. Создал копию класса и добавил в него немного функционала.

Срабатывает на нажатие клавиши '5' (на цифровой клавиатуре справа).


Файлы:
 
Vladimir Karputov:

В общем через наследование не вышло. Создал копию класса и добавил в него немного функционала.

Срабатывает на нажатие клавиши '5' (на цифровой клавиатуре справа).


Cпасибо, не совсем то, но направление уже есть!

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

 
Vitaly Muzichenko:

Cпасибо, не совсем то, но направление уже есть!

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

Про какое диалоговое окно спрос?

 
Vladimir Karputov:

Про какое диалоговое окно спрос?

Не корректно задал вопрос.

Вопрос, как сделать так, чтобы список подстраивался под размер окна, сейчас оно меняется, но список идёт на уменьшение.


В коде изменил размер списка:

//+------------------------------------------------------------------+
//| Create the "ListView" element                                    |
//+------------------------------------------------------------------+
bool CControlsDialog::CreateListView()
  {
//--- coordinates
   int x1=0;
   int y1=0;
   int x2=ClientAreaWidth();
   int y2=ClientAreaHeight();
//--- create
   if(!m_list_view.Create(m_chart_id,m_name+"ListView",m_subwin,x1,y1,x2,y2))
      return(false);
   if(!Add(m_list_view))
      return(false);
//--- fill out with strings
   for(int i=0; i<16; i++)
      if(!m_list_view.AddItem("Item "+IntegerToString(i)))
         return(false);
//--- succeed
   return(true);
  }

-------------

В код добавил:

void OnChartEvent(const int id,         // event ID
                  const long& lparam,   // event parameter of the long type
                  const double& dparam, // event parameter of the double type
                  const string& sparam) // event parameter of the string type
  {
   ExtDialog.ChartEvent(id,lparam,dparam,sparam);
//--- keypress
   if(id==CHARTEVENT_KEYDOWN)
     {
      switch((int)lparam)
        {
         case KEY_NUMPAD_5:
            Print("Pressed KEY_NUMPAD_5");
            ExtDialog.Resize();
            break;
         default:
            Print("Pressed unlisted key");
        }
     }
   /*//--- left-clicking on a chart
      if(id==CHARTEVENT_CLICK)
         ExtDialog.Resize();*/
  if(id==CHARTEVENT_CHART_CHANGE)
     {
      if(ExtDialog.Height()>40) // Если окно не свёрнуто
        {
         ExtDialog.Height((int)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS)-50); // Изменим высоту диалог-окна
         ExtDialog.Resize();
        }
     }
  }