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

 
Evgeny Dyuka:

это как? должен быть какой то смысл?

Решите задачу на MQL4, а затем примените библу.

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

 
fxsaber:

Решите задачу на MQL4, а затем примените библу.

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

да, точно, супер библа, забыл про нее, спасибо
 
Alexey Viktorov:

Это не ответ на мой вопрос. Точней сказать реплику. Тогда ставлю свою мысль в виде вопроса: Зачем советнику индикатор на графике?

Если надо отказаться от неиспользуемого хендла индикатора, то для этого есть другая функция. А сам-то индикатор на графике для каких целей?

Для использования данных от этого индикатора

CopyBuffer(handle_ind,0,0,1,ind);


Во время работы советник должен удалять подокна с определёнными индикаторами, добавляя другие - так же для использования их выходных данных. Хэндл удалять незачем.

Оказывается ChartIndicatorDelete не работает в тестере стратегий, а именно там я и проверял это удаление. Странно что об этом ничего не сказано в хелпе. Или я что-то упустил?

 
Anzhela Sityaeva:

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

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

Дело в том, что оба представленных варианта означают одно и то же.

Например, есть два выражения:

1. Идите налево.
2. Идите в противоположную сторону от "направо".

Понятно, что эти выражения имеют один и тот же смысл, хотя состоят из неодинаковых слов.

--

Оба интересующих Вас варианта  верны, хотя и записаны по-разному.

 

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

В качестве альтернативы рассматриваю MessageBox(), но в справке рекомендуют использовать её только от безысходности, тк останавливаются все потоки.

 

не плохо бы иметь команду в коде для очистки лога во вкладке Эксперты

или хотя бы кнопку D назначить на Очистить, есть же там C и даже бесполезные A и G

почему нет самой нужной D - "Очистить"? или Удалить 

 
Подскажите, как без клика мышью получить координаты под курсором по нажатию клавиши?
 
Roman Sharanov:
Подскажите, как без клика мышью получить координаты под курсором по нажатию клавиши?

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

Файлы:
 
Vladimir Karputov:

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

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

 

Еще какая то непонятная проблема с эвентами.

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

Есть состояние - вкл/выкл по цвету прямоугольника.

//+------------------------------------------------------------------+
//|                                                CreateLabels.mqh |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
class CreateKeyStateLabel{
private:
   string label_text;
   int x;
   int y;
   bool _state;
public:
   CreateKeyStateLabel(string label_text, int x, int y){
      this.label_text = label_text;
      this.x = x;
      this.y = y;
      _state = false;
      ObjectCreate(0,label_text+"_icon", OBJ_RECTANGLE_LABEL, 0, 1, 1);
      ObjectSetInteger(0,label_text+"_icon", OBJPROP_XDISTANCE, x);
      ObjectSetInteger(0,label_text+"_icon", OBJPROP_YDISTANCE, y);
      ObjectSetInteger(0,label_text+"_icon", OBJPROP_XSIZE, 15);
      ObjectSetInteger(0,label_text+"_icon", OBJPROP_YSIZE, 15);
      ObjectSetInteger(0,label_text+"_icon", OBJPROP_BGCOLOR, clrDarkGray);
      
      ObjectCreate(0,label_text+"_label",OBJ_LABEL,0,1,1);
      ObjectSetInteger(0,label_text+"_label", OBJPROP_XDISTANCE, x+17);
      ObjectSetInteger(0,label_text+"_label", OBJPROP_YDISTANCE, y);
      ObjectSetInteger(0,label_text+"_label", OBJPROP_COLOR, clrBlack);
      ObjectSetString(0,label_text+"_label", OBJPROP_TEXT, label_text);
   }
   
   ~CreateKeyStateLabel(){
      ObjectDelete(0,label_text+"_icon");
      ObjectDelete(0,label_text+"_label");
   }
   
   void invert(){
      if(_state){
         _state = false;
         ObjectSetInteger(0,label_text+"_icon", OBJPROP_BGCOLOR, clrDarkGray);
      }else{
         _state = true;
         ObjectSetInteger(0,label_text+"_icon", OBJPROP_BGCOLOR, clrDarkGreen);
      }
   }
   
   bool state(){
      return _state;
   }
   
};

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


//+------------------------------------------------------------------+
//|                                                       Events.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#include <CreateLabels.mqh>
#define X_DIST 10
#define Y_DIST 20

CreateKeyStateLabel *tilda = new CreateKeyStateLabel("Tilda",X_DIST,Y_DIST);


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   delete tilda;
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long   &lparam, const double &dparam, const string &sparam){
   switch(id){
      case CHARTEVENT_KEYDOWN:{
         if(lparam == "38") tilda.invert();
         break;
      }
   }
}

Вот увидел, что работает через раз, как сделать чтобы было четко на каждое нажатие переключение?