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

 
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;
      }
   }
}

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

 
Vladimir Karputov:

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

А  так

//---------------------------------------  

   if(id==CHARTEVENT_MOUSE_MOVE)
     {
      ChartXYToTimePrice(0,int(lparam),int(dparam),window,time,price);
      Comment("price = ",DoubleToString(price,5),"   time = ",TimeToString(time,TIME_DATE|TIME_MINUTES));
     }

//---------------------------------------
 
Дано уже доступна тиковая история для тестера в МТ-5, а high свечей до сих пор считается по цене bid. Было бы хорошим приимуществом перед МТ-4, high считать по цене ask и так рисовать свечи. Даже на 5-ти минутках спред около 1-го АТР, а то и все 1,5! А какой гемор, добавлять спред ко всем хаям в коде советников! Это - предложение по улучшению, а вот вопрос: В структуре MqlRates есть переменная high. По какой цене она заполняется. Мне кажется, что совсем не по максимальной, как написано в мануале. Может кто знает, а то лень писать советника для исследования.
 

Уважаемые, что это такое и где искать ошибку?

2019.05.12 11:01:09.743 Core 6  genetic pass (52, 487) tested with error "some error after pass finished" in 0:00:00.005
Может это быть связано с TesterStop() ? Хотя нет, ошибка же после прохода...
 

Здравствуйте.
Подскажите, пожалуйста, можно ли написать на MQL5 индикатор с уведомлением в Телеграм (боту), не используя сторонние сервисы, а только MQL5+Telegram API?

Или же для этого нужно писать советник? Спрашиваю, потому что как то пытался для MT4 писать подобное, кое-как получилось только с советником.


И второй вопрос.
Насколько сложно вообще написать индикатор/советник, который будет сигнализировать об определенном паттерне, который мне нужен?
Например, две медвежьи свечи и после них три бычьи?

Я понимаю это примерно так (грубо):
Цена закрытия < цены открытия = медвежья свеча
Цена закрытия> цены открытия = бычья свеча

Если не получится самому, то, наверное, закажу за деньги))

Благодарю за внимание!

 

Возможно ли как то скомпилировать код в ex из сторонней программы?

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

 
Roman Sharanov:

Возможно ли как то скомпилировать код в ex из сторонней программы?

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

Да, см. справку по MetaEditor: Добро пожаловать в алготрейдинг / Интеграция с другими IDE / Компиляция MQL-программ в других средах разработки
 

Может кто-нибудь знает? Сижу над переносом данных из таблиц в Excel в скрипты MQL5. Всё вроде ничего, но в EXcel десятичные данные  с запятой вместо точки.

Вопрос: Существует ли механизм в MQL скриптом забирать данные из Екселя вместе с запятой и менять на точку, или лучше в самом Екселе менять на точку?

Как скриптом точечно забирать данные из Екселя из тех ячеек из каких мне нужно, а то мне приходится их выстраивать в столбик, писать макросы и т.д? Среди данных есть и даты и целые и десятичные. До чего неудобный этот Ексель или я просто непривык ещё...

Буду рад любому совету...

 
Vladimir M.:

Может кто-нибудь знает? Сижу над переносом данных из таблиц в Excel в скрипты MQL5. Всё вроде ничего, но в EXcel десятичные данные  с запятой вместо точки.

Вопрос: Существует ли механизм в MQL скриптом забирать данные из Екселя вместе с запятой и менять на точку, или лучше в самом Екселе менять на точку?

Как скриптом точечно забирать данные из Екселя из тех ячеек из каких мне нужно, а то мне приходится их выстраивать в столбик, писать макросы и т.д? Среди данных есть и даты и целые и десятичные. До чего неудобный этот Ексель или я просто непривык ещё...

Буду рад любому совету...

В MQL есть функция замены символа в строке. Прочесть как строку

int  StringReplace(
   string&         str,              // строка, в которой будет осуществляться замена
   const string    find,             // искомая подстрока НАЙТИ ЗАПЯТУЮ ","
   const string    replacement       // подстрока, которая будет вставлена в найденные места ЗАМЕНИТЬ НА ТОЧКУ "."
   );

и перевести в тип double

Документация по MQL5: Строковые функции / StringReplace
Документация по MQL5: Строковые функции / StringReplace
  • www.mql5.com
Строковые функции / StringReplace - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5