初学者的问题 MQL5 MT5 MetaTrader 5 - 页 982

 

有以下代码,它在图表上绘制了一个输入框,文本 "获利 "被排列在中心位置。

//+------------------------------------------------------------------+
//| 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");
  }
//+------------------------------------------------------------------+

在实时运行时,它能正常工作。

策略测试器中,由于某种原因,排列在左边。


在MT4中,该代码在实时和策略测试器中都能正常工作。我只在MT5中看到这种技巧...

问题可能是什么?

 
Oleg Remizov:

有以下代码,它在图表上绘制了一个输入框,文本 "获利 "被排列在中心位置。

在实时运行时,它能正常工作。

策略测试器中,由于某种原因,排列在左边。


在MT4中,该代码在实时和策略测试器中都能正常工作。我只在MT5中看到这种技巧...

问题可能是什么?

在MT5的测试器中,已经在论坛上多次提到。

 

大家下午好。先生们,请教如何处理同时按下键盘按钮和鼠标按钮的情况。例如,按下按钮会画出一个物体,同样的+鼠标左键会画出另一个物体。但事实证明,按下键盘按钮和鼠标按钮时,会画出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.为什么要使用::(范围解析) 操作符?

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 |=代码 "是做什么的?(我知道这个操作符是按位法 "或",与"_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 есть множество полезных функций, которые могут пригодиться пользователю, независимо от его стиля торговли, включая и возможность доступа к ленте оперативных новостей. Это дает трейдеру торговый контекст, значимость которого сложно переоценить, ведь он может оказать влияние на рынки. Единственное ограничение — объем...
 
你好,在MT4的基础上有一个顾问,可以在测试器中作为手动交易 模拟器使用。这不是一个糟糕的模拟器。我想问一个问题,是否有可能使这样的训练器EA多机化?我可以在MT4或MT5上使用它吗?
 
bahtiyar:
你好,在MT4的基础上有一个顾问,可以在测试器中作为手动交易模拟器使用。这不是一个糟糕的模拟器。我想问一个问题,是否有可能 使 这样的训练器EA多机化?在MT4上还是MT5上?

你可以。对于MT5,它也是多货币的,但有一些限制。不幸的是,该测试器不能与图形一起工作。更确切地说,它不允许手动编辑图形对象。

 
Alexey Viktorov:

你可以。而对于mt5来说,它也是多币种的,但有一些限制。不幸的是,该测试器不能与图形一起工作。更准确地说,它不允许手动编辑图形对象。

谢谢你的回答,阿列克谢!你已经回答了你能做什么。我想澄清我的问题,是否有可能使可视化,以便我可以分析几个时间段,因为测试器将被用作手动交易 模拟器? 如果是这样,我一般怎么做呢7
 
bahtiyar:
谢谢你的回答,阿列克谢!你已经回答了可以做什么。我想澄清我的问题。 是否有可能使可视化,以便我可以分析几个时间段,因为测试器将被用作手动交易模拟器。 如果可能的话,一般情况下如何做到这一点呢7

不可能

 
bahtiyar:
谢谢你的回答,阿列克谢!你已经回答了可以做什么。我想修正我的问题,我可以在可视化中分析几个时间段吗,因为测试器将被用作手动交易的模拟器?
维塔利-穆齐琴科

不可能

你不能在MT4上这样做。你可以调整图表,以便你可以通过历史查看到必要的深度。

在MT5上,测试器加载所有符号和所有从程序中访问的TF,如果代码中使用了指标,也会加载。

但无论如何,你需要一个特殊的指标来 "跳 "过图表,这样你就不会想去交易。或者说,速度必须与真实的速度相差不大。

 

元编辑器配置中的优化标志对加快程序执行 速度有多大帮助?我有一些缓慢的测试...这个 "优化 "有多大作用?

不幸的是,我不能使用它,因为在向CDictionary对象添加实例时出现了崩溃。

原因: