Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 120

 
Ihor Herasko:

Sì, lo vedo. E vedo la risposta alla domanda nel post sottohttps://www.mql5.com/ru/forum/160587/page115#comment_6521492. In altre parole, il problema è che la funzionalità non è divisa in sotto-attività logiche. Hai messo insieme: l'analisi degli ordini, la decisione di un'azione commerciale e l'esecuzione di un'operazione.

Un tale compito può essere risolto esattamente in tre fasi:

  1. Raccolta di informazioni sugli ordini che devono essere monitorati dal programma. Questo è solo il ciclo di valutazione dell'ordine, che avete già. Il risultato di questo ciclo deve essere l'array di ordini.
  2. Calcolo dei segnali di trading. Il risultato del calcolo è un comando per aprire e/o chiudere ordini. Dipende dalla strategia di trading. In precedenza, quando non c'era l'enumerazione, usavo i codici: 0 - nessun segnale, 1 - apri acquisto, -1 - apri vendita, 2 - chiudi acquisto, -2 - chiudi vendita.
  3. Esecuzione di un'operazione commerciale. Se c'è un segnale di trading e uno degli ordini (punto 1) è adatto ad esso, viene eseguita un'operazione di trading. Dopo di che, l'intero algoritmo viene riavviato a partire dal punto 1. In alcuni casi, si esce anche da OnTick per continuare con il tick successivo.

Bene, grazie. Almeno è chiaro cosa fare. Cercherò di capire "come" farlo da solo. Anche se non ho ancora familiarità con gli array. Grazie ancora comunque.

 

Ditemi come uscirne!!!


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

{

OrderSelect(i,SELECT_BY_POS);

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

pausa;

L'avvertimento è: il valore di ritorno di 'OrderSelect' deve essere controllato

Inqualealtromododovrebbe essere controllatoquesto valore'OrderSelect'?

se faccio così: j=OrderSelect(); È corretto?


 
Rewerpool:

Ditemi come uscirne!!!


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

{

OrderSelect(i,SELECT_BY_POS);

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

pausa;

L'avvertimento è: il valore di ritorno di 'OrderSelect' deve essere controllato

Inqualealtromododovrebbe essere controllatoquesto valore'OrderSelect'?

se faccio così: j=OrderSelect(); È corretto?


 if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
 
Alekseu Fedotov:

Non ha funzionato!

((((

 
Ho scritto nel file, tutto va bene, ma ora come faccio a salvare dati come "eurusd" "1.2242" dati temporanei, ecc.
 
Mickey Moose:L'ho scritto in un file, tutto va bene, ma ora come faccio a sparare i dati, per esempio "eurusd" "1.2242" dati temporanei ecc?

stringa s=FileReadString(F1); // Leggere la prossima linea del file di testo
StringSplit(s, "," , a); // Dividere gli elementi separati da virgole nell'array
datetime T1=StrToTime(a[4]); // La trasformazione procede ulteriormente...
int ord=StrToInteger(a[8]);
double Price=StrToDouble(a[12]);

 
novichok2018:

Bene, grazie. Almeno è più chiaro cosa fare. Cercherò di capire il "come" da solo. Non ho ancora familiarità con gli array, però. Comunque, grazie ancora.

Scrivi almeno un blocco e mostramelo. In questo caso vi diranno di più.

 
Rewerpool:

Non ha funzionato!


Leggete attentamente, di nuovo.

 if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

Tutto il codice sarà come questo

   for(int i=OrdersTotal()-1; i>=0; i--) 
     {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
       if(OrderMagicNumber()==Magic && OrderType()==OP_SELL)
          {
         break;
          }
        }
      }
 
Rewerpool:

Non ha funzionato!


Quindi non hai fatto nulla. L'hai scritto sopra:

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

E tu l'hai scritto senza controllare. Anche se così sarebbe più leggibile:

for (int i = OrdersTotal() - 1; i >= 0; --i)
{
   if (!OrderSelect(i, SELECT_BY_POS))
      continue;
   ....
}
 

@Ihor Herasko @Alekseu Fedotov

GRAZIE!!! HA FUNZIONATO COSÌ!