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

 
Vladimir Karputov:

没有任何MQL5函数会给出鼠标坐标。但你可以使用以下解决方案:根据附件文件--在OnChartEvent中加入保存最后的鼠标坐标,然后,当点击时,输出这些坐标。

明白了,谢谢

 

ebjects也有一些令人困惑的问题。

有一个类可以根据输入参数创建一个标签和一个矩形。

有一种状态--通过矩形的颜色开启/关闭。

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

//---------------------------------------
 
达诺在MT-5中已经为测试者提供了tick历史,但高烛光仍按投标价格计算。对MT-4来说,在卖出价上设置高位数并以这种方式画出蜡烛图是一个很好的优势。即使在5分钟内,差价也约为1个APR,甚至是1.5个APR!而且,在专家顾问代码中为所有的涨价添加一个价差,这是多么痛苦的事情啊!这是一个改进的建议,但这里有一个问题:在MqlRates结构 中有一个变量高。以什么价格填补。在我看来,它并不像手册中写的那样处于最高价格。也许有人知道,我太懒了,懒得写个EA来研究。
 

亲爱的先生们,这是什么情况,在哪里可以找到错误?

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+Telegram API,编写一个带有通知Telegram(机器人)的MQL5指标?

或者我需要为此写一个专家顾问?我问这个问题,我试图为MT4写一个这样的EA,结果不知为何只能用专家顾问。


而第二个问题。
写一个指标/顾问,对我需要的某种模式发出信号有多难?
例如,两个看跌的蜡烛图之后是三个看涨的蜡烛图?

我的理解是这样的(大概)。
收盘价<开盘价=看跌的蜡烛
收盘价>开盘价=看涨的蜡烛图

如果我不能自己做,我可能会为了钱而订购))

谢谢您的关注!

 

是否有可能从第三方程序将代码编译成ex

我正在用Java创建某种机器人构造函数,我希望用户能得到编译后的代码,而不是访问源代码。

 
Roman Sharanov:

是否有可能从第三方程序将代码编译成ex

我正在用Java创建某种机器人构造函数,我希望用户不能访问源代码,但可以得到编译后的代码。

是的,见MetaEditor的帮助:欢迎来到艾美达/与其他IDE整合/ 在其他IDE中编译MQL程序
 

有谁知道吗?我正在努力将数据从Excel电子表格转移到MQL5脚本。一切看起来都很好,但EXcel的小数数据是用逗号而不是点。

问题:在MQL中是否有一种机制可以让脚本从Excel中获取数据并将其改为小数点,或者最好是在Excel本身中将其改为小数点?

如何从Excel中获取我需要的单元格中的数据,因为我需要将它们排成一列,编写宏,等等。在这些数据中,既有日期,也有整数和小数。这个Excel太不方便了,或者说我还不习惯......。

我很乐意听取任何建议...

 
Vladimir M.:

有谁知道吗?我正在努力将数据从Excel电子表格转移到MQL5脚本。一切看起来都很好,但EXcel的小数数据是用逗号而不是点。

问题:在MQL中是否有一种机制可以让脚本从Excel中获取数据并将其改为小数点,或者最好是在Excel本身中将其改为小数点?

如何从Excel中获取我需要的单元格中的数据,因为我需要将它们排成一列,编写宏,等等。在这些数据中,既有日期,也有整数和小数。这个Excel太不方便了,或者说我还不习惯......。

我很乐意听取任何建议...

MQL在字符串中具有一个字符替换功能。读取为字符串

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

并将其转换为双倍类型

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