Errori, bug, domande - pagina 2081

 
Anatoli Kazharski:

Questo problema appare in tutti gli indicatori. Compresi quelli della consegna standard. Per esempio, la media mobile:

//---

E dopo che si sono formate diverse barre:

//---

Provate a riprodurlo nel vostro ambiente. Ho bisogno di vedere se sono l'unico con questo problema.


Sì, confermo:

Terminal        MetaTrader 5 x64 build 1687 started (MetaQuotes Software Corp.)
Terminal        Windows 10 (Build 16299), x64 based PC, IE 11.00, UAC, Intel Core i3-3120 M  @ 2.50 GHz, RAM: 4473 / 8077 Mb, HDD: 330591 / 475588 Mb, GMT+02:00
Terminal        C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075

animazione:

Gli indicatori non si spostano

 
I commenti non pertinenti a questo argomento sono stati spostati in "BUY_LIMIT, ORDER_TIME_DAY".
 
Vladimir Karputov:

Sì, confermo:

animazione:

Grazie. Aggiunto un link al tuo messaggio all'applicazione servicedesk come addendum. Serve una correzione d'emergenza per questo bug, tutto il lavoro si è fermato.
 

fxsaber:

Entrambi i terminali hanno due schede - Commercio e Posta. Voglio che "Trading" sia sempre attivo. Ma quando arriva un'email interna (per esempio un filll parziale) dal broker, la scheda passa a "Mail".

Come faccio a spegnere questa brutta cosa? Beh, non ci dovrebbe essere una notifica così invadente, e per di più alle email assolutamente ordinarie del broker, dove informa automaticamente sull'esecuzione degli ordini decine di volte in un giorno. Non capisco perché a volte passa a "Mail" e a volte no.

Come posso spegnerlo? Non leggo mai la scheda "E-Mail", perché è Spam. Per dirla tutta, è fastidioso vedere la GUI del terminale reagire così allo Spam.


Penso di poter usare WinApi per implementare una funzione per passare alla scheda desiderata: commercio, saldo, qualsiasi cosa.
Cercate di implementarlo voi stessi, o ordinatelo a dei freelance, spero che ci siano ancora persone competenti.

 
Sergey Dzyublik:

Penso che usando WinApi, si possa implementare una funzione per passare alla scheda desiderata: commercio, saldo, qualsiasi cosa.
Cercate di implementarlo da soli, o ordinatelo da Freelancer, spero che ci siano ancora persone competenti.

Io stesso ho praticato questa perversione. Voglio una GUI facile da usare.

 
Aleksey Vyazmikin:

È di nuovo senza memoria...

Anche se ci sono ancora 7 gigabyte di RAM disponibili. Che diavolo è questo?

Aprire un ticket con Service Desk. Includere l'esperto e le impostazioni di ottimizzazione.

+ descrivere il sistema operativo, il bit rate, la configurazione del sistema.

 
Alexey Da:

Aprire un ticket con Service Desk. Allegare l'esperto e le impostazioni di ottimizzazione.

+ descrivere il sistema operativo, il bit rate, la configurazione del sistema.


Non so come riprodurre tutto questo - la settimana scorsa questo messaggio appariva ogni giorno, e l'EA non funzionava affatto. E l'altro giorno con l'ottimizzazione... poi tutto ha funzionato dopo aver chiuso tutti i programmi.

Può essere un conflitto tra programmi? Ho notato che il bug era sempre presente quando il browser Opera era aperto.

 

In questo thread ho scoperto una cosa interessante sulle prestazioni del comando Comment() in MT4 e MT5. In MT5 questo comando è ~2000 volte (!!!) più lento che in MT4.

Ecco il codice di prova che gira sulle due piattaforme:

#property script_show_inputs
#include <Canvas\Canvas.mqh>

input uint   FontSize=12;                                   // размер шрифта
input uint   Count=1000;                                    // размерность цикла
input ENUM_COLOR_FORMAT format=COLOR_FORMAT_ARGB_NORMALIZE; //Способ обработки цвета

void OnStart()
  {
   CCanvas Text;
   ulong ColorScreen=ChartGetInteger(0,CHART_COLOR_BACKGROUND,0);

   Text.FontSet("Arial",FontSize);
   string str="Необходимо подождать.Выполняется проход цикла №: = ";
   int H=Text.TextHeight(str);
   int W=Text.TextWidth(str+"00000");
   if(!Text.CreateBitmapLabel(0,0,"FONT",2,130,W,H,format)) Print("Error creating canvas: ",GetLastError());

   ulong t1=1,t2=1,t0;
   uint j=0;
   color clr=(color)ARGB(255,255^GETRGBR(ColorScreen),255^GETRGBG(ColorScreen),255^GETRGBB(ColorScreen));
   t0=GetMicrosecondCount();
   for(j=0;j<Count;j++)
     {
      Comment(str+IntegerToString(j));
      if (IsStopped()) break;
     }
   t1=GetMicrosecondCount()-t0;

   t0=GetMicrosecondCount();
   for( j=0;j<Count;j++)
     {
      Text.Erase((color)ColorScreen);
      Text.TextOut(0,0,str+IntegerToString(j),clr);
      Text.Update();
      if (IsStopped()) break;
     }
   t2=GetMicrosecondCount()-t0;
      Text.Erase((color)ColorScreen);
      Text.TextOut(0,0,"Время Comment = "+IntegerToString(t1)+" Время Canvas = "+IntegerToString(t2),clr);
      Text.Update();
      Sleep(30000);
     
   Text.Destroy();
   Comment("");
  }
//+------------------------------------------------------------------+

Questo va bene?

File:
 
Nikolai Semko:

In questo thread ho scoperto una cosa interessante sulle prestazioni del comando Comment() in MT4 e MT5. In MT5 questo comando è ~2000 volte (!!!) più lento che in MT4.

Ecco il codice di test che gira sulle due piattaforme:

Va bene così?

Sì, questo è giusto e corretto.

In MT4, la funzione Comment cambia semplicemente la casella di testo del commento interno senza cercare di visualizzarlo sul grafico. Cioè, il commento apparirà in qualche momento nel prossimo rendering regolare del grafico, ma cambiare il commento stesso non causa il ridisegno del grafico. Se cambiate rapidamente il commento, il suo cambiamento non sarà visibile nel grafico.

In MT5 la funzione Commento causerà esplicitamente il ridisegno del grafico, perché la priorità è data alla visualizzazione del commento nel grafico. Altrimenti, la funzione è inutile.

Questa è esattamente la differenza.


Se in MT4 mettete ChartRedraw() forzatamente dopo aver chiamato Comment, il comportamento non sarà lo stesso che in MT5. ChartRedraw() in Metatrader 4 ignora il valore del commento e decide da solo se il grafico deve essere aggiornato dall'ultimo frame o no. Naturalmente, in assenza di centinaia di quotazioni al secondo che causerebbero una disabilitazione dei dati del grafico, ChartRedraw decide "perché disegnare un grafico invariato" e salta il disegno del frame.

Anche Metatrader 5 ha lo stesso sistema, ma ci sono molti più casi in cui il rendering incondizionato ha la priorità.

I terminali sono applicazioni grafiche e possono fornire centinaia di fotogrammi al secondo e funzionare in modalità di visualizzazione economica per il bene delle prestazioni.


Da qui ulteriori conclusioni quando si eseguono i benchmark:

  • non si può considerare una chiamata ChartRedraw come un vero ChartRedraw

  • dovete sempre conoscere e provare le affermazioni "perché un grafico sarà ridisegnato" e "invalido il quadro interno del mercato, in modo che il terminale decida di ridisegnare il grafico".

  • non si dovrebbero fare conclusioni multiple in MT5 durante i benchmark, si dovrebbe sempre pensare a come si sta influenzando il rendering

  • MT5 ha un sistema più corretto di cambiare gli oggetti sul grafico ed è necessario capire chiaramente le conseguenze dei comandi di lettura/scrittura.
    si raccomanda di non mischiare i comandi di lettura/scrittura e di fare la lettura di massa e la scrittura di massa separatamente.

  • Il frequente ridisegno dei grafici nei benchmark porta a una forte dipendenza dei risultati dalla scheda grafica.
    infatti, alcuni test possono finire per testare la scheda grafica piuttosto che gli algoritmi o le funzioni. il test su un computer portatile e un computer desktop può mostrare più volte risultati diversi semplicemente a causa di una scheda grafica 3-5 volte più lenta

Questi errori sono fatti continuamente da tutti.

 
Renat Fatkhullin:

Sì, questo è giusto e corretto.

Grazie mille per la risposta dettagliata. È più o meno quello che ho pensato io. Tutto ha un senso.