Повесить индикатор в отдельное окно - страница 3

 
Эдуард Климуш:

Да, пробовал, если другие свойства не изменять - все просто принудительно переводится в чарт и все. А насчет того, что сразу садиться и т.д., не прочитав документации.

Да, я не величайший mql программист, однако, знаний достаточно, чтобы создать мультивалютный/мультитаймфреймовый сигнальный индикатор. Моя проблема только лишь в том, что я не нашел, где конкретно нужно изменить свойство (и какое свойство), чтобы поставить этот индикатор в окно индикатора, а не графика.

P.S. я и не думал, что такой простой вопрос вызовет такую бурю эмоций у вас, уважаемые форумчане 

Выложите свой индикатор. Можно даже удалить все кроме OnInit(). Все, что ниже OnInit().
 
Эдуард Климуш:

Приложу не сам индикатор, а функцию инициализации, где рисуются все объекты. Более чем уверен, что проблема именно на этом месте (возможно "0" в параметрах создания объекта нужно изменить на что-то)

int OnInit()
  {
  EventSetTimer(Timer);
  for (int x=0; x<23; x++)
         for (int y=0; y<9; y++)
      {
         ObjectCreate(0, "signal"+IntegerToString(x)+IntegerToString(y),OBJ_LABEL,0,0,0,0,0);
         // создаем очередную метку. Обратите внимание, что название метки
         // создается "на лету" и зависит от счетчиков "x" и "y"
         ObjectSetString (0, "signal"+IntegerToString(x)+IntegerToString(y), OBJPROP_FONT, "Wingdings");

         // меняем шрифт на Wingdingsб чтобы получить доступ к символам
         ObjectSetInteger (0,"signal"+IntegerToString(x)+IntegerToString(y), OBJPROP_COLOR, Color_DontTrade);

         // меняем цвет на синий
         ObjectSetInteger (0,"signal"+IntegerToString(x)+IntegerToString(y), OBJPROP_FONTSIZE, 65);
         ObjectSetString(0, "signal"+IntegerToString(x)+IntegerToString(y), OBJPROP_TEXT, CharToString (110));

         //делаем квадратики
         ObjectSetInteger(0, "signal"+IntegerToString(x)+IntegerToString(y),OBJPROP_XDISTANCE,x*55+60);

         // изменяем координату Х.
         // x*20 - каждая метка создается с интервалом в 20 пикселей по
         // горизонтали и напрямую зависит от счетчика "x"
         ObjectSetInteger(0, "signal"+IntegerToString(x)+IntegerToString(y),OBJPROP_YDISTANCE,y*55+50);

         // изменяем координату Y.
         // y*20 - каждая метка создается с интервалом в 20 пикселей по
         // вертикали и напрямую зависит от счетчика "y"
      }   
     for(int x=0;x<9;x++)
   {
      // все как обычно
      ObjectCreate(0, "textPeriod"+IntegerToString(x),OBJ_LABEL,0,0,0,0,0);
      ObjectSetInteger(0,"textPeriod"+IntegerToString(x),OBJPROP_XDISTANCE,5);
      ObjectSetInteger(0,"textPeriod"+IntegerToString(x),OBJPROP_YDISTANCE,x*55+85);
      ObjectSetInteger (0,"textPeriod"+IntegerToString(x), OBJPROP_COLOR,  Color_TimeFrame);

         // меняем цвет на синий
      ObjectSetInteger (0,"textPeriod"+IntegerToString(x), OBJPROP_FONTSIZE,  20);   
      ObjectSetString(0,"textPeriod"+IntegerToString(x),OBJPROP_TEXT, periodString[x]);
      // используем массив periodString[], чтобы указать надписи
   }

      for(int x=0;x<23;x++)
   {
      // все как обычно
      ObjectCreate(0, "textSymbol"+IntegerToString(x),OBJ_LABEL,0,0,0,0,0);
      ObjectSetInteger(0,"textSymbol"+IntegerToString(x),OBJPROP_XDISTANCE,x*55 +65);
      ObjectSetInteger(0,"textSymbol"+IntegerToString(x),OBJPROP_YDISTANCE, 45);
      ObjectSetInteger (0,"textSymbol"+IntegerToString(x), OBJPROP_COLOR, Color_Symbol);

         // меняем цвет на синий
      ObjectSetInteger (0,"textSymbol"+IntegerToString(x), OBJPROP_FONTSIZE, 9);
      ObjectSetString(0,"textSymbol"+IntegerToString(x),OBJPROP_TEXT, aSymbol(x));

      // используем массив periodString[], чтобы указать надписи
   return(0);

А где здесь обсуждаемые строки   indicator_chart_window или indicator_separate_window  ?

Приложите индикатор. Проверю и попробую без лишних слов помочь

 
Dmitry Fedoseev:
Выложите свой индикатор. Можно даже удалить все кроме OnInit(). Все, что ниже OnInit().

в предыдущем ответе выложил.

Еще скажите, пожалуйста, заинтересовала возможность цеплять новости из метатрейдера. Можно ли это делать? Не говорю о полноценном алгоритме, но в какую сторону копать? 

 
Эдуард Климуш:

в предыдущем ответе выложил.

Еще скажите, пожалуйста, заинтересовала возможность цеплять новости из метатрейдера. Можно ли это делать? Не говорю о полноценном алгоритме, но в какую сторону копать? 

Средствами mql не выкопать.

Если, конечно, Вы говорите не про метки на экране. Тогда, думаю, есть варианты. 

 
Alexey Kozitsyn:
Средствами mql не выкопать.

а средствами "со стороны", например, .net и т.д.?

я слышал, можно скриптом проверять наличие открытых ордеров и всю информацию с них брать.

Неужели ничего аналогичного нельзя сделать с новостями? 

 
Эдуард Климуш:

в предыдущем ответе выложил.

Еще скажите, пожалуйста, заинтересовала возможность цеплять новости из метатрейдера. Можно ли это делать? Не говорю о полноценном алгоритме, но в какую сторону копать? 

Не то выложили. Интересно то, что расположено от самого верха файла до функции OnInit().

Про новости незнаю, наверно только объекты смотреть на графики, но это календарь. А вот сами новости, никак.

 
Эдуард Климуш:  в предыдущем ответе выложил.

Приложите индикатор. В предыдущем ответе отсутствуют обсуждаемые строки   indicator_chart_window или indicator_separate_window

Проверю и попробую без лишних слов помочь

 
Эдуард Климуш:

а средствами "со стороны", например, .net и т.д.?

я слышал, можно скриптом проверять наличие открытых ордеров и всю информацию с них брать.

Неужели ничего аналогичного нельзя сделать с новостями? 

Про .net не знаю, не знаком. Самое простое - открываете календарь, добавляете новости на чарт, вкл. автообновление. Появляются объекты типа event. Перебираете их, отбираете нужные.
 
STARIJ:

Приложите индикатор. В предыдущем ответе отсутствуют обсуждаемые строки   indicator_chart_window или indicator_separate_window

Проверю и попробую без лишних слов помочь

#property copyright "Eduard Klimush"
#property link      "http://bincall.pro/"
#property version   "1.00"
#property indicator_separate_window

string periodString[]={"M1","M5","M15","M30", "H1", "H4", "D1", "W1", "MN1"};


input color    Color_UpTrade=clrGreen;
input color    Color_DownTrade=clrRed;
input color    Color_DontTrade=clrGray;
input color    Color_Symbol=clrBlack;
input color    Color_TimeFrame=clrBlack;
input int      Timer=10;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
  EventSetTimer(Timer);
  for (int x=0; x<23; x++)
         for (int y=0; y<9; y++)
      {
         
         ObjectCreate(0, "signal"+IntegerToString(x)+IntegerToString(y),OBJ_LABEL,0,0,0,0,0);
         // создаем очередную метку. Обратите внимание, что название метки
         // создается "на лету" и зависит от счетчиков "x" и "y"
         
         ObjectSetString (0, "signal"+IntegerToString(x)+IntegerToString(y), OBJPROP_FONT, "Wingdings");
         // меняем шрифт на Wingdingsб чтобы получить доступ к символам
         
         ObjectSetInteger (0,"signal"+IntegerToString(x)+IntegerToString(y), OBJPROP_COLOR, Color_DontTrade);
         // меняем цвет на синий
         
         ObjectSetInteger (0,"signal"+IntegerToString(x)+IntegerToString(y), OBJPROP_FONTSIZE, 65);
         
         ObjectSetString(0, "signal"+IntegerToString(x)+IntegerToString(y), OBJPROP_TEXT, CharToString (110));
         //делаем квадратики
 
         ObjectSetInteger(0, "signal"+IntegerToString(x)+IntegerToString(y),OBJPROP_XDISTANCE,x*55+60);
         // изменяем координату Х.
         // x*20 - каждая метка создается с интервалом в 20 пикселей по
         // горизонтали и напрямую зависит от счетчика "x"
 
         ObjectSetInteger(0, "signal"+IntegerToString(x)+IntegerToString(y),OBJPROP_YDISTANCE,y*55+50);
         // изменяем координату Y.
         // y*20 - каждая метка создается с интервалом в 20 пикселей по
         // вертикали и напрямую зависит от счетчика "y"
      }   
      
     for(int x=0;x<9;x++)
   {
      // все как обычно
      ObjectCreate(0, "textPeriod"+IntegerToString(x),OBJ_LABEL,0,0,0,0,0);
      ObjectSetInteger(0,"textPeriod"+IntegerToString(x),OBJPROP_XDISTANCE,5);
      ObjectSetInteger(0,"textPeriod"+IntegerToString(x),OBJPROP_YDISTANCE,x*55+85);
      ObjectSetInteger (0,"textPeriod"+IntegerToString(x), OBJPROP_COLOR,  Color_TimeFrame);
         // меняем цвет на синий
      ObjectSetInteger (0,"textPeriod"+IntegerToString(x), OBJPROP_FONTSIZE,  20);   
      ObjectSetString(0,"textPeriod"+IntegerToString(x),OBJPROP_TEXT, periodString[x]);
      // используем массив periodString[], чтобы указать надписи
   }
      for(int x=0;x<23;x++)
   {
      // все как обычно
      ObjectCreate(0, "textSymbol"+IntegerToString(x),OBJ_LABEL,0,0,0,0,0);
      ObjectSetInteger(0,"textSymbol"+IntegerToString(x),OBJPROP_XDISTANCE,x*55 +65);
      ObjectSetInteger(0,"textSymbol"+IntegerToString(x),OBJPROP_YDISTANCE, 45);
      ObjectSetInteger (0,"textSymbol"+IntegerToString(x), OBJPROP_COLOR, Color_Symbol);
         // меняем цвет на синий
      ObjectSetInteger (0,"textSymbol"+IntegerToString(x), OBJPROP_FONTSIZE, 9);
      ObjectSetString(0,"textSymbol"+IntegerToString(x),OBJPROP_TEXT, aSymbol(x));
      // используем массив periodString[], чтобы указать надписи
   }
   
      
   return(0);
//---
   return(INIT_SUCCEEDED);
  }
 

Хаха. Так он графическими объектами рисует. У ObjectCreate() есть параметр sub_window - в нем надо указать номер подокна, а он узнается через WindowFind().

 

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