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

 
wishmast:

Per favore, ditemi perché la funzione OrdersTotal() scrive -1 quando cerca gli ordini.

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

perché non solo OrdersTotal()?

Il conteggio degli ordini in questa funzione parte da 0 o da 1? Cioè, se c'è un ordine, OrdersTotal() è uguale a 0 o 1?

contando da zero
 
wishmast:

Per favore, ditemi perché la funzione OrdersTotal() scrive -1 quando cerca gli ordini.

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

perché non solo OrdersTotal()?

Il conteggio degli ordini in questa funzione parte da 0 o da 1? Cioè, se c'è un ordine, OrdersTotal() è uguale a 0 o 1?

OrdersTotal() mostra la quantità, cioè, se c'è un ordine, alloraOrdersTotal() è uguale a 1, ma nella lista degli ordini, il rapporto inizia con 0

0 - primo ordine

1 - secondo ordine

2 - terzo

e così via.

Quindi, se iniziamo la ricerca dalla fine della lista, dobbiamosottrarre uno dal numero totale diOrdersTotal().

 
Sergey Gritsay:

OrdersTotal() mostra la quantità, cioè se c'è un ordine, alloraOrdersTotal() sarà uno, ma nella lista degli ordini il rapporto parte da zero

0 - primo ordine

1 - secondo ordine

2 - terzo

e così via.

Quindi, se iniziamo la ricerca dalla fine della lista, dobbiamosottrarre uno dal numero totale diOrdersTotal().

Ma se non sottraiamo uno alla prima espressione, non sarà un errore, perché se abbiamo un ordine, ci saranno due iterazioni. A meno che non abbiamo bisogno di fare due iterazioni quando possiamo fare tutto quello che ci serve in una sola, quindi -1, giusto?
 
wishmast:
Ma se la prima espressione non sottrae uno, non sarà un errore, se abbiamo un ordine, ci saranno due iterazioni. A meno che non ci sia bisogno di fare due iterazioni quando tutto ciò di cui abbiamo bisogno può essere fatto in una, quindi -1, giusto?
Sì, proprio così.
 
Sergey Gritsay:
Sì corretto

Non è proprio così.

Si può usare il decremento del prefisso.

for(int i = OrdersTotal(); i >= 0; --i)
 
trader781:
Dato che abbiamo una pila di ordini, perché non possiamo semplicemente tirare fuori quello che ci serve? (Quelli giusti) e farne ciò che vogliamo? Per esempio l'ordine (i-4)
Perché funzionerà solo nel tester MT4. O quando si fa trading su un solo simbolo e un solo questo EA.
 
Vitalie Postolache:
Perché questo funzionerà solo nel tester MT4. O quando si fa trading su un solo simbolo e un solo questo EA.

Se ci pensi, l'EA è lo stesso per ogni coppia, solo il saldo del conto è comune (lo switch sarà l'ultimo)

il filtro va a tutti gli ordini che soddisfano la condizione market-open dall'Expert Advisor, se il simbolo coincide

cosa c'è che non va?

 
trader781:

Se ci pensi, l'EA è lo stesso per ogni coppia, solo il saldo del conto è comune (lo switch sarà l'ultimo)

il filtro va a tutti gli ordini che soddisfano la condizione market-open dell'EA, se la simulazione corrisponde

cosa c'è che non va?

Beh, ti è già stato spiegato sopra cosa c'è di sbagliato. Possiamo contare gli ordini solo come nostri e prendere gli indici dell'array per la quantità totale - otterremo un array con celle vuote. E questo a cosa serve? E se l'array non fosse vuoto, i campi "inutili" conterranno spazzatura inutile che porterà ad errori, e stiamo parlando di soldi.
 
Vitalie Postolache:
Beh, ti è già stato spiegato sopra cosa c'è di sbagliato. Gli ordini contano solo i propri, e prendono gli indici dell'array per il numero totale - si ottiene un array con celle vuote. E questo a cosa serve? E se l'array non fosse vuoto, i campi "inutili" conterranno spazzatura inutile che porterà a errori, e stiamo parlando di soldi.

Ok, è così che funziona.

struct myorder
{
int    Ticket;
double orderopenprice;
int   ordertype;
double profit;
double stoploss;
double  lot;
};

myorder orders[];

int i;
int count1=0;
void CalcOrders()
{
for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
         && (OrderMagicNumber()==Magic) && (OrderType()<2))
         orders[count1].Ticket=OrderTicket();
         orders[count1].lot=OrderLots();
         orders[count1].orderopenprice=OrderOpenPrice();
         orders[count1].ordertype=OrderType();
         orders[count1].profit=OrderProfit();
         orders[count1].stoploss=OrderStopLoss();
         count1++;
     }
}    


giusto?

 
Aiutami a scrivere la condizione: Se l'importo dei fondi disponibili nel conto è inferiore al 50% del deposito, allora {azione} MT5
Motivazione: