Aiutami a imparare a programmare.

 

Come si raccolgono e si usano le informazioni sui commercianti? Ho bisogno di raccogliere informazioni su tutte le posizioni EA, il loro volume, profitto, tipo, prezzo di apertura. E poi fare riferimento alle informazioni sulla posizione più recente, o la posizione più grande. Trovo difficile scrivere in array.

1. È proprio necessario avere a che fare con gli array?

2. è meglio usare un array di strutture o diversi array?

3. Perché ho bisogno di un array dinamico se devo comunque allocare la memoria? Non è più facile usare un array statico? O non possiamo fare a meno di uno dinamico, perché può essere indicizzato al contrario?


Codice di esempio senza oop, perché non potrei nemmeno scrivere questo costrutto, se non vi dispiace, grazie.

 
pribludilsa:

Come si raccolgono e si usano le informazioni sui commercianti? Ho bisogno di raccogliere informazioni su tutte le posizioni EA, il loro volume, profitto, tipo, prezzo di apertura. E poi fare riferimento alle informazioni sulla posizione più recente, o la posizione più grande. Trovo difficile scrivere in array.

1. È proprio necessario avere a che fare con gli array?

2. è meglio usare un array di strutture o diversi array?

3. Perché ho bisogno di un array dinamico se devo comunque allocare la memoria? Non è più facile usare un array statico? O non possiamo fare a meno di uno dinamico, perché può essere indicizzato al contrario?


Codice di esempio senza oop, perché non potrei nemmeno scrivere questo costrutto, se non è troppo disturbo, grazie.

Perché costruire qualcosa? Dovete fare un loop attraverso le posizioni ed elaborare le informazioni - e non avete bisogno di assemblarle. Tutto ciò che si raccoglie nello stesso momento è un'informazione obsoleta.

 

1. Quando si ha a che fare con la storia del commercio, di solito si rinuncia agli array. Questo è più o meno come nell'esempio:https://www.mql5.com/ru/docs/trading/historyselect. Vale la pena esplorare tutte le funzioni nella colonna a sinistra del link (e tutti gli esempi lì).

2. Un array di strutture è molto utile. Ma le funzioni integrate che possono essere applicate agli array multidimensionali - ArraySort() ecc.

3. Se siete sicuri che la dimensione iniziale specificata dell'array sia sufficiente, potete usare anche gli array statici. Se le loro dimensioni sono ragionevoli.

 
Vladimir Karputov:

Perché raccogliere qualcosa? È necessario scorrere le voci ed elaborare le informazioni - e non è necessario raccoglierle. Tutto ciò che si raccoglie nello stesso periodo è un'informazione obsoleta.

Sto cercando di scrivere una griglia senza un oop. Così ho deciso di fare pratica per iniziare, e non riesco a costruire una voce nell'array. O forse non ne ho bisogno? Qual è il modo migliore per farlo? Beh, stavo pensando in un loop. È così che ho iniziato.
int OnInit()
{
ENUM_POSITIONS_TYPE ar [1000]; //проинициализирую нулем еще, просто я не копирую, а вручную всё пишу, и некоторые очевидные куски не пишу.
 return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{}
void OnTick()
{
for(int index=PositionsTotal()-1; index>=0; index--)
{
ulong ticket=PositionGetTicket(index);
PositionSelectByTicket(ticket); // И вот я готов вызывать функции для выуживания данных, только я не знаю //как их вписывать в массив. 
 
Dmitry Fedoseev:

1. Quando si ha a che fare con la storia del commercio, di solito si rinuncia agli array. Questo è più o meno come nell'esempio:https://www.mql5.com/ru/docs/trading/historyselect. Vale la pena esplorare tutte le funzioni nella colonna a sinistra del link (e tutti gli esempi lì).

2. Un array di strutture è molto utile. Ma le funzioni integrate che possono essere applicate agli array multidimensionali - ArraySort() ecc.

3. Se siete sicuri che la dimensione iniziale specificata dell'array sia sufficiente, potete usare anche gli array statici. Se le loro dimensioni sono ragionevoli.

Non sono io con la storia, sono le posizioni che voglio analizzare che sono aperte. Qual è il modo migliore per farlo?
 
Sto scrivendo una griglia senza OOP. Ho bisogno di scoprire quale delle posizioni aperte è la più grande, e che tipo di trade è, comprare o vendere. Ho capito che devo prima raccogliere i dati da ogni posizione nel ciclo, scriverli in un array, poi analizzare l'array, o prendere l'elemento più recente, se è dinamico con indicizzazione inversa.
 
pribludilsa:
Non è con la storia, voglio analizzare le posizioni aperte. Qual è il modo migliore per farlo?

Quasi lo stesso, ma senza HistorySelect(). Iniziamo con la funzione PositionsToatal() e poi da quel link esploriamo tutte le funzioni che iniziano con Position

 
pribludilsa:
Scrivo una griglia senza OOP. Ho bisogno di sapere quale delle posizioni aperte è la più grande, ed è da quale tipo di operazioni, comprare o vendere. Ho capito che dovrei prima raccogliere i dati da ogni posizione nel ciclo, scriverli in un array e poi analizzare l'array o prendere l'elemento più recente se è dinamico con indicizzazione inversa.

Non è necessario schierare le posizioni e cercare gli alti e i bassi man mano che si procede.

 
Dmitry Fedoseev:

Non c'è bisogno di passare attraverso l'array e cercare il massimo e il minimo man mano che si procede.


Grazie. Ma può farci un breve esempio? Dobbiamo scriverlo per confrontarlo, no? E scriverlo dove se non in un array? Non riesco a capire come fare senza scrivere. Stiamo lavorando con una posizione in un passaggio di loop, come possiamo confrontare un'altra posizione se è in un altro passaggio di loop?

 
pribludilsa:

Grazie. Può farci un breve esempio? Dobbiamo scriverlo per confrontarlo, no? E scriverlo dove ma in un array? Non riesco a capire come fare senza scrivere. Stiamo lavorando con una posizione in un passaggio di loop, come possiamo confrontare un'altra posizione se è in un altro passaggio di loop?

int Magic=123;

double maxBuyPrice=0;
ulong maxBuyTicket=0;
double minSellPrice=DBL_MAX;
ulong minSellTicket=0;   

for(int i=0;i<PositionsTotal();i++){
   ulong ticket=PositionGetTicket(i);
   if(ticket!=0){
      long magic=PositionGetInteger(POSITION_MAGIC);
      string symbol=PositionGetString(POSITION_SYMBOL);
      if(magic==Magic && symbol==Symbol()){
         long type=PositionGetInteger(POSITION_TYPE);
         if(type==POSITION_TYPE_BUY){
            if(PositionGetDouble(POSITION_PRICE_OPEN)>maxBuyPrice){
               maxBuyPrice=PositionGetDouble(POSITION_PRICE_OPEN);
               maxBuyTicket=ticket; // тут можно и другие данные позиции запоминать в переменные
            }
         }
         else if(type==POSITION_TYPE_SELL){
            if(PositionGetDouble(POSITION_PRICE_OPEN)<minSellPrice){
               minSellPrice=PositionGetDouble(POSITION_PRICE_OPEN);
               minSellTicket=ticket; // и тут
            }      
         }
      }
   }
}

if(maxBuyTicket!=0){
   
}
if(minSellTicket!=0){

}
 
Dmitry Fedoseev:

Grazie per questo esempio.

      long magic=PositionGetInteger(POSITION_MAGIC);
      string symbol=PositionGetString(POSITION_SYMBOL);
      if(magic==Magic && symbol==Symbol())

Pensavo di essere l'unico che preferiva metterla così, piuttosto che scrivere "non lo so".

      if(PositionGetInteger(POSITION_MAGIC)==Magic && PositionGetString(POSITION_SYMBOL)==Symbol())

hz significa "vorrei sapere"... non fraintendetemi...


ps; Aiuta a tenere traccia di tutto durante il debug del programma.

Motivazione: