错误、漏洞、问题 - 页 37

 
kirill190982:
我可能会暂时忽略它,但在MQL4中,编译器并没有产生这样的注释
这是一个完全不同的问题,有很多东西是不存在的......:)
 
Interesting:

变量可能没有问题。请看我上面的帖子...

我不知道,如果你把double转换为int,肯定会有损失,如果反过来,在归一化过程中很可能会出现错误,因为第二个函数值是int类型的
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Типы char, short, int и long - Документация по MQL5
 
Interesting:

就 "用户 "事件和在同一终端上工作的几位专家向开发者提问。

我想知道我是否想把它弄好?


这个想法是这样的

在演出过程中,我们需要向 "邻近的 "专家通报一些正在发生的过程。

...

如果它是一个好主意,它可能会被完成并被格式化为一篇文章。或者把它添加到专门针对用户事件的帮助部分?

有一个关于函数EventChartCustom的 例子。

//+------------------------------------------------------------------+
//|                                            ButtonClickExpert.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
 
string buttonID="Button";
string labelID="Info";
int broadcastEventID=5000;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- создадим кнопку, для передачи пользовательских событий
   ObjectCreate(0,buttonID,OBJ_BUTTON,0,100,100);
   ObjectSetInteger(0,buttonID,OBJPROP_COLOR,White);
   ObjectSetInteger(0,buttonID,OBJPROP_BGCOLOR,Gray);
   ObjectSetInteger(0,buttonID,OBJPROP_XDISTANCE,100);
   ObjectSetInteger(0,buttonID,OBJPROP_YDISTANCE,100);
   ObjectSetInteger(0,buttonID,OBJPROP_XSIZE,200);
   ObjectSetInteger(0,buttonID,OBJPROP_YSIZE,50);
   ObjectSetString(0,buttonID,OBJPROP_FONT,"Arial");
   ObjectSetString(0,buttonID,OBJPROP_TEXT,"Кнопка");
   ObjectSetInteger(0,buttonID,OBJPROP_FONTSIZE,10);
   ObjectSetInteger(0,buttonID,OBJPROP_SELECTABLE,0);
 
//--- создадим метку для вывода информации
   ObjectCreate(0,labelID,OBJ_LABEL,0,100,100);
   ObjectSetInteger(0,labelID,OBJPROP_COLOR,Red);
   ObjectSetInteger(0,labelID,OBJPROP_XDISTANCE,100);
   ObjectSetInteger(0,labelID,OBJPROP_YDISTANCE,50);
   ObjectSetString(0,labelID,OBJPROP_FONT,"Trebuchet MS");
   ObjectSetString(0,labelID,OBJPROP_TEXT,"Нет информации");
   ObjectSetInteger(0,labelID,OBJPROP_FONTSIZE,20);
   ObjectSetInteger(0,labelID,OBJPROP_SELECTABLE,0);
 
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   ObjectDelete(0,buttonID);
   ObjectDelete(0,labelID);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
 
  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//--- проверим событие на нажатие кнопки мышки
   if(id==CHARTEVENT_OBJECT_CLICK)
     {
      string clickedChartObject=sparam;
      //--- если нажатие на объекте с именем buttonID
      if(clickedChartObject==buttonID)
        {
         //--- состояние кнопки - нажата кнопка или нет
         bool selected=ObjectGetInteger(0,buttonID,OBJPROP_STATE);
         //--- выведем в лог отладочное сообщение
         Print("Кнопка нажата =",selected);
         int customEventID; // номер пользовательского события для отправки
         string message;    // сообщение для отправки в событии
         //--- если кнопка нажата
         if(selected)
           {
            message="Кнопка нажата";
            customEventID=CHARTEVENT_CUSTOM+1;
           }
         else // кнопка не нажата
           {
            message="Кнопка отжата";
            customEventID=CHARTEVENT_CUSTOM+999;
           }
         //--- отправим пользовательское событие "своему"графику
         EventChartCustom(0,customEventID-CHARTEVENT_CUSTOM,0,0,message);
         //--- отправим сообщение всем открытым графикам
         BroadcastEvent(ChartID(),0,"Broadcast Message");
         //--- отладочное сообщение
         Print("Отправлено событие с ID =",customEventID);
        }
      ChartRedraw();// принудительно перерисуем все объекты на графике
     }
 
//--- проверим событие на принадлежность к пользовательским событиям
   if(id>CHARTEVENT_CUSTOM)
     {
      if(id==broadcastEventID)
        {
         Print("Получили широковещательное сообщение от графика с id="+lparam);
        }
      else
        {
         //--- прочитаем текстовое сообщение в событии
         string info=sparam;
         Print("Обрабатывается ПОЛЬЗОВАТЕЛЬСКОЕ событие с ID =",id);
         //--- выведем сообщение в метке
         ObjectSetString(0,labelID,OBJPROP_TEXT,sparam);
         ChartRedraw();// принудительно перерисуем все объекты на графике
        }
     }
  }
//+------------------------------------------------------------------+
//| послать широковещательное сообщение всем открытм графикам        |
//+------------------------------------------------------------------+
void BroadcastEvent(long lparam,double dparam,string sparam)
  {
   int eventID=broadcastEventID-CHARTEVENT_CUSTOM;
   long currChart=ChartFirst();
   int i=0;
   while(i<CHARTS_MAX)          // у нас наверняка не больше CHARTS_MAX открытых графиков
     {
      EventChartCustom(currChart,eventID,lparam,dparam,sparam);
      currChart=ChartNext(currChart); // на основании предыдущего получим новый график
      if(currChart==0) break;  // достигли конца списка графиков
      i++;                     // не забудем увеличить счетчик
     }
  }
//+------------------------------------------------------------------+

试试吧。

 
kirill190982:
我不知道,如果我们将double转换为int,肯定会有损失,但如果反过来,在归一化过程中很可能会出现错误,因为函数的第二个值是int类型 的。

如果你把int 写成double,一切都会正常处理,编译器只是丢弃小数部分(根据规则)。

然而,在相反的情况下,编译器开始怀疑,并对可能出现的问题发出警告(在它看来是这样)。

由于我们都知道这样一个事实,当你不得不在这种情况下进行创作时,我们 "建议他 "这样做。:)

PS

也许开发者将来会关闭REAL警告,然后像MQL4那样,编译器就不会再对各种琐事大喊大叫了......

 
Interesting:

就 "用户 "事件和在同一终端上工作的几位专家向开发者提问。

所以我想问,我到底要不要把它弄好?


这里有一个想法。

在播放过程中,我们需要告知 "邻近的 "专家顾问所发生的一些过程。

例如,应首先监测以下过程。

1.专家锁定。

2.卸载专家顾问。

3.终止交易业务。

4.恢复交易业务。


实施

I.创建4个事件的标识符。

1 -CHARTEVENT_CUSTOM+1//启动专家顾问。

2 -CHARTEVENT_CUSTOM+2//卸载专家顾问。

3 - CHARTEVENT_CUSTOM+3 //停止交易操作

4 -CHARTEVENT_CUSTOM+4//重新开始交易业务


II.追踪事件

当某种情况发生时,专家顾问使用 EventChartCustom生成一个SPARTEVENT信息

同时,专家顾问在 sparam中写下 评论(其名称和事件的类型,或其他信息) ,并lparam 自己的图表标识符

其他图表上的专家顾问(如果他们能正确识别事件的性质)将响应这个EA。


PS

如果想法很好,可能会完成并形成文章。或者把它添加到专门用于自定义事件的帮助部分?

而且我不认为同时使用几个EA有什么意义,特别是如果你玩几个工具--你可以用一个EA轻松完成,修改、开仓和平仓也可以由一个EA完成,指标分析也是如此。
 
Rosh:

EventChartCustom 函数中,有一个例子。

试试吧。

是的,我以前见过这个例子(我甚至不知道是多久以前)。我想问问我的想法是否正确,在实施方面是否有趣。

PS

如果它不适合在帮助中,那么也许有人会同意完善它,并写一篇关于这种事件应用的文章。

如果你把这一切总结起来,在我看来,这将是一篇非常有趣的文章。

不幸的是,我没有时间来处理它......

 
kirill190982:
我不认为同时使用几个EA有什么意义,特别是如果你玩几个符号--你可以用一个EA轻松完成,修改、开仓和平仓也可以用一个EA完成,指标的分析也可以用。

总有一种感觉,特别是由于不是所有的EA都是先验的多货币(基于MQL4的经验)。

这意味着,对于初学者和许多曾经从事机械交易的人来说,正确组织多币种的并不容易...


只有上帝知道,如果有人想在一个账户上执行,比如说2-3份MACD样本,会发生什么。


除了情况不同外,其他专家顾问可能会扮演次要角色,接收来自第一个专家顾问的订单。

另外,当其他EA("邻居")不进行交易,而只是处理数据或做某些工作时,这种变体将被接受。

同样,类似的事情也可以在指数和EA之间的沟通中实现(用某种方法)。

PS

这就是为什么我建议研究这个问题,如果有经验的程序员愿意写一篇文章。如果开发者自己能在这个问题上投入一些时间,我将特别高兴。

我认为有足够的材料来写一篇以上的文章......

 
Interesting:
............

不幸的是,我没有时间去做......。

我们理解。太多的时间花在评论每个人和每件事上....。
 
AM2:

我在看vMA和Close[]。在Wotch,它的计数很好。我也试过这样做。

我再次得到另一个错误。也许有另一种方法来计算简单移动平均线。 或者把手柄iMA和 CopyBuffer 放在它应该在的地方?

1.在wotcha中,你应该指定Close数组的名称(你将只看到一般信息)或Close[1], Close[2],..., Close[i]的具体值。

2.你无法看到你的代码是如何填充mrate数组的

3.看看标准库 MovingAverages.mqh--那里会有一个MA计算的例子。

 
joo:
我们理解。太多的时间花在评论每个人和每件事上....。


也有足够的时间进行评论,并实施某些想法。

只是我可能不会认真处理这个问题,以至于无法覆盖整个领域(而且我已经在处理这个想法的一些应用,纯粹是为了自己)。

但无论如何,我可能不会在这个问题上写文章(出于各种原因)......