Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1508

 
Надо сначала сделать этот массив объектов, а потом уже его элементы использовать в цикле, вызывая для них метод Create. Сейчас не могу написать пример
 
Yuriy Bykov #:
Надо сначала сделать этот массив объектов, а потом уже его элементы использовать в цикле, вызывая для них метод Create. Сейчас не могу написать пример

Понял, спасибо! 

 

Как-то так, наверное:

// Глобальный массив
CButton btns[];

...

int total = SymbolsTotal(true);

ArrayResize(btns, total);

for(int i=0; i<total;i++){ 
   btns[i].Create(0,"btn"+(string) i,0,0,0+BTN_HEIGHT+btn_left,0,0+BTN_WIDTH*btn_line);
   ExtDialog.Add(btns[i]);
}

Обычно создают свой класс диалога, наследуясь от CAppDialog. Тогда btns может быть полем этого класса. Иначе надо делать его глобальной переменной.

Проверьте ещё, что у вас правильно вычисляются координаты размещения очередной кнопки - в их вычислении, по идее, как-то должен участвовать индекс i.

 
наверное глупый вопрос, но я новичок и еще не во всем разобрался. подскажите пожалуйста как можно ограничить время работы советника по времени? Я хочу выдать на 1-2 недели советник на тест. Как это прописать в коде советника? Надо чтобы он через Х времени выдал сообщение время работы советника истекло обратитесь к автору или что-то подобное
 
Yuriy Bykov #:

Как-то так, наверное:

Обычно создают свой класс диалога, наследуясь от CAppDialog. Тогда btns может быть полем этого класса. Иначе надо делать его глобальной переменной.

Проверьте ещё, что у вас правильно вычисляются координаты размещения очередной кнопки - в их вычислении, по идее, как-то должен участвовать индекс i.

Все работает! Огромное спасибо!

 
Lucum #:
наверное глупый вопрос, но я новичок и еще не во всем разобрался. подскажите пожалуйста как можно ограничить время работы советника по времени? Я хочу выдать на 1-2 недели советник на тест. Как это прописать в коде советника? Надо чтобы он через Х времени выдал сообщение время работы советника истекло обратитесь к автору или что-то подобное

Забавно, но ладно.

Самый простой вариант, добавить в OnTick() такой код.

   if(TimeLocal() >= D'2024.03.15 00:00:00')
     {
      MessageBox("Без денег, торговать не буду.\nДай денег.\nПобольше.");
      ExpertRemove();
     }
 
А есть возможность запретить двигать панель созданную с помощью библиотеки <Controls\Dialog.mqh>??
 
Aleksandr Slavskii #:

Забавно, но ладно.

Самый простой вариант, добавить в OnTick() такой код.

спасибо 

 

Здравствуйте. Индикатор находит сигнал. Возможно ли написать код, чтобы индикатор мог ставить стрелки на тех барах, high которых не был пробит, где первая стрелка будет основной сигнал, а по следующие стрелки будут ставиться, если high основного сигнала(бара) не был пробит? Если это возможно, могли бы поделиться кодом

Бары

Хотелось бы, чтоб это выглядело так 

 

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

Ну или хотя бы как узнать имя этой линии, до того как она будет отпущена.

Ещё может кто знает почему при скрытии прямоугольника с последующем отображением, пропадает выделенность линии. 

Причём происходит это однократно.

//+------------------------------------------------------------------+
int OnInit()
  {
   ChartSetInteger(0, CHART_EVENT_MOUSE_MOVE, true);

   ObjectCreate(0, "_Rectangle", OBJ_RECTANGLE_LABEL, 0, 0, 0);
   ObjectSetInteger(0, "_Rectangle", OBJPROP_XDISTANCE, 150);
   ObjectSetInteger(0, "_Rectangle", OBJPROP_YDISTANCE, 50);
   ObjectSetInteger(0, "_Rectangle", OBJPROP_XSIZE, 200);
   ObjectSetInteger(0, "_Rectangle", OBJPROP_YSIZE, 200);
   ObjectSetInteger(0, "_Rectangle", OBJPROP_ZORDER, 1);

   ObjectCreate(0, "_Button", OBJ_BUTTON, 0, 0, 0);
   ObjectSetInteger(0, "_Button", OBJPROP_XDISTANCE, 200);
   ObjectSetInteger(0, "_Button", OBJPROP_YDISTANCE, 135);
   ObjectSetInteger(0, "_Button", OBJPROP_XSIZE, 100);
   ObjectSetInteger(0, "_Button", OBJPROP_YSIZE, 30);
   ObjectSetInteger(0, "_Button", OBJPROP_ZORDER, 2);

   ChartRedraw();
   EventSetMillisecondTimer(100);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0, "_");
   EventKillTimer();
  }
//+------------------------------------------------------------------+
void OnTimer()
  {
// выводим прямоугольник и кнопку на передний план
   ObjectSetInteger(0, "_Rectangle", OBJPROP_TIMEFRAMES, OBJ_NO_PERIODS);
   ObjectSetInteger(0, "_Button", OBJPROP_TIMEFRAMES, OBJ_NO_PERIODS);
   ObjectSetInteger(0, "_Rectangle", OBJPROP_TIMEFRAMES, OBJ_ALL_PERIODS);
   ObjectSetInteger(0, "_Button", OBJPROP_TIMEFRAMES, OBJ_ALL_PERIODS);
  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam)
  {
   if(id == CHARTEVENT_MOUSE_MOVE && sparam == "1")
     {
      int X = (int)lparam;
      int Y = (int)dparam;
      if(X >= 150 && X <= 150 + 200 && Y >= 50 && Y <= 50 + 200)// мыша в районе прямоугольника
        {
         //Print("Rectangle");
        }
     }
  }
//+------------------------------------------------------------------+
Причина обращения: