Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 645

 
Alexey Kozitsyn:
Supponendo che l'ultimo ordine per tempo non sia l'ultimo ordine della lista, il tuo esempio non è corretto perché non tiene conto del primissimo ordine (#0).

Si trova prima il biglietto dell'ultimo ordine nel tempo, e poi si fa un ciclo con modifiche. Quando un biglietto dell'ultimo ordine trovato in precedenza viene incontrato nel ciclo, viene saltato.

Per trovare il biglietto dell'ultimo ordine, non abbiamo bisogno di cercare in tutta la storia di tutti gli ordini - possiamo impostare la dimensione della storia cercata - un giorno, due, tre, una settimana... "E salta tutti gli ordini con l'ora, che è precedente all'intervallo di ricerca. Per esempio: la dimensione della cronologia di ricerca è impostata a 1 giorno - tutti gli ordini, che erano precedenti al tempo corrente - un giorno, sono saltati. Ma abbiamo ancora bisogno del ciclo. Se prendiamo solo l'ultimo ordine della lista, può essere Buy, e abbiamo bisogno di Sell. È il penultimo. Così, non otterremo i suoi dati.

 
Artyom Trishkin:

Si trova prima il biglietto dell'ultimo ordine nel tempo, e poi si fa un ciclo con modifiche. Quando un biglietto dell'ultimo ordine trovato in precedenza viene incontrato nel ciclo, viene saltato.

Per cercare il biglietto dell'ultimo ordine, non è necessario eseguire l'intera cronologia di tutti gli ordini - è possibile impostare la dimensione della cronologia ricercata - un giorno, due, tre, una settimana... "E salta tutti gli ordini con l'ora, che è precedente all'intervallo di ricerca. Per esempio: la dimensione della cronologia di ricerca è impostata a 1 giorno - tutti gli ordini, che erano precedenti al tempo corrente - un giorno, sono saltati. Ma il ciclo è ancora necessario. Se prendiamo solo l'ultimo ordine della lista, può essere Buy, e abbiamo bisogno di Sell. È il penultimo. Così, non otterremo i suoi dati.

Artem, grazie per la spiegazione naturalmente, ma so come trovare l'ordine nella lista. E la mia risposta non era a te, ma ad Alexei sul suo esempio (in particolare, che la condizione "> 0" non funziona).

È meglio scrivere nel modo giusto (solo con il codice). Sono pigro :)

 
Alexey Kozitsyn:
Se supponiamo che l'ultimo ordine non sia l'ultimo della lista, il tuo esempio non è corretto perché non considera il primissimo ordine (ordine 0).

Come può non esserlo?

Alexey Viktorov:

Una variante supplementare: prima del ciclo, scrivere nella variabile _1 un biglietto, per esempio, di ordine zero, e poi

/********************Script program start function********************/
void OnStart()
{
  int i, t1, t2, modTicket , total = OrdersTotal();
   datetime d1, d2;
    if(OrderSelect(0, SELECT_BY_POS))
     {
      t1 = OrderTicket();
       d1 = OrderOpenTime();
     }    
    for(i = 1; i < total; i++)
     {
      if(OrderSelect(i, SELECT_BY_POS))
       {
        t2 = OrderTicket();
         d2 = OrderOpenTime();
          modOrder((d1 < d2) ? t1 : t2);
         t1 = d1 < d2 ? t2 : t1;
        d1 = d1 < d2 ? t2 : t1;
       }
     }
}/********************************************************************/

void modOrder(int ticket);
{
// здесь код модификации ордера.
}/********************************************************************/
Spero di non aver incasinato qualcos'altro.
 
Alexey Viktorov:

Come può non esserlo?

/********************Script program start function********************/
void OnStart()
{
  int i, t1, t2, modTicket , total = OrdersTotal();
   datetime d1, d2;
    if(OrderSelect(0, SELECT_BY_POS))
     {
      t1 = OrderTicket();
       d1 = OrderOpenTime();
     }    
    for(i = 1; i < total; i++)
     {
      if(OrderSelect(i, SELECT_BY_POS))
       {
        t2 = OrderTicket();
         d2 = OrderOpenTime();
          modOrder((d1 < d2) ? t1 : t2);
         t1 = d1 < d2 ? t2 : t1;
        d1 = d1 < d2 ? t2 : t1;
       }
     }
}/********************************************************************/

void modOrder(int ticket);
{
// здесь код модификации ордера.
}/********************************************************************/
Spero di non aver sbagliato altro, non ho ricontrollato...
Se lo prendi come antipasto, va bene, ma è meglio farlo dalla fine... Anche se, se non si cancellano gli ordini, va bene lo stesso.
 
Alexey Kozitsyn:
Se la prendi come variante di partenza, va bene, ma è meglio farlo dalla fine... Anche se, se non dobbiamo cancellare gli ordini, saremo a posto anche noi.

In effetti, per modificare diversi ordini, bisogna attraversarli in un ciclo. Così si scopre che i microsecondi aggiuntivi saranno spesi solo per confrontare il tempo di apertura dell 'ordine. Questa sarà una variante ottimale.

La direzione del ciclo ... Non ha molta importanza perché non si tratta di chiudere gli ordini. Ho confuso la mia versione precedente e ho scritto "chiudere", quindi il ciclo era corrispondente anche lì...

 

Buon pomeriggio!

Mi sto cimentando nella scrittura di un indicatore. Voglio ottenere visivamente ciò che ho voluto, ma voglio che l'indicatore invii le informazioni richieste, per esempio, informazioni testuali, o di tipo int. Come posso farlo, tenendo conto che ho 10 buffer, secondo i quali si disegnano le linee? Grazie!

 

Buon pomeriggio, non prendermi a calci, ma ho trovato questa voce e ha deciso di fare alcune domande ... Ho un terminale ... ho scaricato da un broker MT4 (1) ... eseguito la demo ... dopo qualche tempo registrato in un altro, anche

Mi è stato offerto di scaricare il terminale ... scaricato (2) come risultato, 2 terminale non va ... e 1 è apparso profilo 2 broker ... in generale, tutti confusi ... poi da binario viene una lettera che si spostano a MT5 ... installato e a prima vista, tutto molto meglio di MT4 . La mia domanda è se è possibile aprire un conto con diversi broker su un unico terminale? e posso trasferirli tutti su mt5? e se gli indicatori di MT4 si adattano al 5?

grazie ...

 

Un aiuto così attivo, grazie mille.

Già alle prese con un nuovo problema)

Per favore, aiutatemi a scoprire il fatto del nuovo aspetto dei vertici ZigZag.

Ho provato a memorizzare in una variabile il prezzo del primo vertice, poi confrontarlo, se il prezzo è cambiato alza un flag, c'è un nuovo vertice.
if(newZZH1_PR!=GetExtremumZZPrice(Symbol(),T_F_,1))
{
   newZZH1_PR=GetExtremumZZPrice(Symbol(),T_F_,1);
   newZZH1=true;
}

Ma si è scoperto che la funzione, nel tempo, restituisce caoticamente, quindi il prezzo del primo vertice, poi il secondo.

Si scopre che la nuova cima non è formata e la bandiera è alzata.
double GetExtremumZZPrice(string sy="", int tf=0, int ne=0)
{

  if (sy=="" || sy=="0") sy=Symbol();
  double zz;
  int    i, k=iBars(sy, tf), ke=0;

  for (i=1; i<k; i++) {
    zz=iCustom(sy, tf, "ZigZag", ExtDepth,ExtDeviation,ExtBackstep, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(zz);
    }
  }
  Print("GetExtremumZZPrice(): Экстремум ЗигЗага номер ",ne," не найден");
  return(0);
}
Idealmente la funzione dovrebbe essere modificata in modo che restituisca sempre il prezzo del primo vertice, ma sarei felice di qualsiasi soluzione.
 
mila.com:

Un aiuto così attivo, grazie mille.

Già alle prese con un nuovo problema)

Per favore, aiutatemi a scoprire il fatto del nuovo aspetto dei vertici ZigZag.

Provato a ricordare in una variabile il prezzo del primo vertice, poi confrontare, se il prezzo è cambiato sollevare una bandiera, c'è un nuovo vertice.
if(newZZH1_PR!=GetExtremumZZPrice(Symbol(),T_F_,1))
{
   newZZH1_PR=GetExtremumZZPrice(Symbol(),T_F_,1);
   newZZH1=true;
}

Ma si è scoperto che la funzione, nel tempo, restituisce caoticamente, quindi il prezzo del primo vertice, poi il secondo.

Si scopre che non si forma nessun nuovo vertice, ma si alza la bandiera.
double GetExtremumZZPrice(string sy="", int tf=0, int ne=0)
{

  if (sy=="" || sy=="0") sy=Symbol();
  double zz;
  int    i, k=iBars(sy, tf), ke=0;

  for (i=1; i<k; i++) {
    zz=iCustom(sy, tf, "ZigZag", ExtDepth,ExtDeviation,ExtBackstep, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(zz);
    }
  }
  Print("GetExtremumZZPrice(): Экстремум ЗигЗага номер ",ne," не найден");
  return(0);
}
Idealmente la funzione dovrebbe essere modificata in modo che restituisca sempre il prezzo del primo vertice, ma sarei felice di qualsiasi soluzione.

Lo zigzag ha in realtà tre buffer - 0 totale, 1 - l'estremità superiore, 2 - l'estremità inferiore.

Alla barra zero, c'è sempre un valore in qualche buffer - o nel primo (se il ginocchio è su) o nel secondo (se è giù). Di conseguenza, il buffer zero sulla candela corrente ha sempre un valore - o dal primo buffer o dal secondo.

Bene, per trovare un chiaro estremo superiore, dovremmo cercare il primo valore non vuoto del primo buffer, a partire dalla barra 1. Per l'estremo inferiore, dobbiamo trovare il primo valore non bianco del secondo buffer, partendo dalla barra 1.

Per capire se questo è un nuovo top o bottom, dobbiamo ricordare il tempo del precedente top/top trovato, e confrontarlo con quello che abbiamo trovato finora.

È un po' sconclusionato, ma spero che capirete...

 
Ci sono due terminali MT5. Problema: posso scrivere script per permettere solo operazioni lunghe in un terminale e solo operazioni corte nell'altro?
Motivazione: