Errori, bug, domande - pagina 2677

 
fxsaber:

Rilasciando, naturalmente. Il terminale stesso memorizza i tick nella sua cache, che non mi serve durante il funzionamento.

E' meglio per me che queste zecche aumentino di nuovo più tardi a freddo. Serve un meccanismo per "raffreddare" il terminale.

Non l'ho notato.

void OnStart()
  {
   Print("используется памяти до закачки истории: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   MqlTick items[];
   ulong t0=GetMicrosecondCount();
   uint    count=CopyTicks(Symbol(),items,COPY_TICKS_INFO,0,100000000);
   t0=GetMicrosecondCount()-t0;
   Print ("Загружено за "+string(t0/1000)+" миллисекунд "+ (string)count+ " тиков");
   Print("используется памяти после закачки истории: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   ArrayFree(items);
   Print("используется памяти после ArrayFree: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
  }


SZY La cosa triste è che in memoria, i tick sono memorizzati senza imballaggio con 60 byte per tick. Potrebbe facilmente essere impacchettato 5 volte (~12 byte per tick).

 
Stanislav Korotky:

È meglio fare il download automatico come da CopyRates.

In questo caso i tempi sono sconosciuti. Il download è avviato da una richiesta di simbolo di periodo.

Considerare ciò che può essere fatto

 
Nikolai Semko:

non notata.

Bisogna guardare cosa sta consumando il terminale.

void OnStart()
  {
//   Print("используется памяти до закачки истории: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   Print("используется памяти до закачки истории: "+string(TerminalInfoInteger(TERMINAL_MEMORY_USED))+" Mb");
   MqlTick items[];
   ulong t0=GetMicrosecondCount();
   uint    count=CopyTicks(Symbol(),items,COPY_TICKS_INFO,0,1 e7);
   t0=GetMicrosecondCount()-t0;
   Print ("Загружено за "+string(t0/1000)+" миллисекунд "+ (string)count+ " тиков");
//   Print("используется памяти после закачки истории: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   Print("используется памяти после закачки истории: "+string(TerminalInfoInteger(TERMINAL_MEMORY_USED))+" Mb");
   ArrayFree(items);
//   Print("используется памяти после ArrayFree: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   Print("используется памяти после ArrayFree: "+string(TerminalInfoInteger(TERMINAL_MEMORY_USED))+" Mb");
  }


Il risultato è su un terminale che ha funzionato per molto tempo. Nessun EAs/indicatore in funzione. Due grafici, barre M1 solo per l'anno corrente.

используется памяти до закачки истории: 1043 Mb
Загружено за 11223 миллисекунд 10000000 тиков
используется памяти после закачки истории: 1675 Mb
используется памяти после ArrayFree: 1102 Mb

60Mb non sono stati rilasciati. Il terminale vuoto consuma più di un gigabyte. L'unico modo per ridurre il consumo è ricaricare il terminale.

 
Sergey Dzyublik:

Buon pomeriggio, grazie mille.
Non ho usato il nuovo operatore prima perché logicamente deve essere più lento di ArrayResize con memoria riservata.
Ma sono impressionato dai risultati ottenuti, si scopre che è viceversa, l'array nativo tramite il nuovo operatore è più veloce.

MT5 (build 2363):

Rilasciato nella beta 2364 (purtroppo ha un errore di compilazione per new T() all'interno del template)

Ecco i log del tuo script:

2020.03.19 10:39:45.784 Test (EURUSD,H1)        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
2020.03.19 10:39:46.765 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops=1000 ms=984
2020.03.19 10:39:48.233 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops=1000 ms=1469
2020.03.19 10:39:49.944 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator         : loops=1000 ms=1703
2020.03.19 10:39:50.923 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops=1000 ms=969
2020.03.19 10:39:52.392 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops=1000 ms=1484
2020.03.19 10:39:54.100 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator         : loops=1000 ms=1703
2020.03.19 10:39:55.079 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops=1000 ms=985
2020.03.19 10:39:56.548 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops=1000 ms=1469
2020.03.19 10:39:58.258 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator         : loops=1000 ms=1703
2020.03.19 10:39:59.237 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops=1000 ms=984
2020.03.19 10:40:00.705 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops=1000 ms=1469
2020.03.19 10:40:02.416 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator         : loops=1000 ms=1703
Potete vedere che ArrayResize per gli oggetti ha iniziato a lavorare più velocemente.

Ancora una volta, la complessità di una parte della funzione ArrayResize è stata ridotta da logaritmo a zero
 
Ilyas:
Possiamo vedere che ArrayResize per gli oggetti è più veloce ora.
Ancora una volta, siamo riusciti a ridurre la complessità di una parte della funzione ArrayResize da logaritmo a zero.

Sono riuscito a confrontare la velocità di ArrayResizeReserve e ArrayOnNew su un progetto reale per il tipo di dati - classe con un singolo campo int, numero di record 20M.

In MT5 (build 2363) su tutti i parametri confrontati tranne uno ArrayOnNew era peggiore di ArrayResizeReserve:

Accesso in lettura/scrittura (std::fill_n, std::copy, std::vector::clear): 2-2,5 volte più lento
Creazione di tutti gli elementi in una volta (std::vector::resize) per memoria "fredda"/"calda" - 1,1-1,2 volte più lento
Creazione di tutti gli elementi uno per uno (std::vector::push_back) per memoria "calda" - 1,2 volte più veloce

 

questi link nell'aiuto (editor) portano a una pagina non trovata


 
Bug MT5 (build 2363) Priorità di esecuzione non corrispondenti delle funzioni template in MQL rispetto alle funzioni template in C++(online:https://onlinegdb.com/HkNqBDZ88).
Il problema
si verifica quando la prima funzione "test" contiene una classe base template completamentespecializzata come argomento,
e la seconda funzione "test" sovraccarica la prima, è una funzione template e contiene una classe base template non specializzata come argomento.

template<typename T>
struct B{
   T data;
};

template<typename T>
struct BB : public B<T>{};


template<typename T>                                             
struct A{
public:
   static void test(T& src){
      printf("1");
   }
   
   template<typename TT>
   static void test(B<TT>& src){
      printf("2");
   }
};
      

void OnStart(){
   BB<int> bb;
   A<B<int>>::test(bb);         //'test' - ambiguous call to overloaded function        
}
 
Ciao a tutti!!! Domanda: Uso due piattaforme MT4 e MT5 sulla mia copyutera. MT4 si è collegato al segnale senza alcun problema. Ma non posso connettermi ad un altro segnale da MT5. Ho un conto e il movimento dei fondi viene visualizzato, ma non c'è nessun numero di conto nel conto, non ho nessun pulsante di segnale nel cruscotto del terminale. Ho affittato un server, vps, ho scritto che ho bisogno di migrazione, ma il pulsante di migrazione non funziona. Per favore, ditemi perché.
 
Anna:
Ciao a tutti!!! La mia domanda è: uso due piattaforme MT4 e MT5 sulla mia copyutera. Mi sono collegato al segnale da MT4 senza alcun problema. Ma non posso connettermi ad un altro segnale da MT5. Ho un conto e il movimento dei fondi viene visualizzato, ma non c'è nessun numero di conto nel conto, non ho nessun pulsante di segnale nel cruscotto del terminale. Ho affittato un server, vps, ho scritto che ho bisogno di migrazione, ma il pulsante di migrazione non funziona. Per favore, ditemi perché.

MetaTrader 5 (per il noleggio di hosting virtuale integrato nel terminale) richiede un sistema operativo a 64 bit.

 

su Win 10 qualcuno collega gli agenti locali?

Ho provato a connettere 2 PC, l'agente remoto è costantemente pronto a connettersi... nessun lavoro.

Ho dato un'occhiata nel firewall, penso che ci sia un segno di spunta per Metatrader Agent, esportazione - importazione agente tramite file vede anche le porte e il nome del pc

Ho il sospetto di dover inoltrare le porte da qualche altra parte?