Errori, bug, domande - pagina 541

 
220Volt:

Per non essere infondato, ho simulato la situazione che ho menzionato sopra (non posso citarla perché non posso uscire dalla citazione :) ).

Ho eseguito il seguente codice su M15:

Mentre lo script era in esecuzione mi sono connesso e disconnesso da Internet. Le immagini mostrano il risultato.

Capisco. Lo correggeremo.
 

È in servicedesk o un bug nel codice?

L'indicatore dovrebbe costruire 5 livelli di punti dal prezzo di chiusura verso il basso in rosso.

Ma vengono visualizzati solo due buffer (anche se li conta tutti) e non rosso, ma verde (dopo la compilazione del nero).

Per favore controllate se sono solo io o se sono io in generale...?


#define  N      5
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_plots   5
#property indicator_color1 clrRed
#property indicator_color2 clrRed
#property indicator_color3 clrRed
#property indicator_color4 clrRed
#property indicator_color5 clrRed

#property indicator_width1 3
#property indicator_width2 3
#property indicator_width3 3
#property indicator_width4 3
#property indicator_width5 3

#property indicator_type1 DRAW_COLOR_ARROW
#property indicator_type2 DRAW_COLOR_ARROW
#property indicator_type3 DRAW_COLOR_ARROW
#property indicator_type4 DRAW_COLOR_ARROW
#property indicator_type5 DRAW_COLOR_ARROW

//------------------------------------------------------------------    class CClrHist
class CClrHist
{
public:
        double buf[];
        CClrHist() { };
};

CClrHist bufs[N]; // массив буферов

//------------------------------------------------------------------    OnInit
int OnInit()
{
        for (int i=0; i<N; i++) SetIndexBuffer(i, bufs[i].buf, INDICATOR_DATA);
        return(0);
}
//------------------------------------------------------------------    OnCalculate
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
        for (int i=0; i<N; i++) for (int j=rates_total-1; j>=0; j--)
        {
                bufs[i].buf[j]=close[j];
                bufs[i].buf[j]-=i*100*Point();
        }
        return(rates_total);
}
 
sergeev:

È in servicedesk o un bug nel codice?

L'indicatore dovrebbe costruire 5 livelli di punti dal prezzo di chiusura verso il basso in rosso.

Ma vengono visualizzati solo due buffer (anche se li conta tutti) e non rosso, ma verde (dopo la compilazione del nero).

Per favore controllate se sono solo io o se sono io in generale...?

#property indicator_type1 DRAW_ARROW
#property indicator_type2 DRAW_ARROW
#property indicator_type3 DRAW_ARROW
#property indicator_type4 DRAW_ARROW
#property indicator_type5 DRAW_ARROW
 
masharov:

...Credo che le librerie standard siano il codice ideale che dovrebbe servire da modello per gli altri.

Posso solo dire che sarebbe auspicabile liberarsi di queste nozioni il più presto possibile.

Non ho nulla contro le librerie standard, ma fidarsi del codice di qualcun altro "per rendere più facile la scrittura di programmi" senza verificarlo? - Tranne che nella fase di stesura iniziale di un consulente esperto. Per accelerare i processi di routine, per così dire.

 

Ricevo il messaggio: Abnormal termination abbastanza spesso nel mio logbook. Qualcuno ha notato quando potrebbe esserci un tale conflitto?

Non riesco ancora a trovare la causa. L'unica cosa che posso dire è che se lascio il terminale inattivo per un po' o semplicemente uso un altro programma in quel momento (ad esempio, Excel), l'Expert Advisor che sto testando inizia a funzionare in modo errato dopo essere tornato al terminale. Cioè, le operazioni di trading vengono eseguite senza problemi. L'unico problema è nell'interazione con i pannelli di trading e di informazione. Sembra che OnChartEvent() sia difettoso. Il passaggio da un pannello all'altro inizia a rallentare molto, come se il processo fosse molto occupato da qualcos'altro. Non uso cicli eterni. Anche il carico della CPU in questo momento non indica che qualcosa è utilizzato attivamente. La ricompilazione dell'Expert Advisor aiuta. Al momento della ricompilazione, prima che l'EA venga deinizializzato, nel diario appare il messaggioAbnormal termination. Poi il programma viene inizializzato con successo e tutto inizia a funzionare come un orologio.

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций - Документация по MQL5
 
tol64:

Ricevo il messaggio: Abnormal termination abbastanza spesso nel mio logbook. Qualcuno ha notato quando potrebbe esserci un tale conflitto?

Non riesco ancora a trovare la causa. L'unica cosa che posso dire è che se lascio il terminale inattivo per un po' o semplicemente uso un altro programma in quel momento (ad esempio, Excel), l'Expert Advisor che sto testando inizia a funzionare in modo errato dopo essere tornato al terminale. Cioè, le operazioni di trading vengono eseguite senza problemi. L'unico problema è nell'interazione con i pannelli di trading e di informazione. Sembra che OnChartEvent() sia difettoso. Il passaggio da un pannello all'altro inizia a rallentare molto, come se il processo fosse molto impegnato con qualcos'altro. Non uso cicli eterni. Anche il carico della CPU in questo momento non indica che qualcosa è utilizzato attivamente. La ricompilazione dell'Expert Advisor aiuta. Al momento della ricompilazione, prima che l'EA venga deinizializzato, nel diario appare il messaggioAbnormal termination. Poi il programma viene inizializzato con successo e tutto inizia a funzionare come un orologio.

Usiamo IsStopped() nei cicli?

Potete leggere di questi problemi qui, qui e qui. Dovresti anche pensare a dove nel codice ci sono "colli di bottiglia"...

Per quanto ho capito, questo errore si verifica in caso di chiusura "anticipata" del programma (quando il grafico/terminale viene chiuso o l'Expert Advisor viene ricompilato), e durante questa operazione l'Expert Advisor esegue del lavoro.

 
Interesting:

Usiamo IsStopped() nei cicli?

Leggi di problemi simili qui, qui e qui. Pensa anche ai colli di bottiglia nel codice...

Per quanto ho capito, questo errore si verifica in caso di chiusura "anticipata" di un programma (quando il grafico/terminale viene chiuso o l'Expert Advisor viene ricompilato), mentre l'Expert Advisor esegue qualche lavoro.

Grazie. I link mostrano la stessa situazione. Non uso mai IsStopped() nei cicli, solo break, continue e return.

Finora, non ho visto alcuna connessione traIsStopped() e il rallentamento del programma. Dopotutto, se il programma si bloccasse, non sarebbe possibile eseguire altre operazioni. O mi sbaglio?

Un'altra cosa.IsStopped() è utile quando è necessario fermare l'esecuzione di un programma forzatamente, per esempio, per chiudere il terminale o eliminare Expert Advisor dal grafico. E ho bisogno di continuare a usare l'Expert Advisor.

 
tol64:

Grazie. I link mostrano la stessa situazione. Non uso IsStopped() nei cicli da nessuna parte, solo break, continue e return.

Finora, non ho visto alcuna connessione traIsStopped() e il rallentamento del programma. Se il programma si bloccasse, non verrebbero eseguite altre operazioni. O mi sbaglio?

Un'altra cosa.IsStopped() è utile quando è necessario fermare forzatamente l 'esecuzione di un programma, ad esempio per chiudere il terminale o eliminare l'Expert Advisor dal grafico. E ho bisogno di continuare ad usare l'Expert Advisor.

IsStopped(), riguarda l'errore. Il motivo per cui il terminale/expert sta rallentando non è nemmeno ipotizzato (non si conoscono le condizioni di runtime e nemmeno l'Expert Advisor).
 
tol64:

Ricevo il messaggio: Abnormal termination abbastanza spesso nel mio logbook. Qualcuno ha notato quando potrebbe esserci un tale conflitto?

Non riesco ancora a trovare la causa. L'unica cosa che posso dire è che se lascio il terminale inattivo per un po' o semplicemente uso un altro programma in quel momento (ad esempio, Excel), l'Expert Advisor che sto testando inizia a funzionare in modo errato dopo essere tornato al terminale. Cioè, le operazioni di trading vengono eseguite senza problemi. L'unico problema è nell'interazione con i pannelli di trading e di informazione. Sembra che OnChartEvent() sia difettoso. Il passaggio da un pannello all'altro inizia a rallentare molto, come se il processo fosse molto impegnato con qualcos'altro. Non uso cicli eterni. Anche il carico della CPU in questo momento non indica che qualcosa è utilizzato attivamente. La ricompilazione dell'Expert Advisor aiuta. Al momento della ricompilazione, prima che l'EA venga deinizializzato, nel diario appare il messaggioAbnormal termination. Poi il programma viene inizializzato con successo e tutto inizia a funzionare come un orologio.

Laterminazione anomala significa che avete interferito con il programma in modo innaturale, cioè ricompilandolo in fase di esecuzione, il che porta all'interruzione e alla reinizializzazione del programma.

Lo stesso accade se si colpisce una divisione per zero o si interrompe il programma in fase di esecuzione, ma se il programma viene ritonato, non si otterrà tale voce. Ecco perché si consiglia di controllare IsStopped in modo che il programma possa uscire al suo ritorno invece di essere forzato a farlo.

 

Ci sono piani per aggiungere i seguenti elementi:

Doppio clic su una posizione sul grafico per far apparire il menu di gestione delle posizioni.

Evidenziare più posizioni da chiudere contemporaneamente

????

Grazie.

Motivazione: