Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 68

 
Vitaly Muzichenko:

È senza dimensione così com'è, ma è bidimensionale, e si può mettere un numero senza dimensione di elementi in due dimensioni.

Cosa stai facendo comunque, hai un'idea di quale dovrebbe essere il risultato del lavoro che fai? O ti stai inventando la logica man mano che vai avanti?

Nell'esempio attuale, voglio essere in grado di piazzare un numero infinito di ordini con qualsiasi lotto per evitare di superare i limiti specificati.

Certo, conosciamo i limiti, ma vorrei fare così.

Procedo dal fatto che se si specifica un elemento tra parentesi, sarà l'ultimo

Così ho ricevuto questo tipo di schifezze. Mi aspettavo un ordine per ordine... Voglio che il risultato (lotto di un tale ordine *coefficiente) sia aggiunto all'ordine invece del lotto

e la questione del recupero dei dati da lì

Voglio ottenere il seguente risultato come lo vedo io

MyArray[0][0.01]

MyArray[1][0.01]

MyArray[2][0.02]

ecc...


void CalcOrders()

{

int CountOrders=0;

double MyArray [99][99];

for(i=OrdersTotal()-1; i>=0; i--)

     {

      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())

         && (OrderMagicNumber()==Magic) && (OrderType()==OP_SELL))

         CountOrders++;

         ArrayResize(MyArray,CountOrders+1);

         MyArray[CountOrders][0]=OrderLots();

         Print("MyArray[CountOrders][0]",MyArray[CountOrders][0]);

     }

}    

2017.01.13 12:51:14.372 2017.01.05 16:30:00  martin GBPUSD,M5: MyArray[CountOrders][0]0.02
2017.01.13 12:51:14.372 2017.01.05 16:25:00  martin GBPUSD,M5: MyArray[CountOrders][0]0.01
2017.01.13 12:51:14.372 2017.01.05 16:25:00  martin GBPUSD,M5: MyArray[CountOrders][0]0.02
2017.01.13 12:51:14.371 2017.01.05 16:20:00  martin GBPUSD,M5: MyArray[CountOrders][0]0.01
2017.01.13 12:51:14.371 2017.01.05 16:20:00  martin GBPUSD,M5: MyArray[CountOrders][0]0.02
2017.01.13 12:51:14.371 2017.01.05 16:15:00  martin GBPUSD,M5: MyArray[CountOrders][0]0.01

 
trader781:

Nell'esempio attuale, voglio essere in grado di piazzare un numero infinito di ordini con qualsiasi lotto per non superare i suoi limiti.

Naturalmente, conosciamo tutti i limiti, ma voglio farlo in questo modo

Procedo dal fatto che se si specifica un elemento tra parentesi, sarà l'ultimo

Così ho ricevuto questo tipo di schifezze. Mi aspettavo un ordine per ordine... Voglio che il risultato(lotto di un tale ordine *coefficiente) sia aggiunto all'ordine invece del lotto

E la questione del recupero dei dati da lì



void CalcOrders()

{

int CountOrders=0;

double MyArray [99][99];

for(i=OrdersTotal()-1; i>=0; i--)

     {

      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())

         && (OrderMagicNumber()==Magic) && (OrderType()==OP_SELL))

         CountOrders++;

         ArrayResize(MyArray,CountOrders+1);

         MyArray[CountOrders][0]=OrderLots();

         Print("MyArray[CountOrders][0]",MyArray[CountOrders][0]);

     }

}    

2017.01.13 12:51:14.372 2017.01.05 16:30:00  martin GBPUSD,M5: MyArray[CountOrders][0]0.02
2017.01.13 12:51:14.372 2017.01.05 16:25:00  martin GBPUSD,M5: MyArray[CountOrders][0]0.01
2017.01.13 12:51:14.372 2017.01.05 16:25:00  martin GBPUSD,M5: MyArray[CountOrders][0]0.02
2017.01.13 12:51:14.371 2017.01.05 16:20:00  martin GBPUSD,M5: MyArray[CountOrders][0]0.01
2017.01.13 12:51:14.371 2017.01.05 16:20:00  martin GBPUSD,M5: MyArray[CountOrders][0]0.02
2017.01.13 12:51:14.371 2017.01.05 16:15:00  martin GBPUSD,M5: MyArray[CountOrders][0]0.01


Potrebbe spiegare di cosa ha bisogno?

Memorizziamo tutto in un array, e poi?

Poi ruotiamo l'array e cerchiamo la posizione che ti serve, cosa?

Lotto che posizione, c'è una definizione, o a occhio, ho guardato la scheda Commercio, sì bisogno 6, giusto?
 
Alekseu Fedotov:

Puoi per favore spiegare di cosa hai bisogno?

Mettiamo tutto in un array, e poi?

Ruoteremo la matrice, cercheremo la posizione che ti serve, cosa?

Guardo la scheda "Trade" e so che me ne servono 6, giusto?

OnTick()

se la condizione per aprire una posizione è corretta

{posizione aperta}

se la condizione di apertura della posizione è corretta

{riempire la stessa quantità }

Se l'ultimo lotto è la posizione 2 - aggiungiamo il lotto *1.5 (la funzione trova l'ultimo restituirà il secondo) e questo sarà il terzo

se questo è il quarto ordine

ricarica {lotto zero+lotto uno}

se sarà il quinto ordine

riempire {lotto 1 posizione +lotto 3}

Attualmente c'è una definizione dell'ultima posizione nella lista

Dobbiamo scriverlo in un array e tirare fuori subito quello giusto, perché non vedo altro modo di implementazione al momento, quindi il numero di ordini e posizioni dovrebbe essere teoricamente infinito

Vi ho mostrato quello che ho fatto nella funzione, non so se è corretto o no.

Ho bisogno di estrarre i dati e sapere in anticipo quale ordine può essere aperto nel mio conto

Non pretendo che il sistema funzioni, l'implementazione è importante

 
Buon tempo. Puoi consigliare se vuoi testare un EA e utilizza i comandi per scrivere e leggere bit e file csv, come sappiamo ci sono errori nella modalità di test per utilizzare le operazioni con questi file
 
Top2n:
Buon pomeriggio. Potete consigliarmi se ho bisogno di testare un EA e usa comandi per scrivere e leggere bit e file csv, come sappiamo gli errori si verificano in modalità test quando si usano operazioni su file.

Non si verificano errori. Scrive solo in una cartella diversa se il flag non è usato

FILE_COMMON

4096

Posizione del file nella cartella condivisa di tutti i terminali client \Terminal\Common\Files. Questo flag è usato quando si aprono i file (FileOpen()), si copiano i file (FileCopy(), FileMove()) e si verifica l'esistenza dei file (FileIsExist())

 
Alexey Viktorov:

Non si verifica alcun errore. Scrive solo in una cartella diversa se il flag non è usato

FILE_COMMON

4096

Posizione del file nella cartella condivisa di tutti i terminali client \Terminal\Common\Files. Questo flag è usato quando si aprono i file (FileOpen()), si copiano i file (FileCopy(), FileMove()) e si verifica l'esistenza dei file (FileIsExist())

Bene, io uso FileOpen()

input string InpFileName="data.bin";
input string InpDirectoryName="";
string path=InpDirectoryName+"//"+InpFileName;

C:\Users\Rassvet\AppData\Roaming\MetaQuotes\Terminal\36A64B8C79A6163D85E6173B54096685\MQL5\Files

5004:ERR_FILE_CANNOT_OPEN = Errore di apertura del file

 
Top2n:

Bene, sto usando FileOpen()

input string InpFileName="data.bin";
input string InpDirectoryName="";
string path=InpDirectoryName+"//"+ InpFileName;

C:\Users\Rassvet\AppData\Roaming\MetaQuotes\Terminal\36A64B8C79A6163D85E6173B54096685\MQL5\Files

5004:ERR_FILE_CANNOT_OPEN = Errore di apertura del file

FileOpen() non è una bandiera... Labandiera è FILE_COMMON.

Se non volete scrivere in una cartella separata, non dovete specificarla come una stringa vuota nel percorso. L'inutile è evidenziato in giallo.


 
Alexey Viktorov:

FileOpen() non è una bandiera... Labandiera è FILE_COMMON.

Se non volete scrivere in una cartella separata, non dovete specificarla come una stringa vuota nel percorso. L'inutile è evidenziato in giallo.


C'è un contatto grazie
 
Ciao!
Puoi dirmi dove posso leggere sulla proprietà #property strict ?
 
Leo59:
Ciao!
Potete dirmi dove posso leggere sulla proprietà #property strict?
Per esempio qui https://docs.mql4.com/ru/basis/preprosessor/compilation
Свойства программ (#property) - Препроцессор - Основы языка - Справочник MQL4
Свойства программ (#property) - Препроцессор - Основы языка - Справочник MQL4
  • docs.mql4.com
Свойства программ (#property) - Препроцессор - Основы языка - Справочник MQL4