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

 

Имеется следующий код, который рисует на графике поле ввода с текстом "Take Profit" с выравниванием по центру:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   Edit();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   EditDel();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+ 
//| Создает объект "Поле ввода"                                      | 
//+------------------------------------------------------------------+ 
void EditCreate(ENUM_BASE_CORNER corner,string name,int x,int y,int width,int height,string text,
                int font_size,ENUM_ALIGN_MODE align,bool read_only,color back_clr)
  {
   long cid=ChartID();
   int subWind=0;
   string font="Consolas";
   color text_color=clrBlack;
   color border_clr=clrDimGray;
   bool back=false;
   bool selectable=false;
   bool selected=false;
   bool hidden=true;
   long zorder=0;
   if(ObjectFind(cid,name)==-1)
     {
      ObjectCreate(cid,name,OBJ_EDIT,subWind,0,0);
      ObjectSetInteger(cid,name,OBJPROP_XDISTANCE,x);
      ObjectSetInteger(cid,name,OBJPROP_YDISTANCE,y);
      ObjectSetInteger(cid,name,OBJPROP_XSIZE,width);
      ObjectSetInteger(cid,name,OBJPROP_YSIZE,height);
      ObjectSetString(cid,name,OBJPROP_TEXT,text);
      ObjectSetString(cid,name,OBJPROP_FONT,font);
      ObjectSetInteger(cid,name,OBJPROP_FONTSIZE,font_size);
      ObjectSetInteger(cid,name,OBJPROP_ALIGN,align);
      ObjectSetInteger(cid,name,OBJPROP_READONLY,read_only);
      ObjectSetInteger(cid,name,OBJPROP_CORNER,corner);
      ObjectSetInteger(cid,name,OBJPROP_COLOR,text_color);
      ObjectSetInteger(cid,name,OBJPROP_BGCOLOR,back_clr);
      ObjectSetInteger(cid,name,OBJPROP_BORDER_COLOR,border_clr);
      ObjectSetInteger(cid,name,OBJPROP_BACK,back);
      ObjectSetInteger(cid,name,OBJPROP_SELECTABLE,selectable);
      ObjectSetInteger(cid,name,OBJPROP_SELECTED,selected);
      ObjectSetInteger(cid,name,OBJPROP_HIDDEN,hidden);
      ObjectSetInteger(cid,name,OBJPROP_ZORDER,zorder);
      ChartRedraw(cid);
     }
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Edit()
  {
   long cid=ChartID();
   if(ObjectFind(cid,"edit tp")<0)
     {
      EditCreate(CORNER_LEFT_UPPER,"edit tp",50,50,150,20,"Take Profit",12,ALIGN_CENTER,true,clrBeige);
     }
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void EditDel()
  {
   long cid=ChartID();
   ObjectDelete(cid,"edit tp");
  }
//+------------------------------------------------------------------+

При запуске в режиме реального времени работает корректно:

А в тестере стратегий выравнивание почему-то происходит по левому краю.


В МТ4 код работает корректно как в реалтайме, так и в тестере. Такие фокусы наблюдаю только в МТ5...

В чём может быть дело?

 
Oleg Remizov:

Имеется следующий код, который рисует на графике поле ввода с текстом "Take Profit" с выравниванием по центру:

При запуске в режиме реального времени работает корректно:

А в тестере стратегий выравнивание почему-то происходит по левому краю.


В МТ4 код работает корректно как в реалтайме, так и в тестере. Такие фокусы наблюдаю только в МТ5...

В чём может быть дело?

В тестере МТ5, уже много раз на форуме об этом говорили.

 

Добрый всем день. Господа, подскажите как правильно обработать одновременное нажатие кнопки клавы и кнопки мыши. Например при нажатии кнопки рисуется объект, а при нажатии тойже кнопки + левой кнопки мыши рисовался бы другой объект. А получается что при нажатии кнопки клавы и мышки рисуются 2 объекта.

if(lparam==49)
 {
 ObjectCreate(0,"line",OBJ_TREND,0,time1,price1,time1+86400,price1);
 ChartRedraw(0);
 }
if(lparam==49 &&В MouseK==1)
 {
 ObjectCreate(0,"Marg",OBJ_LABEL,0,0,0);
 ObjectSetInteger(0,"Marg",OBJPROP_XDISTANCE,280); 
 ObjectSetInteger(0,"Marg",OBJPROP_YDISTANCE,20); 
 ChartRedraw(0);
 }  
 

Я работаю со следующей статей:

https://www.mql5.com/ru/articles/4149

и в коде встретил пару моментов которые не понимаю, объясните смысл пожалуйста

1. Зачем используется оператор :: (scope resolution)

void OnStart()
  {
//---
   Test();
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Test                                                             |
//+------------------------------------------------------------------+
bool Test()
  {

   string pStream;
   string sources_filename="Websorce.txt";

   int hFile,iStringSize;

// read file contents 
   hFile=::FileOpen(sources_filename,FILE_TXT|FILE_READ|FILE_UNICODE);
   if(hFile==INVALID_HANDLE)
     {
      ::Print("error opening file "+sources_filename);
      return(false);
     }

   while(!::FileIsEnding(hFile))
     {


2.   Что делает эта строчка кода "_errCode |= code"  ? (я знаю, что оператор этот побитный "или" тоже самое, что "_errCode =_errCode |code")


class JSONParser {
    private:
        int _pos;
        ushort _in[];
        int _len;
        string _instr;
        int _errCode;
        string _errMsg;
      

        void setError(int code=1,string msg="unknown error") {
          string _str = NULL;
            _errCode |= code;
Создание пользовательской новостной ленты в MetaTrader 5
Создание пользовательской новостной ленты в MetaTrader 5
  • www.mql5.com
В терминале MetaTrader 5 есть множество полезных функций, которые могут пригодиться пользователю, независимо от его стиля торговли, включая и возможность доступа к ленте оперативных новостей. Это дает трейдеру торговый контекст, значимость которого сложно переоценить, ведь он может оказать влияние на рынки. Единственное ограничение — объем...
 
здравствуйте в базе для мт4 есть советник который в терстере можно использовать как тренажер ручной торговли. Не плохой тренажер. И конечно можно запускать только на одном таймфрейме. у меня вопрос. можно ли такой советник тренажер сделать мультитаймфреймный. На мт4 или на мт5?
 
bahtiyar:
здравствуйте в базе для мт4 есть советник который в терстере можно использовать как тренажер ручной торговли. Не плохой тренажер. И конечно можно запускать только на одном таймфрейме. у меня вопрос. можно ли такой советник тренажер сделать мультитаймфреймный. На мт4 или на мт5?

Можно. А для мт5 ещё и мультивалютный, но с некоторыми ограничениями. К сожалению тестер не работает с графикой. Точнее не позволяет редактировать графические объекты вручную.

 
Alexey Viktorov:

Можно. А для мт5 ещё и мультивалютный, но с некоторыми ограничениями. К сожалению тестер не работает с графикой. Точнее не позволяет редактировать графические объекты вручную.

Спасибо за ответ Алексей! Вы ответили что можно сделать. Я хочу уточнить свой вопрос. можно ли при визуализации сделать так чтобы я мог анализировать несколько таймфреймов, ведь тестер будет использоваться как тренажер ручной торговли. если можно как в этот можно сделать в общих чертах7
 
bahtiyar:
Спасибо за ответ Алексей! Вы ответили что можно сделать. Я хочу уточнить свой вопрос. можно ли при визуализации сделать так чтобы я мог анализировать несколько таймфреймов, ведь тестер будет использоваться как тренажер ручной торговли. если можно как в этот можно сделать в общих чертах7

Никак

 
bahtiyar:
Спасибо за ответ Алексей! Вы ответили что можно сделать. Я хочу уточнить свой вопрос. можно ли при визуализации сделать так чтобы я мог анализировать несколько таймфреймов, ведь тестер будет использоваться как тренажер ручной торговли. если можно как в этот можно сделать в общих чертах7
Vitaly Muzichenko:

Никак

Никак только на МТ4. Да и то, можно так настроить графики чтобы можно было смотреть историю до нужной глубины.

На МТ5 тестер грузит все символы и все ТФ к которым есть обращение из программы вместе с индикаторами если они используются в коде. 

Но в любом случае без специального индикатора придётся "скакать" по графикам так, что торговать не захочешь. Либо скорость надо будет поставить такую, что от реала будет отличаться совсем не много.

 

Насколько флаг Optimize в конфиге метаедитора помогает увеличить скорость выполнения программы? Что-то у меня медленно тестирует... Как сильно этот Optimize влияет?

К сожалению, не могу его использовать из-за креша при добавлении экземпляров в объект CDictionary.

Причина обращения: