Errori, bug, domande - pagina 2797

 
Roman:

Bild 2530

Al terzo attacco della struttura, non appare nessun IntelliSense.

L'intelligenza IntelliSense continua a dare risultati ))


vale a dire che un suggerimento è tutto ciò su cui si può contare

 
Nikolai Karetnikov:

L'intelligenza IntelliSense continua a dare risultati ))

vale a dire che un suggerimento è tutto ciò su cui si può contare

Il mio post riguardava le strutture annidate, nessuna selezione IntelliSense appare al terzo annidamento.
Il che è molto fastidioso, perché le strutture annidate sono state progettate per essere usate solo per la selezione nell'intellisense.
E poiché non appare, devo tornare alla struttura e guardare quali campi ci sono. Non va bene.
Vorrei che lo sistemassero.

Per quanto riguarda il tuo esempio, i suggerimenti sono chiari per le funzioni MQL standard.
Se non capite il tooltip, mettete il cursore sulla funzione e premete F1.

 
Mihail Matkovskij:

Sostituito la funzione ObjectDeleteAll prima nel vostro esempio:

Poi nell'indicatore.

Si è rivelato facile usareObjectDeleteAll nel mio progetto. Per cancellare tutti gli oggetti, dovevo solo cambiare il prefisso 3 volte e chiamare ObjectDeleteAll 3 volte. Il grafico è chiaro come risultato. Il linguaggio MQL5 ha un sacco di sottigliezze. Ma allo stesso tempo è un linguaggio molto ben studiato.

Grazie a tutti coloro che mi hanno aiutato a risolvere questo problema!

Ecco che ci risiamo:

    trend = new CChartObjectTrend();
    if(trend.Create(0, "trend"+(string)i, 0, time[shift], low[shift], time[shift], high[shift]))
      listOfTrendLines.Add(trend);
    else
      delete trend;

Un potenziale buco in cui infilarsi. Guardate cosa restituisce il metodo Add()

(So che è un test, so che va bene controllare, ma se stai controllando il risultato della creazione, perché non controllare il risultato dell'aggiunta? Disciplinato per il futuro)
 
Artyom Trishkin:

Eccolo di nuovo:

Un potenziale buco in cui infilarsi. Guardate cosa restituisce il metodo Add()

(Capisco che è un test, capisco che è abbastanza buono per controllare, ma se controllo il risultato della creazione, perché non controllare il risultato dell'addizione? Disciplina per il futuro)

Bene fare questo:

    trend = new CChartObjectTrend();
    if(trend.Create(0, "trend"+(string)i, 0, time[shift], low[shift], time[shift], high[shift])) {
      if(!listOfTrendLines.Add(trend))
        delete trend;
    }
    else
      delete trend;

Questo è tutto. Ora non c'è nessun buco?

Questo è in realtà un programma di prova e ha fatto il suo lavoro. Non ho bisogno di nient'altro da esso. Se funzionasse, avrebbe un approccio e un concetto diverso. I messaggi di errore vanno da ogni punto critico con indicazione della linea (__LINE__) e del nome della funzione (__FUNCTION__) ... Quindi, a volte non ho nemmeno bisogno di usare il debug. Mi basta guardare, nome del modulo, numero di linea, nome della funzione...

 

Ciao a tutti! Il problema è il seguente...

Dopo l'aggiornamento, il collegamento al terminale MT5 è sparito, sia sul desktop che nella cartella principale. Reinstallato. Dopo aver riavviato il mio PC, la storia si è ripetuta. Qual è il problema? Qualcuno ha avuto problemi con questo?

 
Artyom Trishkin:

Ancora una volta avete qui:

Un potenziale buco in cui infilarsi. Guardate cosa restituisce il metodo Add()

(So che è un test, capisco che è abbastanza buono per controllare, ma se si controlla il risultato della creazione, perché non controllare il risultato dell'addizione? Disciplina per il futuro)

E in quali casi listOfTrendLines.Add potrebbe fallire? Solo che non li conosco. Anche se aderisco a questo principio, dove "non ci sono controlli inutili" (c). Ma ipoteticamente possiamo supporre che si possa arrivare alla paranoia. Ok, il metodo Create di una classe di oggetti grafici può fallire. Ma funziona sempre correttamente se il codice è scritto correttamente e il programma dà nomi normali agli oggetti. Ma diciamo che ci possono essere dei difetti nel suo utilizzo... Ma come può il metodo Add restituire un oggetto falso in condizioni normali. O la funzione ArrayResize (che, a proposito, è usata in questo metodo), come può restituire un risultato diverso da new_size. A meno che non ci sia abbastanza memoria... :) Ma dove avete visto dispositivi moderni con un deficit di memoria così grande? :)

 
Mihail Matkovskij:

In quali casi listOfTrendLines.Add potrebbe fallire? Solo che non ne sono a conoscenza. Anche se aderisco al principio per cui "non ci sono controlli inutili" (c). Ma ipoteticamente possiamo supporre che si possa arrivare alla paranoia. Ok, il metodo Create di una classe di oggetti grafici può fallire. Ma funziona sempre correttamente se il codice è scritto correttamente e il programma dà nomi normali agli oggetti. Ma diciamo che ci possono essere dei difetti nel suo utilizzo... Ma come può il metodo Add restituire un oggetto falso in condizioni normali. O la funzione ArrayResize (che, a proposito, è usata in questo metodo), come può restituire un risultato diverso da new_size. A meno che non ci sia abbastanza memoria... :) Ma dove avete visto un sistema moderno con deficit di memoria? :)

Vps di solito.
P.s. Penso che tu sia ingiusto con Alexei perché è stato lui a dare il primo e corretto consiglio e comunque ti ha aiutato
 
Mihail Matkovskij:

Sostituito la funzione ObjectDeleteAll prima nel vostro esempio:

Poi nell'indicatore.

Si è rivelato facile usareObjectDeleteAll nel mio progetto. Per cancellare tutti gli oggetti, dovevo solo cambiare il prefisso 3 volte e chiamare ObjectDeleteAll 3 volte. Il grafico è chiaro come risultato. Il linguaggio MQL5 ha un sacco di sottigliezze. Ma allo stesso tempo è un linguaggio molto ben studiato.

Grazie a tutti coloro che mi hanno aiutato a risolvere questo problema!

Mi chiedo se avete esaminato la documentazione o avete semplicemente preso la descrizione della funzione dal mio post.

Ho il sospetto che tu abbia solo oggetti grafici che hanno una tendenza. Se sì, perché avete bisogno di un prefisso? C'è anche una cancellazione per tipo di oggetto

int  ObjectsDeleteAll(
   long  chart_id,            // идентификатор графика
   int   sub_window=-1,       // индекс окна
   int   type=-1              // тип объекта для удаления
   );

Pertanto, non dovete cambiare nulla nel progetto, ma solo scrivere

ObjectsDeleteAll(0, 0, OBJ_TREND);
)))))))))))))
 
Aleksei Beliakov:
Vps di solito.
P.s. Mi sembra che tu abbia trattato Alexei ingiustamente, dopo tutto è stato lui a dare il primo e corretto consiglio e comunque ti ha aiutato

Dov'è l'ingiustizia in questo, mi imbarazza chiederlo...? Penso di stare bene con Alexei. Sei imparentato con lui?

 
Alexey Viktorov:

Mi chiedo se hai guardato la documentazione o hai semplicemente preso la descrizione della funzione dal mio post.

Ho il sospetto che tu abbia solo oggetti grafici che hanno una tendenza. Se sì, perché avete bisogno di un prefisso? C'è anche una cancellazione per tipo di oggetto

in modo da non dover cambiare nulla nel progetto.

)))))))))))))

Questo è solo un caso speciale. Il prefisso è generale e universale. Inoltre, la cancellazione di tutte le linee di tendenza influenzerà anche gli oggetti che non appartengono al programma.

Motivazione: