Quale disegno è corretto? - pagina 7

 
Vladon:
Una volta pubblicavo il mio set sulla chiusura dei diversi tipi in codebase.
In questo caso stai dando dei file compilati, che non è di alcuna utilità in questo ramo.
Vladon:
https://www.mql5.com/ru/code/mt4

E qui, scusate, ho sbagliato forum.

Senza offesa.

 

Oh, non è questo :-), ora.


https://www.mql5.com/ru/code/9052

 
int Close_This_Symbol_All()
{
//----
  string a = "Всего ордеров = " + DoubleToStr(OrdersTotal(),0)+ "\n";
  for (int Cnt = OrdersTotal(); Cnt >= 0; Cnt--) 
  {
    if(!OrderSelect(Cnt, SELECT_BY_POS, MODE_TRADES)) break;

        while (!IsTradeAllowed()) Sleep(1000);
        RefreshRates();
        if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), slip, CLR_NONE);
        if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), slip, CLR_NONE);
       Comment(a+ GetLastError());  
  }
//----
   return(0);
}
Allora un tale disegno dovrebbe, in teoria, chiudere tutti gli ordini, ma chiude solo una coppia della finestra corrente, qual è l'errore?
 
Vladon:

Oh, non è questo :-), ora.


https://www.mql5.com/ru/code/9052


Sì, il tuo kit è buono, tuttavia non riesco a capire dove sia il bug nel mio codice.
 
valenok2003:

Sì, il tuo kit è buono, tuttavia non riesco a capire dove sia il bug nel mio codice.

int Close_This_Symbol_All()
{
//----
  string a = "Всего ордеров = " + DoubleToStr(OrdersTotal(),0)+ "\n";
  for (int Cnt = OrdersTotal(); Cnt >= 0; Cnt--) 
  {
    if(!OrderSelect(Cnt, SELECT_BY_POS, MODE_TRADES)) break;

        while (!IsTradeAllowed()) Sleep(1000);
        RefreshRates();
        if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), slip, CLR_NONE);
        if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), slip, CLR_NONE);
       Comment(a+ GetLastError());  
  }
//----
   return(0);
}


for (int  Cnt = OrdersTotal(); Cnt >= 0; Cnt--) 
A volte la testardaggine è sorprendente. A pagina 3 di questo thread e più in basso vi è stato mostrato un esempio corretto di annullamento degli ordini. RTFM alla fine della giornata. Quante volte ve lo devo dire: uscite fuori da un array. Ordini con numero
OrdersTotal()

non esiste! Allora funzionerà:

if(!OrderSelect(Cnt, SELECT_BY_POS, MODE_TRADES)) break;
 
VladislavVG:
A volte la testardaggine è semplicemente stupefacente. A pagina 3 di questo thread e più in basso vi è stato mostrato l'esempio corretto di order brute force. RTFM alla fine della giornata. Quante volte te lo devo dire: Esci dalla matrice. Ordini con numero

non esiste! Allora funzionerà:


Vladislav, mi scuso, non è testardaggine, ma piuttosto disattenzione. Stavo sperimentando e non ho corretto il codice.

Certo che lo è:

for (int  Cnt = OrdersTotal()-1; Cnt >= 0; Cnt--) 

Tuttavia, questo non sembra essere il motivo, perché il disegno corretto

int Close_This_Symbol_All()
{
//----
  string a = "Всего ордеров = " + DoubleToStr(OrdersTotal(),0)+ "\n";
  for (int Cnt = OrdersTotal()-1; Cnt >= 0; Cnt--) 
  {
    if(!OrderSelect(Cnt, SELECT_BY_POS, MODE_TRADES)) break;

        while (!IsTradeAllowed()) Sleep(1000);
        RefreshRates();
        if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), slip, CLR_NONE);
        if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), slip, CLR_NONE);
       Comment(a+ GetLastError());  
  }
//----
   return(0);
}

chiude comunque gli ordini solo sulla coppia della finestra su cui si lancia lo script, ma non su tutte le coppie.

 

Dal profilo dello starter "Scrivo in MQL4, incluso bespoke" - un tipico esempio di eccesso di zelo.

Capisco che i programmatori possano essere medi. Ci si abitua. E io stesso a volte scrivo cattivo codice, anche se ci provo. Ma cosa sarebbe...

Confermo la vecchia supposizione di qualcuno, lo starter ha la lana in testa.

 
valenok2003:


Vladislav, mi scuso, non è testardaggine, ma piuttosto disattenzione. Stavo sperimentando e non ho corretto il codice.

Certo che lo è:

Tuttavia, questo non sembra essere il motivo, perché il disegno corretto

chiude ancora gli ordini solo per una coppia della finestra su cui viene lanciato lo script, ma non tutte le coppie.

Se tutte le coppie, allora non stai usando correttamente Ask, Bid - stai prendendo dal grafico corrente. Se si elaborano errori quando si chiudono gli ordini - si vedrebbero i messaggi.

invece di Ask - MarketInfo(OrderSymbol(),MODE_ASK); invece di Bid - MarketInfo(OrderSymbol(),MODE_BID);

Buona fortuna.

ZS e cambiare il nome dello script, perché secondo il nome funziona correttamente ;).

 
gip:

Dal profilo dello starter "Scrivo in MQL4, incluso bespoke" - un tipico esempio di eccesso di zelo.

Capisco che i programmatori possano essere medi. Ci si abitua. E io stesso a volte scrivo cattivo codice, anche se ci provo. Ma cosa sarebbe...

Confermo la vecchia supposizione di qualcuno, il topic-starter ha la lana in testa.


È un peccato sentire questo, naturalmente. Tuttavia, non prendo mai ordini che non posso soddisfare. E voi, spero, capite che anche i livelli degli ordini possono variare. E, come ha detto qualcuno - Non c'è vergogna nel non sapere. È un peccato non chiedere.... E da quanto ho capito, questo forum esiste proprio per offrire un'opportunità di apprendimento. E così il tuo snobismo non mi è chiaro, e la tua critica non la accetto. Anche se ammetto che sei il più intelligente di questo forum.

P.S. L'arte della programmazione non sta nella capacità di scrivere codice, ma nella capacità di fare un algoritmo corretto. È come se tu avessi guidato una Lada per tutta la vita e poi ti fossi trasferito alla Mercedes e non sapessi dove sono tutte le manopole e i pulsanti, non sei diventato un cattivo guidatore per questo.

 
VladislavVG:

Se tutte le coppie, non stai usando correttamente Ask, Bid - stai prendendo dal grafico corrente. Se hai elaborato degli errori durante la chiusura degli ordini, vedresti il messaggio.

invece di Ask - MarketInfo(OrderSymbol(),MODE_ASK); invece di Bid - MarketInfo(OrderSymbol(),MODE_BID);

Buona fortuna.


Grazie mille, sto elaborando gli errori, il messaggio ritorna - prezzo sbagliato, ma non riesco a capire cosa c'è di sbagliato.
Motivazione: