MT4专家贸易小组 - “OBJ_RECTANGLE_LABEL”

时间:2016-10-03 19:16:03

标签: algorithmic-trading mql4 metatrader4

MetaTrader4贸易专家组顾问顾问 如何将某些 OBJ_RECTANGLE_LABEL 与其他单个对象相关联?

2 个答案:

答案 0 :(得分:2)

间接链接

没有直接支持将一些GUI对象链接到另一个GUI对象。

这并不意味着,它不可能像这样工作。

在一个Augmented Trader UI工具中,我需要同时拥有所有GUI组件和一些计算值在某些类似逻辑下运行(保留所有线条,矩形,文本标签和热图颜色,在一些常见UI下) - 控制逻辑)。所有实时交互式GUI编排都被锁定在一些有效的用户 - 机器交互中,用户可以使用一组UI控件对象移动,其中一些可以自由修改,而另一些则受限制(使用增强现实控制器)只是垂直或水平移动或刚刚锁定从布林带边缘的切线开始在这样的地方,UI控制对象的垂直线被移动用户等

Live-interactive-GUI解决方案很简单:

除了 [专家顾问] 创建并运行另一个流程之外, [脚本] 将是负责GUI对象自动化。在此脚本中,使用对象中的一些只读值,例如蓝色垂直线,作为 SENSOR_x1 ,GUI组合的输入。

如果有人或某物移动此蓝色垂直线,则脚本中的事件观察循环将检测到 SENSOR_x1 的新值。 - 通过添加 SENSOR_x1_delta = SENSOR_x1 - SENSOR_x1_previous; 的刚观察/检测到的运动来处理所有UI布局方案,这样,可以在中更新运动检测器循环[脚本] ,追逐所有 SENSOR_* 实际值并宣传检测到的 SENSOR_*_delta -s到GUI布局组合中使用的所有对象。

最后,在实时交互式GUI中对增强现实进行重新处理时,需要使用一些强制执行的 WindowRedraw(); 指令来暂停屏幕更新。 / p>

来自PoC演示者的代码

enter image description here

有人可能会注意到,代码采用pre New - MQL4.56789语法,使用一些允许的变量命名约定,现在不再允许了。 Event-Monitor功能的范围(一个独立的功能,针对处理MVC框架的所有三个角落的最大速度/最小延迟进行了优化(模型 -is Live-GUI项目特定) ,可视化 - 是特定于Live-GUI扩充,控制器 - 灵活且由主要构建块组成的有限状态机,并通过<实现< "object.method"中的强> switch(){} 调用。循环采样率可以很好地降低到几十毫秒,因此Live-GUI非常强大且可以平稳地浮动在Trader的桌面上。

答案 1 :(得分:1)

这不是最佳方式,但示意性地显示了该做什么。

string      mainObjectNAME,
       dependantObjectNAME;                     // dependant - your obj label

void OnChartEvent( const int     id,
                   const long   &lparam,
                   const double &dparam,
                   const string &sparam
                   ){
   if (  id == CHARTEVENT_OBJECT_DRAG
      || id == CHARTEVENT_OBJECT_ENDEDIT
         ){
      if (  StringCompare( sparam, mainObjectNAME ) == 0 ){
            datetime time1  = (datetime) ObjectGetInteger( 0,      mainObjectNAME, OBJPROP_TIME1 );
            double   price1 =            ObjectGetDouble(  0, dependantObjectNAME, OBJPROP_PRICE1 );
            if ( !ObjectMove( 0, dependantObjectNAME, 0, time1, price1 ) )
                  Print( __LINE__,
                         "failed to move object ",
                         dependantObjectNAME
                         );
      }
      ChartRedraw();
   }
}

如果您通过任何已识别的方式修改mainObject(通过拖动或传递其他参数) - 那么移动依赖对象(在您的情况下为 OBJ_RECT_LABEL ObjectMove()ObjectSet()个函数。