Errori, bug, domande - pagina 2266

 
fxsaber:
Allora, abbiamo risolto il problema delle "piazze"?

Naturalmente, se si usa una singola tela non scalabile, semplicemente non ce n'è.

Voglio pubblicare in KB una semplice classe iCanvas, che eredita la classe CCanvas, che crea una tela a schermo intero quando dichiarata per default e poi la cambia automaticamente se la dimensione della finestra cambia.

Ci saranno anche alcune caratteristiche aggiuntive sotto forma di disegnare forme di tela non per coordinate x ma per prezzo, numero di barra o tempo. Cioè aggiungeremo le funzioni X(datatime T), X(double bar), Y(double price).
Così il kanvas non sembrerà così stressante per molte persone.

 
Nikolai Semko:

Naturalmente, se si usa un singolo kanvas non scalato, semplicemente non esistono.

Ho sempre avuto un solo kanvas e il quadrato rosso continuava a spuntare. Ho lottato a lungo per capirne le ragioni, ma non ci sono mai riuscito.

 
fxsaber:

Ho sempre avuto un solo kanvas e il quadrato rosso continuava a spuntare. Ho lottato a lungo per capirne le ragioni, ma non ci sono mai riuscito.

Se ridimensionate il kanvas, cioè lo riaprite o usate la funzione Resize, dovreste usare il kanvas per tutta la finestra per evitare questi quadrati rossi.

#include <Canvas\Canvas2.mqh>

int OnStart(void)
  {
    int Width=(int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS);
    int Height=(int)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS);
    CCanvas canvas;
    if(!canvas.CreateBitmapLabel("SampleCanvas",0,0,Width,Height,COLOR_FORMAT_ARGB_NORMALIZE)) Print("Error creating canvas: ",GetLastError());
  ....
  }

Ricordate anche che la funzione Erase è molto veloce - a schermo intero FullHD ci vorranno ~0,5 millisecondi.

E Update più lento ~5-7 millisecondi su schermo intero FullHD.
Sì - questa opzione è più costosa, poiché Update kanvas size di diciamo 500x200 richiederà ~0,5 millisecondi.

Quindi è una questione di convenienza.

Personalmente uso quasi sempre il kanvas a schermo intero ora, dato che ho un margine di 200 fps con Update = 5 millisecondi.

 

C'è un modo per risolvere questo problema nella prossima build?

Quando passo a un altro account, il grafico dei caratteri personalizzato perde le barre - "Waiting for update". Le barre non possono essere richieste. Allo stesso tempo zecche - nessun problema.

Dopo aver riavviato il terminale, naturalmente, le barre del grafico sono disponibili.

Vorrei che le barre dei simboli personalizzate rimanessero disponibili senza riavvio dopo il passaggio a un altro account.

 
Se si crea uno "strumento sintetico" e il computer si blocca, lo strumento sintetico non viene salvato. Una piccola cosa, ma scomoda. Per favore, correggetelo.
 
Si scopre che il backtest termina sul penultimo (non l'ultimo, come si potrebbe pensare) tick dell'intervallo di test.
 

Errore durante l'esecuzione:

#define  MACRO( int ) int
void f( uint ) { Print( 1 ); }
void f(  int ) { Print( 2 ); }
void OnStart()
{
        MACRO( uint ) x = 0;
        f( x );
}

Risultato: 2 Atteso: 1

 

Deve essere un'aberrazione psicologica sapere, in qualsiasi momento, il numero dell'ultima build di MT5.

Non conosco i tassi di cambio attuali, ma conosco sempre il numero. Chiedimi oggi, un mese fa, un anno fa...

 
Errore di compilazione:
class A {
template<typename T>
        A *StringFormat( string, T ) { return &this; }
        A *f() { return StringFormat( "", 1 ); } //Error: 'StringFormat' - object pointer expected
};
 
In ogni caso, la cronologia dei tick dei personaggi personalizzati scompare dopo che il Tester è stato applicato ad essi. Dovrebbe essere aggiustato.
Motivazione: