Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 727

 
Vitaly Muzichenko:

Potete dirmi come selezionare un oggetto quando viene creato, in modo che non perda la sua selezione e non si selezioni quando l'utente lo deseleziona. Era facile nel quarto, ma non funziona nel quinto.

Lo era, e funzionava benissimo:

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

Come potete vedere, durante la creazione, possiamo selezionare o non selezionare l'oggetto che si sta creando e non cambierà più e non ci sarà alcun riferimento ad esso, ma non funziona nel quinto, lo crea senza selezione.

Come rendere mql5 in modo che l'oggetto possa essere selezionato alla creazione e poi gestirlo manualmente quando necessario - selezionare/non selezionare

SELEZIONABILE IN BASE AL TIPO DI OGGETTO
 

Beh, lo è, ma l'icona non si distingue

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:

Beh, lo è, ma l'icona non è evidenziata

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

Tutto è evidenziato:

Evidenziare

File:
OBJ_ARROW.mq5  22 kb
 
Vladimir Karputov:

Tutto si distingue:

Merda, ho regolato una funzione e ne ho controllata un'altra, tutto funziona. Grazie! Vado a letto)
 

Ho notato una strana caratteristica, se la imposti in questo modo, le linee non sono evidenziate quando crei

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

Ma se è il contrario, non ci sono problemi di selezione:

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

Per qualche motivo, la sostituzione dei sommatori cambia la somma?

 
Vitaly Muzichenko:

Ho notato una strana caratteristica, se la imposti in questo modo, le linee non sono evidenziate quando crei

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

Ma se si fa il contrario, allora non c'è nessun problema di selezione:

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

Per qualche ragione, la sostituzione dei sommatori cambia la somma?

A quanto pare, quando

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);

ultimo comando, il grafico viene aggiornato

 
Vitaly Muzichenko:

Ho notato una strana caratteristica, se la imposti in questo modo, le linee non sono evidenziate quando crei

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

Ma se si fa il contrario, allora non c'è nessun problema di selezione:

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

Per qualche motivo, la sostituzione dei sommatori cambia la somma?

Inizialmente, quando si crea un oggetto, probabilmente si imposta la sua proprietà di default come non selezionabile.

Poi lo si seleziona (ma l'oggetto non è selezionabile), di conseguenza non viene selezionato nulla

Poi lo si imposta come selezionabile. Ma è "troppo tardi per bere il borjomi" ...
 

Quindi ecco il codice 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);
   }
}

Sì, ricontrollato su tutti i tipi di oggetto, e dovete mettere prima"SELECTABLE" e poi"SELECTED".

Grazie per la vostra partecipazione e il vostro aiuto nella risoluzione!

 
In MetaTrader5 è possibile generare un EA in 3 blocchi. 1 blocco dà segnali da un indicatore o da più indicatori. 2 barre di trascinamento del blocco. 3 rischi di blocco.

Posso suggerire 1. Posso aggiungere indicatori personalizzati in 1 blocco? Se sì, come devo fare?

2. è possibile correggere il codice in modo che i trade siano aperti in entrambe le direzioni (ora, per esempio, se viene aperto un trade di acquisto, il trade di vendita non viene aperto finché il trade di acquisto non viene chiuso)
 
I commenti non relativi a questo argomento sono stati spostati in "Domande dai principianti di MQL4 MT4 MetaTrader 4".