Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1139

 
ascerdfg:
Dove devo cliccare con il tasto destro?

Ctrl T per far apparire il menu in basso, Trading, Assets, ..... , infine Log. Fare clic sul registro e cliccare con il tasto destro del mouse su una delle voci per visualizzare

 
Alexey Viktorov:

È possibile che il prezzo e il tempo delle coordinate dell'oggetto siano uguali a zero. Controllate in questo modo: premete Ctrl+B, premete il pulsante "All" nella finestra di dialogo apparsa e vedete l'elenco degli oggetti esistenti. Se c'è, apri le proprietà e vedi le coordinate.

debuggato, tutto è ok quando si creano tutti gli oggetti

 
ascerdfg:
Dove si deve cliccare con il tasto destro?

specialmente, rzewski: un topo da punzecchiare nel posto giusto

 
Maxim Kuznetsov:

Soprattutto per Rzewski: un mouse per cliccare nel posto giusto

Per essere onesti, il metodo di brancolare per trovare dove il registro è chiamato, e piaceva la parola vista, premuto. e c'è il log))))) E a proposito, non c'è modo di chiamare il registro via controclausola o cosa?

 

Buon pomeriggio.

È possibile impostare un oggetto per essere sempre al di sopra degli altri, compresi gli oggetti appena posizionati. In modo che quando gli oggetti si sovrappongono, l'oggetto desiderato non si sovrappone mai alla parte superiore?

Inizialmente pensavo che la proprietà OBJPROP_ZORDER potesse aiutare, se l'oggetto richiesto fosse sempre impostato sul valore più alto. Ma come si è rivelato nella pratica, è solo una priorità per la cattura dei clic. Visivamente, l'oggetto non diventa più alto di tutti loro.

Anche in pratica, ho scoperto che se un oggetto è disegnato per ultimo, sarà sicuramente visivamente più alto degli altri. Quindi devo o creare qualche proprietà che non conosco, o ridisegnare l'oggetto, che non dovrebbe sovrapporsi alla parte superiore ogni volta che il numero di oggetti sul grafico cambia. Ma quando ridisegno, mi sono imbattuto in un problema - lo sfarfallio di un oggetto che è stato rimosso e disegnato di nuovo. C'è un modo per ridisegnare l'oggetto in modo piacevole, senza sfarfallio, o per renderlo non sovrapposto dall'alto?


 
Oleg Remizov:

Buon pomeriggio.

È possibile impostare un oggetto per essere sempre al di sopra degli altri, compresi gli oggetti appena posizionati. In modo che quando gli oggetti si sovrappongono, l'oggetto desiderato non si sovrappone mai alla parte superiore?

Inizialmente pensavo che la proprietà OBJPROP_ZORDER potesse aiutare, se l'oggetto richiesto fosse sempre impostato sul valore più alto. Ma come si è rivelato nella pratica, è solo una priorità per la cattura dei clic. Visivamente, l'oggetto non diventa più alto di tutti loro.

Anche in pratica, ho scoperto che se un oggetto è disegnato per ultimo, sarà sicuramente visivamente più alto degli altri. Quindi devo o creare qualche proprietà che non conosco, o ridisegnare l'oggetto, che non dovrebbe sovrapporsi alla parte superiore ogni volta che il numero di oggetti sul grafico cambia. Ma quando ridisegno, mi sono imbattuto in un problema - lo sfarfallio di un oggetto che è stato rimosso e disegnato di nuovo. C'è un modo per ridisegnare l'oggetto piacevolmente, senza sfarfallio, o renderlo non sovrapposto dall'alto?


OBJPROP_TIMEFRAMES:

OBJ_NO_PERIODS - invisibile su tutti i periodi,

OBJ_ALL_PERIODS - visibile su tutti i periodi

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
  • www.mql5.com
Комбинация флагов видимости объекта определяет таймфреймы графика, на которых объект отображаем. Для установки/получения значения свойства OBJPROP_TIMEFRAMES можно использовать функции ObjectSetInteger()/ObjectGetInteger...
 
Oleg Remizov:

Buon pomeriggio.

È possibile impostare un oggetto per essere sempre al di sopra degli altri, compresi gli oggetti appena posizionati. In modo che quando gli oggetti si sovrappongono, l'oggetto desiderato non si sovrappone mai alla parte superiore?

Inizialmente pensavo che la proprietà OBJPROP_ZORDER potesse aiutare, se l'oggetto richiesto fosse sempre impostato sul valore più alto. Ma come si è rivelato nella pratica, è solo una priorità per la cattura dei clic. Visivamente, l'oggetto non diventa più alto di tutti loro.

Anche in pratica, ho scoperto che se un oggetto è disegnato per ultimo, sarà sicuramente visivamente più alto degli altri. Quindi devo o creare qualche proprietà che non conosco, o ridisegnare l'oggetto, che non dovrebbe sovrapporsi alla parte superiore ogni volta che il numero di oggetti sul grafico cambia. Ma quando ridisegno, mi sono imbattuto in un problema - lo sfarfallio di un oggetto che è stato rimosso e disegnato di nuovo. C'è un modo per ridisegnare l'oggetto piacevolmente, senza sfarfallio, o renderlo non sovrapposto dall'alto?


Gli oggetti vengono visualizzati secondo l'indice:

string  ObjectName( 
   int    object_index   // номер в списке объектов
   );

Ne consegue che, visivamente, l'oggetto con l'indice più alto sarà in primo piano.

Esco da questa situazione nel modo seguente:

string pref="own"; //префикс в именах своих объектов
bool CheckOtherObj(string &arrObjOther[]){
   CheckOtherObjDelete(&arrObjOther);
   for(int i=ObjectsTotal(0,-1,-1)-1; i>=0; i--){
      string name=ObjectName(0,i,-1,-1);
      if(StringFind(name,pref)>=0)continue;
      bool add=true;
      for(int k=ArraySize(arrObjOther)-1; k>=0; k--){
         if(arrObjOther[k]==name){
            add=false;
            break;
         }
      }
      if(add){
         AddToArr(name,arrObjOther);
         return(true);
      }
   }
   return(false);
}
void CheckOtherObjDelete(string &arrObjOther[]){
   string arrdel[];
   ArrayFree(arrdel);
   for(int k=0; k<ArraySize(arrObjOther); k++){
      bool add=true;
      for(int i=0; i<ObjectsTotal(0,-1,-1); i++){
         string n=ObjectName(0,i,-1,-1);
         if(StringFind(n,pref)>=0)continue;
         if(n==arrObjOther[k]){
            add=false;
            break;  
         }
      }
      if(add) AddToArr(arrObjOther[k],arrdel);
   }
   if(ArraySize(arrdel)>0){
      string temp[];
      ArrayCopy(temp,arrObjOther);
      ArrayFree(arrObjOther);
      for(int i=0; i<ArraySize(temp); i++){
         bool add=true;
         for(int k=0; k<ArraySize(arrdel); k++){
            if(arrdel[k]==temp[i]){
               add=false;
               break;
            }
         }
         if(add)AddToArr(temp[i],arrObjOther);
      }
   }
}
void AddToArr(string value, string &arr[]){
   int s=ArraySize(arr);
   ArrayResize(arr,s+1);
   arr[s]=value;
}


in questo caso, ho un array di nomi di oggetti nel mio codice che non sono stati creati dal programma (altri). Non appena appare un nuovo oggetto, cancello tutti gli oggetti creati dal programma (i miei) e li creo di nuovo. In questo caso, i propri oggetti avranno sempre l'indice più alto nella lista degli oggetti, e quindi saranno visivamente in primo piano. Ma è anche necessario cancellare sempre l'array di altri oggetti, nel caso di una loro rimozione dal grafico, in modo che l'array non cresca in modo incontrollato.

Se hai bisogno di controllare i tuoi oggetti, è più facile. Dovete solo controllare gli indici degli oggetti.

 
Maksym Mudrakov:
Gli oggetti vengono visualizzati secondo l'indice:

ne consegue che visivamente l'oggetto con l'indice più alto sarà in primo piano.

Ecco come esco da questa situazione:


In questo caso, il mio codice ha un array di nomi di oggetti non creati nel programma (altri). Appena appare un nuovo oggetto, cancello tutti gli oggetti creati dal programma (il mio) e li creo di nuovo. In questo caso, i propri oggetti avranno sempre l'indice più alto nella lista degli oggetti, e quindi visivamente saranno in primo piano. Ma è anche necessario cancellare sempre l'array di altri oggetti, nel caso in cui vengano cancellati dal grafico, in modo che l'array non cresca in modo incontrollato.

Se volete controllare i vostri oggetti, è più facile. Dovete solo controllare gli indici degli oggetti.

Ho mostrato sopra cosa fare. Perché arrivare a tanto quando c'è un metodo raccomandato dagli sviluppatori?

 
Salve.

Voglio trasferire l'indicatore ATP al grafico dei prezzi. Ma non so come fare. Voglio che mostri il movimento massimo di volatilità dalla linea mediana dello stesso periodo. Se qualcuno ha il codice, grazie per la condivisione.
 
Ciao, non so da dove cominciare, visto che dopo un mese di ricerche senza risultato, la mia testa era in un terribile casino. Ho deciso di scrivere un messaggio in questo thread. Se sto andando nel posto sbagliato qui, mi dispiace. Forse qualcuno dirà in quale ramo è meglio sollevare questo argomento? Il cuore della mia domanda è: qual è il modo migliore e più semplice per ottenere dati in MT4 da un sito di terze parti per visualizzare ulteriormente queste informazioni su un grafico simbolo utilizzando un Expert Advisor, un indicatore o uno script? Al momento sto usando il mio script che apre il file Book1.csv all'indirizzo "MT4 Data Directory"\MQL4\Files. Prima di eseguire lo script devo lanciare il browser Chrome, andare alla pagina delle risorse, selezionare un simbolo su questa pagina, poi selezionare il tipo di dati visualizzati per questo simbolo (l'indirizzo della pagina non cambia), dopo aver visualizzato i dati per questo simbolo come una tabella con i valori dei parametri in una gamma limitata di livelli di prezzo uso l'estensione Table Capture per il browser Chrome, copio i dati dalla tabella sulla pagina delle risorse negli appunti, poi apro Excel e incollo i dati dagli appunti nel foglio Exel. Poi converto i dati numerici in Exel (sostituisco le virgole nei numeri con punti) e salvo il file in formato csv nella directory dei dati del terminale. E già dopo aver eseguito questa serie di azioni eseguo lo script. Ovviamente, la funzione WebRequest non è adatta a questo compito, perché non ci sono dati sull'indirizzo di pagina specificato all'inizio (appare dopo aver selezionato lo strumento e il tipo di dati). Sarei grato a chiunque possa indicarmi la direzione giusta (ovviamente, ci possono essere diverse direzioni).