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

 
Vitaly Muzichenko:

你能告诉我如何在创建对象时选择它,使它不会失去选择,在用户取消选择时也不会选择自己。在第四场比赛中很容易,但在第五场比赛中不起作用。

以前是这样,而且工作得很好。

void SetHLine(...,double p,bool sel) {
  if(ObjectFind(chart_ID,nm)!=0) {
    ObjectCreate(chart_ID,nm,OBJ_HLINE,0,0,0);
    ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);
    ...
  }
   ObjectSetDouble(chart_ID,nm,OBJPROP_PRICE,p);
}

正如你所看到的,在创建时,我们可以一次选择或不选择正在创建的对象,它将不再改变,也不会有对它的引用,但在第五个中不起作用,它创建时没有选择。

如何使mql5能够在创建时选择对象,然后在需要时手动管理 - 选择/不选择

objprop_selectable
 

嗯,是的,但图标并不显眼

void SetArrow(string nm,string tooltxt="",datetime t=0,double p=0,color col=clrRed,long type=0) {
if(ObjectFind(0,nm)!=0) {
    ObjectCreate(0,nm,type==0?OBJ_ARROW_BUY:OBJ_ARROW_SELL,0,0,0);
    ObjectSetInteger(0,nm,OBJPROP_COLOR,col);
    ObjectSetInteger(0,nm,OBJPROP_SELECTED,true);
    ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,true);
    ObjectSetInteger(0,nm,OBJPROP_HIDDEN,false);
    ObjectSetString(0,nm,OBJPROP_TOOLTIP,tooltxt);
   }
    ObjectSetDouble(0,nm,OBJPROP_PRICE,p);
    ObjectSetInteger(0,nm,OBJPROP_TIME,t);
}
 
Vitaly Muzichenko:

是的,但图标没有被突出显示。

void SetArrow(string nm,string tooltxt="",datetime t=0,double p=0,color col=clrRed,long type=0) {
if(ObjectFind(0,nm)!=0) {
    ObjectCreate(0,nm,type==0?OBJ_ARROW_BUY:OBJ_ARROW_SELL,0,0,0);
    ObjectSetInteger(0,nm,OBJPROP_COLOR,col);
    ObjectSetInteger(0,nm,OBJPROP_SELECTED,true);
    ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,true);
    ObjectSetInteger(0,nm,OBJPROP_HIDDEN,false);
    ObjectSetString(0,nm,OBJPROP_TOOLTIP,tooltxt);
   }
    ObjectSetDouble(0,nm,OBJPROP_PRICE,p);
    ObjectSetInteger(0,nm,OBJPROP_TIME,t);
}

一切都被强调了。

突出显示

附加的文件:
OBJ_ARROW.mq5  22 kb
 
Vladimir Karputov:

一切都很突出。

妈的,我排除了一个功能,又检查了另一个功能,一切正常。谢谢你!我去睡觉了)
 

我注意到一个奇怪的特点,如果你这样设置,当你创建时,线条不会被高亮显示。

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);
ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);

但如果你反其道而行之,那就不存在选择的问题。

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);
ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);

出于某种原因,替换和值会改变和值?

 
Vitaly Muzichenko:

我注意到一个奇怪的特点,如果你这样设置,当你创建时,线条不会被高亮显示。

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);
ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);

但如果是相反的情况,选择就没有问题了。

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);
ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);

出于某种原因,替换和值会改变和值?

显然,当

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel)。

最后一条命令,图表被更新

 
Vitaly Muzichenko:

我注意到一个奇怪的特点,如果你这样设置,当你创建时,线条不会被高亮显示。

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);
ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);

但如果你反其道而行之,那就不存在选择的问题。

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);
ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);

出于某种原因,替换和值会改变和值?

最初,当你创建一个对象 时,你可能将其默认属性设置为不可选择。

然后你选择它(但该对象是不可选择的),结果是什么都没有被选中。

然后你把它设置为可选择。但现在 "喝酒太晚了"......。
 

因此,这里是完整的代码。

void SetVLine(long chart_ID=0,string nm="nm",datetime tm=0,int wd=1,int st=0,color cl=clrRed,
                                             string tooltxt="",bool sel=false,bool back=false) {
if(ObjectFind(chart_ID,nm)<0) {
    ObjectCreate(chart_ID,nm,OBJ_VLINE,0,tm,0);
    ObjectSetInteger(chart_ID,nm,OBJPROP_TIME,tm);
    ObjectSetInteger(chart_ID,nm,OBJPROP_BACK,back);
    ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);
    ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);
  // ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);
    ObjectSetString(chart_ID,nm,OBJPROP_TOOLTIP,tooltxt);
    ObjectSetInteger(chart_ID,nm,OBJPROP_COLOR,cl);
    ObjectSetInteger(chart_ID,nm,OBJPROP_WIDTH,wd);
    ObjectSetInteger(chart_ID,nm,OBJPROP_STYLE,st);
   }
}

是的,在所有对象类型上都仔细检查过,你必须先放"可 选择",然后放"选择"。

谢谢你的参与和帮助解决!

 
在MetaTrader5中,可以在3个区块中生成一个EA。1个区块提供来自一个指标或几个指标的信号。2块拖曳杆。3块风险。

我可以建议1.我可以在1个区块中添加自定义指标 吗?如果是的话,我应该如何做?

2.是否有可能纠正代码,使交易在两个方向上打开(现在,例如,如果买入交易被打开,卖出交易不会被打开,直到买入交易被关闭)。
 
与本主题无关的评论已被移至 "MQL4 MT4 MetaTrader 4初学者的问题"。