[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 214

 
artmedia70:

Per esempio, una funzione che assegna automaticamente a un EA un numero magico unico basato sul nome dell'EA, la coppia di valute e il TF in cui è installato:

Chiama:



Potete anche assegnare un mago usando CRC32 per assicurarvi che sia unico. Oppure, è possibile controllare rapidamente l'integrità di qualsiasi dato precedentemente salvato o ricevuto da un altro terminale, per esempio, via Internet. In questo caso, darb all function))). Usalo con saggezza).

int crc_table[256];
 
/* Run this function previously */
void make_crc_table() 
{
    for (int i = 0; i < 256; i++) {
        int c = i;
        for (int j = 0; j < 8; j++) {
            if(c & 1 != 0)
               c = 0xEDB88320 ^ (c >> 1);
            else 
               c = c >> 1;
        }
        crc_table[i] = c;
    }
}
 
bool table_filled = false;

int crc32(string buf) 
{
    if(!table_filled)
    {
      make_crc_table();
      table_filled = true;
    }
    
    int len = StringLen(buf);
    
    int c = 0xFFFFFFFF;
    for (int i = 0; i < len; i++) {
        c = crc_table[(c ^ StringGetChar(buf,i)) & 0xFF] ^ (c >> 8);
    }
    return (c ^ 0xFFFFFFFF);
}
 
alsu:

E possiamo anche assegnare un mago usando CRC32 per assicurarci che sia unico. Oppure possiamo controllare rapidamente l'integrità di qualsiasi dato precedentemente salvato o ricevuto da un altro terminale, per esempio, via Internet. In questo caso, darb all function))). Usalo con saggezza).


Alexey, grazie per la tua funzione interessante e ben scritta. Gli darò un'occhiata. Ho pensato anch'io a un'idea simile, ed eccola qui.

Bene, eccolo qui:


Victor, ho cercato nel Dock anche per te. Allora, ho visto questi codici negli indicatori di CodeBase, che ho usato per il trading manuale. Si è rivelata tutt'altro che una panacea. Così ho buttato via quasi tutti gli indicatori, e ora il mio Expert Advisor è il suo proprio indicatore, e non ho bisogno di quasi nient'altro!

A proposito, ho imparato molto scavando nella Base! Bisogna essere esperti per capire tutto quello che c'è nel Dock! C'è più dettaglio nel libro di testo, ma mancano molte cose!


Boris, io stesso non uso molto gli indicatori. A meno che non sia un trattino... E le funzioni di stringa sono necessarie per altri scopi. Ne ho scritto sopra. Qui:

hoz:

Per non leggere ogni sorta di codice storto, come quihttps://www.mql5.com/ru/articles/1524.

(Ho notato lì, un mucchio di bug. E in generale, non so cosa pensava l'autore quando ha scritto questo codice).

Per favore, datemi un suggerimento sull'algoritmo di questa variante. Voglio che l'ordine pendente segua l'oggetto, per esempio una linea di tendenza. Oppure l'ordine in sospeso era dietro la linea.

Come viene attuato? Non lo capisco davvero.

Ho capito che dovremmo creare un oggetto. Ma dovremmo specificare in qualche modo che se il prezzo è "dietro" l'oggetto, dovremmo fare qualcosa, o se il prezzo è sulla linea, l'ordine pendente è su di essa.

 

Amici, potete darmi un indizio?

C'è un programma che scrive tutto quello che fa il terminale?

O come fare in modo che un EA scriva i log indipendentemente dal server?

 
polycomp:
Grazie per il chiarimento! Sembra che sia meglio non usare la statica nelle librerie.


E non usarli nemmeno al di fuori di essi. In MT4, le variabili di tipo statico non vengono MAI reinizializzate.
 
herhuman:

Come posso fare in modo che l'EA scriva i log indipendentemente dal server?

Lo fa.
 
hoz:


Per cominciare, articolate chiaramente ciò che vorreste. Gli approcci geometrici sono benvenuti.
 
hoz:


Alexey, grazie per un articolo interessante e scritto con intelligenza. Gli darò un'occhiata. Ho pensato anch'io a un'idea simile, ed eccola qui.


Boris, io stesso non uso molto gli indicatori. A meno che non sia una macchina che sventola... E le funzioni di stringa sono necessarie per altri scopi. Ne ho scritto sopra. Qui:


Victor, nemmeno io ho avuto a che fare con questo, ho visto molto di questo in Base. Da quanto ho capito, gli incroci di prezzo con le linee sono simili con le strisciate. Cattura anche i crossover di linea con i tuoi parametri di ordine e posizione, ecc. Scavate!
 

Cari signori, potreste rispondere alla seguente domanda per un principiante?

if (((((Bid>1.2153)&&(Bid<1.2160) || (Bid>1.2173)&&(Bid<1.2180)) || ( (Bid>1.2100)&&(Bid<1.2107) || (Bid>1.2094)&&(Bid<1.2101)) || (((Bid>1.2092)&&(Bid<1.2099) || (Bid>1.2091)&&(Bid<1.2098))||((Bid>1.2073)&&(Bid<1.2080)||(Bid>1.2005)&&(Bid<1.2012))))) // se il prezzo corrisponde a una delle condizioni elencate nell'intestazione if

int Ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP, "jfh",123 ) // aprire un ordine.

Ho circa 3000 dati di condizioni non ripetitive, quindi li ho messi tutti in un array unidimensionale

doppio masiv [3000];

if ((Bid==masiv[5]) // se il prezzo corrisponde al valore dell'elemento dell'array con l'indice 5

int Ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP, "jfh",123 ) // aprire l'ordine.

DOMANDA: Quale codice può essere usato per scrivere il seguente comando

Se il prezzo corrisponde al valore di uno qualsiasi dei 3000 valori non ripetitivi dell'array doppio masiv [3000]

Aprire un ordine.

L'opzione più semplice è mettere 3000 condizioni nell'intestazione if(.....).

Ma probabilmente ci sono delle varianti più compatte del codice.

Grazie per l'aiuto.


 
solnce600:

Cari signori, potreste dire a un nuovo arrivato la risposta a questa domanda?

if (((((Bid>1.2153)&&(Bid<1.2160 )|| (Bid>1.2173)&&(Bid<1.2180)) || ( (Bid>1.2100)&&(Bid<1.2107) || (Bid>1.2094)&&(Bid<1.2101)) || (((Bid>1.2092)&&(Bid<1.2099) || (Bid>1.2091)&&(Bid<1.2098))||((Bid>1.2073)&&(Bid<1.2080)||(Bid>1.2005)&&(Bid<1.2012))))) // se il prezzo corrisponde a una delle condizioni elencate nell'intestazione if

int Ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP, "jfh",123 ) // aprire un ordine.

Ho circa 3000 dati di condizioni non ripetitive, quindi li ho messi tutti in un array unidimensionale

doppio masiv [3000];

if ((Bid==masiv[5]) // se il prezzo corrisponde al valore dell'elemento dell'array con l'indice 5

int Ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP, "jfh",123 ) // aprire l'ordine.

DOMANDA: Quale codice può essere usato per scrivere il seguente comando

Se il prezzo corrisponde al valore di uno qualsiasi dei 3000 valori non ripetitivi dell'array doppio masiv [3000]

Aprire un ordine.

L'opzione più semplice è mettere 3000 condizioni nell'intestazione if(.....).

Ma ci devono essere delle varianti più compatte del codice.

Grazie per l'aiuto.




Se necessario, si può trovare una soluzione. Per esempio, passare a un array ordinato di interi. Cerca in esso il valore desiderato.
 
solnce600:

Cari signori, potreste dire a un nuovo arrivato la risposta a questa domanda?

if (((((Bid>1.2153)&&(Bid<1.2160) || (Bid>1.2173)&&(Bid<1.2180)) || ( (Bid>1.2100)&&(Bid<1.2107) || (Bid>1.2094)&&(Bid<1.2101)) || (((Bid>1.2092)&&(Bid<1.2099) || (Bid>1.2091)&&(Bid<1.2098))||((Bid>1.2073)&&(Bid<1.2080)||(Bid>1.2005)&&(Bid<1.2012))))) // se il prezzo corrisponde a una delle condizioni elencate nell'intestazione if

int Ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP, "jfh",123 ) // aprire un ordine.

Ho circa 3000 dati di condizioni non ripetitive, quindi li ho messi tutti in un array unidimensionale

doppio masiv [3000];

if ((Bid==masiv[5]) // se il prezzo corrisponde al valore dell'elemento dell'array con l'indice 5

int Ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP, "jfh",123 ) // aprire l'ordine.

DOMANDA: Quale codice può essere usato per scrivere il seguente comando

Se il prezzo corrisponde al valore di uno qualsiasi dei 3000 valori non ripetitivi dell'array doppio masiv [3000]

Aprire un ordine.

L'opzione più semplice è mettere 3000 condizioni nell'intestazione if(.....).

Ma probabilmente ci sono delle varianti più compatte del codice.

Grazie per l'aiuto.



Loop:

   double massiv[];  
//----------------------------------------------------------------------
   for (int i=0; i<ArrayRange(massiv,0); i++) {
      if (MathAbs(NormalizeDouble(Bid-massiv[i],Digits))<=0.5*Point) {
         // цена примерно совпадает со значением в massiv[i]
         // ... обрабатываем совпадение
         }
      }
//----------------------------------------------------------------------