Algoritmi, metodi di soluzione, confronto delle loro prestazioni - pagina 15

 
fxsaber:

C'è un chiaro schema di ripetuta mancanza di rispetto per la comunità e un chiaro schema di provocazione.

Non leggerlo (i post di una persona in vari thread costruttivi) non è sempre possibile, dopo di che svilupparlo e dimenticarlo - ancora meno.

Trolling e spitting nelle mani di aiuto, il cui numero distingue notevolmente questa risorsa dal lato positivo.


Potrebbe essere sbagliato.

Controlla le tue emozioni per favore. Se non accetti il punto di vista di qualcun altro, puoi scegliere di non partecipare alla discussione. Nessuno vi obbliga a farlo.

 
Vladimir Karputov:

Correggetemi, ma la lunghezza delle stringhe non è finita?

https://msdn.microsoft.com/ru-ru/library/sx08afx2.aspx

Non riesco a trovare questa limitazione per MQL5...

Una stringa è fondamentalmente un array uchar, con le sue caratteristiche speciali come la ripartizione automatica. Ecco perché la lunghezza della stringa non è limitata, almeno in modo esplicito, e nemmeno la dimensione dell'array. Ma una stringa molto lunga può potenzialmente esaurire la memoria, come evidenziato da un codice di errore specifico come ERR_STRING_RESIZE_ERROR (Memoria insufficiente per riallocare la stringa).


 
Vasiliy Sokolov:

Una stringa è essenzialmente un array uchar, con i suoi vantaggi, come la ripartizione automatica. Quindi la lunghezza delle stringhe non è limitata, almeno esplicitamente, e nemmeno la dimensione dell'array. Ma una stringa molto lunga può potenzialmente esaurire la memoria, come evidenziato da un codice di errore specifico come ERR_STRING_RESIZE_ERROR (Non abbastanza memoria per riallocare la stringa).


Informazioni preziose anche per me. Grazie.
 
fxsaber:

Solo limitazione di memoria

ovviamente una restrizione di tipo di lunghezza, cioè accanto a INT_MAX
 
Реter Konow:

1. cioè, la velocità dell'algoritmo non è importante. La soluzione è "concettualmente potente" e questo è sufficiente. Ok.

2. Quindi, basta collegarsi tramite il plug-in ed è tutto? Ok.

//--------------------------------------------------------------------

Se il criterio principale per valutare l'algoritmo è"concettualmente potente", allora ho perso.

Se il criterio principale per giudicare l'algoritmo - semplicità, velocità e convenienza - vinco.

A questo punto possiamo chiudere l'argomento.


Potete ancora accelerare e semplificare il "vostro algoritmo" (e ve ne parlano continuamente), se sostituite la stringa con due int[] della stessa dimensione e memorizzate il numero di transazione in uno, e nell'altro mago e cercate l'indice di mago necessario sulla ricerca corrispondente dell'array di transazioni. Sarà più veloce. Naturalmente, questo è un caso speciale che deriva dal tuo esempio.

Peter ha imparato gli array e ha capito che sono strumenti universali e potenti, poi ha cominciato a imparare le stringhe... Vi immaginate cosa succederà quando imparerà le strutture?)

Piotr sostituisce queste funzioni nel suo esempio:

struct SDealMagic {int deal,magic;} array[];
//
void Trading()
{
   Random_orders_of_strategy=MathRand();
   ArrayResize(array,Random_orders_of_strategy);
   for(int i=0; i<Random_orders_of_strategy; i++)
   {
      array[i].deal=i;
      array[i].magic=MathRand()
   }
}
//
int Get_magic(int deal_number)
{
   for(int i=0; i<Random_orders_of_strategy; i++)
      if(array[i].deal==deal_number) return(array[i].magic);
   return(-1);
}

E la velocità prenderà il modello :)

 
Реter Konow:

1. cioè, la velocità dell'algoritmo non è importante. La soluzione è "concettualmente potente" e questo è sufficiente. Ok.

2. Quindi, basta collegarsi tramite il plug-in ed è tutto? Ok.

//--------------------------------------------------------------------

Se il criterio principale per valutare l'algoritmo è"concettualmente potente", allora ho perso.

Se il criterio principale per valutare l'algoritmo - "Semplicità, velocità e convenienza " - vinco.

A questo punto possiamo chiudere l'argomento.


Solo un esempio mostra il più comune - cioè un sacco di informazioni extra, almeno il gestore di debug e definire sulla stampa è assente - altrimenti avrebbe aggiunto altre 300 linee.

Almeno l'intero codice è completamente....

la parte di codice da aggiungere e chiamare attraverso la libreria sarà molto più conveniente, meno codificata e più leggibile

 
Alexandr Andreev:

Quando un ticker arriva con un magik - dovrebbe essere salvato e poi può essere inviato al ticker o al magik in una forma conveniente.

In effetti, la soluzione più veloce sarebbe quella di memorizzare tutte le informazioni nella struttura. Ma gli accessi saranno fatti attraverso l'indice di riferimento ordinato sammiva.

Questa è una soluzione di testa e quindi non è la più rapida. Sarebbe meglio farlo tramite HashMap. Tuttavia, non avremmo bisogno di una struttura nell'implementazione attuale, ma piuttosto di una classe ereditata da una certa interfaccia per descrivere i campi dei suoi ordini.

 
Yury Kulikov:

Puoi velocizzare e semplificare il "tuo algoritmo" (e continuano a parlartene), se sostituisci la stringa con due int[] della stessa dimensione e memorizzi il numero di transazione in uno e magik nell'altro e cerchi l'indice necessario di magik tramite l'enumerazione corrispondente dell'array di transazioni. Sarà più veloce. Naturalmente, questo è un caso speciale che deriva dal tuo esempio.


Questa è una proposta interessante e utile. Mantenere registri paralleli. L'ho fatto nelle mie altre soluzioni.

L'unica cosa è che non sappiamo il numero di ordini che l'EA piazzerà inizialmente. Quale dimensione dovremmo impostare per l'array int?

Ecco perché ho deciso di usare una stringa.

 
fxsaber:

Questa è una soluzione di testa e quindi non è la più rapida. È meglio farlo tramite HashMap. Ma l'implementazione attuale non richiederebbe una struttura, ma una classe ereditata da una certa interfaccia per descrivere i campi dei suoi ordini.


Non ho trovato il filegenerico, sembra che questa sia una vecchia build. Quindi, come sarà fornito il principio di navigazione - qual è il codice sorgente?

 
Реter Konow:

È un suggerimento interessante e intelligente. Mantenere registri paralleli. L'ho fatto nelle mie altre soluzioni.

L'unica cosa che non sappiamo è il numero di ordini che verranno piazzati dall'Expert Advisor. Quale dimensione dovremmo impostare per l'array int?

Così ho deciso di prendere una corda.

Peter, c'è una grande funzione chiamata ArrayResize(). Permette di aumentare la dimensione di un array al momento dell'esecuzione del programma.

Motivazione: