Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 727

 
Vitaly Muzichenko:

Pode dizer-me como seleccionar um objecto quando este é criado, para que não perca a sua selecção e não se seleccione a si próprio quando o utilizador o deselecciona. Foi fácil no quarto, mas não funciona no quinto.

Costumava ser, e funcionava muito bem:

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

Como se pode ver, ao criar, podemos seleccionar ou não o objecto que está a ser criado de uma só vez e este não mudará mais e não haverá qualquer referência a ele, mas não funciona no quinto, cria-o sem selecção.

Como fazer mql5 para que o objecto possa ser seleccionado na criação e depois geri-lo manualmente quando necessário - para seleccionar/não seleccionar

OBJPROP_SELECTABLE
 

Bem, é, mas o ícone não se destaca

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:

Bem, é, mas o ícone não é realçado

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

Tudo é realçado:

Destacando

Arquivos anexados:
OBJ_ARROW.mq5  22 kb
 
Vladimir Karputov:

Tudo se destaca:

Merda, eu governei uma função e verifiquei outra, tudo funciona. Obrigado! Vou para a cama)
 

Notei uma característica estranha, se a definirmos desta forma, as linhas não são realçadas quando se cria

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

Mas se for ao contrário, não há problema com a selecção:

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

Por alguma razão, a substituição do summands altera a soma?

 
Vitaly Muzichenko:

Notei uma característica estranha, se a definirmos desta forma, as linhas não são realçadas quando se cria

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

Mas se se fizer o contrário, então não há problema com a selecção:

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

Por alguma razão, a substituição do summands altera a soma?

Aparentemente, quando

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);

último comando, o gráfico é actualizado

 
Vitaly Muzichenko:

Notei uma característica estranha, se a definirmos desta forma, as linhas não são realçadas quando se cria

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

Mas se se fizer o contrário, então não há problema com a selecção:

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

Por alguma razão, a substituição do summands altera a soma?

Inicialmente, quando se cria um objecto, provavelmente define-se a sua propriedade padrão como não seleccionável.

Depois selecciona-o (mas o objecto não é seleccionável), consequentemente nada é seleccionado

Depois, define-o como seleccionável. Mas é "demasiado tarde para beber o borjomi" ...
 

Por isso, aqui está o código completo:

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

Sim, duplamente verificado em todos os tipos de objectos, e tem de colocar"SELECTABLE" primeiro e depois"SELECTED" (SELECCIONADO)

Obrigado pela sua participação e ajuda para a sua resolução!

 
No MetaTrader5 é possível gerar uma EA em 3 blocos. 1 bloco dá sinais a partir de um indicador ou de vários indicadores. 2 barras de reboque de blocos. 3 riscos de bloco.

Posso sugerir 1. posso adicionar indicadores personalizados em 1 bloco? Se sim, como o devo fazer?

2. é possível corrigir o código para que os negócios sejam abertos nos dois sentidos (agora, por exemplo, se um negócio de compra é aberto, o negócio de venda não é aberto até que o negócio de compra seja fechado)
 
Comentários não relacionados com este tópico foram transferidos para "Perguntas dos principiantes do MQL4 MT4 MetaTrader 4".
Razão: