Ho già capito che l'array è preferibile qui))) E in quella variante, che ho descritto sopra non è accurata? (Puramente per interesse. Penso che tutto sia già chiaro)
Qualcosa del genere è quello che avevo in mente. Quindi... la direzione per pensare...
int i_magic=123;
int OrdersMassive[7];
//+----------------------------------------------------------------------------+int start() {
FindOrders(OrdersMassive);
int i, num=0;
for (i=0; i<=7; i++) {
Print("Количество "+GetNameOP(i)+" = "+OrdersMassive[i]);
num+=OrdersMassive[i];
}
Print("Всего ордеров = "+(num-OrdersMassive[6]));
return(0);
}
//+----------------------------------------------------------------------------+void FindOrders(int &mass[]) {
int i, t, k=OrdersTotal()-1;
ArrayInitialize(mass,0);
for (i=k; i>=0; i--) {
if (!OrderSelect(i,SELECT_BY_POS)) continue;
if (OrderMagicNumber()!=i_magic) continue;
if (OrderSymbol()!=Symbol()) continue;
t=OrderType();
mass[t]=mass[t]+1;
}
}
//+----------------------------------------------------------------------------+string GetNameOP(int op) {
switch (op) {
case OP_BUY : return("Buy");
case OP_SELL : return("Sell");
case OP_BUYLIMIT : return("Buy Limit");
case OP_SELLLIMIT: return("Sell Limit");
case OP_BUYSTOP : return("Buy Stop");
case OP_SELLSTOP : return("Sell Stop");
case6 : return("Неторговое изменение баланса");
default : return("Не знаю, чё за тип такой...");
}
}
//+----------------------------------------------------------------------------+
//+----------------------------------------------------------------------------+void FindOrders(int &mass[]) {
int i, t, k=OrdersTotal()-1;
ArrayInitialize(mass,0);
for (i=k; i>=0; i--) {
if (!OrderSelect(i,SELECT_BY_POS)) continue;
if (OrderMagicNumber()!=i_magic) continue;
if (OrderSymbol()!=Symbol()) continue;
t=OrderType();
mass[t]=mass[t]+1;
}
}
//+----------------------------------------------------------------------------+
//+-------------------------------------------------------------------------------------+//| Поиск своих ордеров |//+-------------------------------------------------------------------------------------+void FindOrders(int& t, int& p)
{
t = 0;
p = 0;
for (int i=OrdersTotal() - 1; i>=0; i--)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != i_magic) continue;
if (OrderType() > 1 && OrderType() < 6) p++;
if (OrderType() < 6) t++;
}
pr ("FindOrders(): " + "t = " + t);
pr ("FindOrders(): " + "p = " + p);
}
Non funziona nemmeno. Avevo un difetto lì. Ora è così:
//+-------------------------------------------------------------------------------------+//| Поиск своих ордеров |//+-------------------------------------------------------------------------------------+void FindOrders(int& t, int& p)
{
t = 0;
p = 0;
for (int i=OrdersTotal() - 1; i>=0; i--)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != i_magic) continue;
if (OrderType() > 1 && OrderType() < 6)
{
p++;
}
if (OrderType() < 6)
t++;
else
{
pr("Позиций в рвнке нет!");
}
pr ("FindOrders(): " + "t = " + t);
pr ("FindOrders(): " + "p = " + p);
}
}
Quando non ci sono ordini sul mercato, i contatori non vanno a zero. Questa è una stronzata. Cosa c'è di sbagliato qui non lo so. Guarderò quello che ha scritto Artem.
Non funziona neanche questo. Avevo un difetto lì. Questo è il modo in cui è ora:
Quando non ci sono ordini sul mercato, i contatori non arrivano a zero. Questa è una stronzata. Cosa c'è di sbagliato qui non lo so. Guarderò quello che ha scritto Artem.
Immagino che questo sia l'output delle informazioni.
Giusto. Beh, quello che è successo a me. Alcuni errori stupidi. Ho scavato in C++ per un mese. E ora ho degli errori così stupidi in µl. Il mio cervello deve essere bruciato :(
In generale, va bene cercare gli ordini su ogni tick? O è meglio eseguire su ogni barra? Non ho ancora in testa quale sia meglio in un caso e quale nell'altro.
hoz: In generale, va bene cercare gli ordini su ogni tick? O è meglio eseguire su ogni barra? Non so ancora cosa sia meglio in un caso e cosa sia meglio in un altro.
Se una posizione viene chiusa all'interno di una barra durante il monitoraggio dall'apertura della barra, l'Expert Advisor non conoscerà i cambiamenti nel numero di posizioni fino all'apertura della barra successiva.
è vero, allora sia t che p sono incrementati, poiché qualsiasi ordine del tipo da 2 a 5 è sia un ordine in sospeso che un ordine. Questo significa che dovremmo incrementare entrambi i contatori. E se la condizione è vera:
Allora non c'è un ordine pendente ma c'è un ordine a mercato. Significa che aumenteremo il contatore t, cioè il contatore del numero totale di ordini.
E se non c'è niente, allora stamperemo che non ci sono ordini
Ho già capito che l'array è preferibile qui))) E in quella variante, che ho descritto sopra non è accurata? (Puramente per interesse. Penso che tutto sia già chiaro)
Qualcosa del genere è quello che avevo in mente. Quindi... la direzione per pensare...
E quello che hai lì, non ho davvero guardato ...
Che ne dite di questo?
La mia versione della funzione è più breve ... :)
Forse è così.
Non funziona nemmeno. Avevo un difetto lì. Ora è così:
Quando non ci sono ordini sul mercato, i contatori non vanno a zero. Questa è una stronzata. Cosa c'è di sbagliato qui non lo so. Guarderò quello che ha scritto Artem.
Non funziona neanche questo. Avevo un difetto lì. Questo è il modo in cui è ora:
Quando non ci sono ordini sul mercato, i contatori non arrivano a zero. Questa è una stronzata. Cosa c'è di sbagliato qui non lo so. Guarderò quello che ha scritto Artem.
Immagino che questo sia l'output delle informazioni.Togliete questo dal giro.
Immagino che questo sia l'output delle informazioni.Togliere questo dal ciclo
Giusto. Beh, quello che è successo a me. Alcuni errori stupidi. Ho scavato in C++ per un mese. E ora ho degli errori così stupidi in µl. Il mio cervello deve essere bruciato :(
In generale, va bene cercare gli ordini su ogni tick? O è meglio eseguire su ogni barra? Non so ancora cosa sia meglio in un caso e cosa sia meglio in un altro.
t è il numero di tutti gli ordini.
p è il numero di ordini pendenti
Se la condizione è vera:
è vero, allora sia t che p sono incrementati, poiché qualsiasi ordine del tipo da 2 a 5 è sia un ordine in sospeso che un ordine. Questo significa che dovremmo incrementare entrambi i contatori. E se la condizione è vera:
Allora non c'è un ordine pendente ma c'è un ordine a mercato. Significa che aumenteremo il contatore t, cioè il contatore del numero totale di ordini.
E se non c'è niente, allora stamperemo che non ci sono ordini
t = OrdiniTotali();
perché contare???? ha contato??
Ciao, cerco errori in questa funzione.
L'idea è che gli ordini pendenti che non sono stati aperti dovrebbero essere cancellati due giorni dopo essere stati piazzati.
min=1440;
Grazie, pako.