Mql4 在手动更改之前,如何确保每个手动绘制的矩形对象的默认颜色为黄色

Mql4 在手动更改之前,如何确保每个手动绘制的矩形对象的默认颜色为黄色,mql4,algorithmic-trading,metatrader4,mt4,Mql4,Algorithmic Trading,Metatrader4,Mt4,我知道如何通过编程设置矩形对象的颜色,如下所示。我想设置一个默认颜色,每个手动创建的矩形都设置为这样一种方式,即我可以在创建后更改颜色。例如,手动创建的每个矩形都是黄色的,但我可以将其更改为蓝色。如何做到这一点 ObjectSetInteger(0,name,OBJPROP_COLOR, clrAliceBlue); Q:如何做到这一点 ObjectSetInteger(0,name,OBJPROP_COLOR, clrAliceBlue); 总之,自从引入MetaTrader4终端以来,没

我知道如何通过编程设置矩形对象的颜色,如下所示。我想设置一个默认颜色,每个手动创建的矩形都设置为这样一种方式,即我可以在创建后更改颜色。例如,手动创建的每个矩形都是黄色的,但我可以将其更改为蓝色。如何做到这一点

ObjectSetInteger(0,name,OBJPROP_COLOR, clrAliceBlue);
Q:如何做到这一点

ObjectSetInteger(0,name,OBJPROP_COLOR, clrAliceBlue);
总之,自从引入MetaTrader4终端以来,没有办法定义和保持无限有效的
,因为MT4 GUI生态系统为下一次手动创建GUI对象的
保留了基于LRU的策略

剩下的很简单

可以运行脚本进程(或者实用程序函数,最好是在EA
OnTick(){}
-handler的非关键部分),根据用户的规则集重新绘制任何“手动”GUI对象

在下一次手动重新着色期间,每个对象必须按照您在上述行为规范中所希望的那样,在另一个唯一的
-字段前添加一个
“请勿重新着色-标志”
,这样就不会再次自动重新绘制回
CLREntendedObjectColor
-重新绘制颜色(黄色),这是在手动创建{unknown | any color}设置后进行的,符合此类政策,并在每次重新运行时尽可能保持快速和高效

for ( int anObjectORDINAL  = 0;
          anObjectORDINAL <  ObjectsTotal( MAIN_WINDOW, SUB_WINDOW_OF_INTEREST );
          anObjectORDINAL++
          ){
      string            ObjNAME = ObjectName( anObjectORDINAL );
      if (  ObjectType( ObjNAME ) != OBJTYPE_RECTANGLE
         || ObjectGet(  ObjNAME, OBJPROP_COLOR ) == clrIntendedObjectCOLOR
         || StringFind( ObjNAME, "DO-NOT-RE-COLOUR-FLAG", 0 ) > EMPTY
            ) continue;
      ObjectSet(        ObjNAME, OBJPROP_COLOR,     clrIntendedObjectCOLOR );
}
WindowRedraw(); // GUI-ops deferred WindowRedraw()
for(int-anObjectORDINAL=0;
对象纵向<对象总体(主要窗口、次要窗口);
无对象的++
){
字符串ObjNAME=ObjectName(anObjectORDINAL);
if(ObjectType(ObjNAME)!=OBJTYPE\u矩形
||ObjectGet(ObjNAME,OBJPROP_COLOR)==clrIntentendedObjectColor
||StringFind(ObjNAME,“不重新着色标记”,0)>空
)继续;
ObjectSet(ObjNAME、OBJPROP_COLOR、clrIntentendedObjectColor);
}
WindowRedraw();//GUI操作延迟WindowRedraw()
错误检测和错误处理策略都超出了这个问题的范围

一种更棘手的方法是创建一个类似DMA的对象数组(一个维护的GUI对象存储库,可以避免对
ObjectsTotal()
进行自顶向下的盲扫描),但这需要一个helper函数,该函数将帮助半手动绘制一个矩形,以便从它第一次出现时就让它处于代码的控制之下,但会在类似DMA的快速GUI重新处理中产生效果

Q:如何做到这一点

ObjectSetInteger(0,name,OBJPROP_COLOR, clrAliceBlue);
总之,自从引入MetaTrader4终端以来,没有办法定义和保持无限有效的
,因为MT4 GUI生态系统为下一次手动创建GUI对象的
保留了基于LRU的策略

剩下的很简单

可以运行脚本进程(或者实用程序函数,最好是在EA
OnTick(){}
-handler的非关键部分),根据用户的规则集重新绘制任何“手动”GUI对象

在下一次手动重新着色期间,每个对象必须按照您在上述行为规范中所希望的那样,在另一个唯一的
-字段前添加一个
“请勿重新着色-标志”
,这样就不会再次自动重新绘制回
CLREntendedObjectColor
-重新绘制颜色(黄色),这是在手动创建{unknown | any color}设置后进行的,符合此类政策,并在每次重新运行时尽可能保持快速和高效

for ( int anObjectORDINAL  = 0;
          anObjectORDINAL <  ObjectsTotal( MAIN_WINDOW, SUB_WINDOW_OF_INTEREST );
          anObjectORDINAL++
          ){
      string            ObjNAME = ObjectName( anObjectORDINAL );
      if (  ObjectType( ObjNAME ) != OBJTYPE_RECTANGLE
         || ObjectGet(  ObjNAME, OBJPROP_COLOR ) == clrIntendedObjectCOLOR
         || StringFind( ObjNAME, "DO-NOT-RE-COLOUR-FLAG", 0 ) > EMPTY
            ) continue;
      ObjectSet(        ObjNAME, OBJPROP_COLOR,     clrIntendedObjectCOLOR );
}
WindowRedraw(); // GUI-ops deferred WindowRedraw()
for(int-anObjectORDINAL=0;
对象纵向<对象总体(主要窗口、次要窗口);
无对象的++
){
字符串ObjNAME=ObjectName(anObjectORDINAL);
if(ObjectType(ObjNAME)!=OBJTYPE\u矩形
||ObjectGet(ObjNAME,OBJPROP_COLOR)==clrIntentendedObjectColor
||StringFind(ObjNAME,“不重新着色标记”,0)>空
)继续;
ObjectSet(ObjNAME、OBJPROP_COLOR、clrIntentendedObjectColor);
}
WindowRedraw();//GUI操作延迟WindowRedraw()
错误检测和错误处理策略都超出了这个问题的范围

一种更棘手的方法是创建一个类似DMA的对象数组(一个维护的GUI对象存储库,可以避免对
ObjectsTotal()
进行自顶向下的盲扫描),但这需要一个helper函数,该函数将帮助半手动绘制一个矩形,以便从它第一次出现时就让它处于代码的控制之下,但会在类似DMA的快速GUI重新处理中产生效果