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

 
Artyom Trishkin:

È una strana sensazione quella che si prova. Ti ho solo mostrato come mantenerlo semplice - senza variabili inutili.


Quindi sono stanco ed è il momento di andare a riposare un po' - dormire, sì.

 

Qual è la funzione della finestra dell'indicatore nell'Expert Advisor?

 
Nauris Zukas:

Buon pomeriggio, quali funzioni nell'Expert Advisor si possono fare nella finestra dell'indicatore?


Chiama un indicatore vuoto dall'Expert Advisor.

 
Alekseu Fedotov:

Chiama un indicatore vuoto dall'esperto.

Grazie!

 
Vitaly Muzichenko:

Trova il codice che ti serve qui


Ciao, ho preso la funzione per determinare il prezzo dell'ultimo ordine Sell aperto

PriceS(string sy="0", int op=OP_SELL, int mn=-1) {             //Цена последнего открытого Селл ордера
  datetime t;
  double   r=0;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}

Ma quando lo incollo nel mio EA, ottengo un errore di compilazione nella condizione della funzione 'sy' - token inatteso

=' - token inaspettato 252 18

l-valore richiesto 1 1

conversione implicita da 'stringa' a 'numero' 252 19

'=' - l-valore richiesto 252 18

'=' - espressione di tipo 'void' è illegale 252 18

'op' - token inaspettato 252 28

'=' - token inaspettato 252 30

l-valore richiesto 1 1

'OP_SELL' - utilizzo operazione illegale 252 31

possibile perdita di dati dovuta alla conversione del tipo 252 30

'=' - l-valore richiesto 252 30

'=' - espressione di tipo 'void' è illegale 252 30

'mn' - token inaspettato 252 44

'=' - token inaspettato 252 46

l-valore richiesto 1 1

'1' - operazione illegale uso 252 48


Sembra che tutto dovrebbe essere corretto!? Per favore consigliatemi, l'ho copiato e non ho cambiato nulla.


 
vikzip:

Ciao, ho preso la funzione per determinare il prezzo dell'ultimo ordine Sell aperto

Ma quando lo incollo in un EA, ottengo un errore di compilazione nella condizione della funzione 'sy' - token inatteso

=' - token inaspettato 252 18

l-valore richiesto 1 1

conversione implicita da 'stringa' a 'numero' 252 19

'=' - l-valore richiesto 252 18

'=' - espressione di tipo 'void' è illegale 252 18

'op' - token inaspettato 252 28

'=' - token inaspettato 252 30

l-valore richiesto 1 1

'OP_SELL' - utilizzo operazione illegale 252 31

possibile perdita di dati dovuta alla conversione del tipo 252 30

'=' - l-valore richiesto 252 30

'=' - espressione di tipo 'void' è illegale 252 30

'mn' - token inaspettato 252 44

'=' - token inaspettato 252 46

l-valore richiesto 1 1

'1' - operazione illegale uso 252 48


Sembra che tutto dovrebbe essere corretto!? Per favore consigliatemi, l'ho copiato e non ho cambiato nulla.


Ho bisogno di restituire il tipo di funzione

PriceS(string sy="0", int op=OP_SELL, int mn=-1) {
double PriceS(string sy="0", int op=OP_SELL, int mn=-1) {
 
vikzip:


Sembra che tutto dovrebbe essere corretto!? Per favore consigliatemi, l'ho copiato enon ho cambiato nulla.



E l'intestazione della funzione, e non ha copiato il tipo di funzione


La funzione originariamente si presenta così:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает цену открытия последней открытой позиций.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double PriceOpenLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t=0;
  double   r=0;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
 
'op' - unexpected token Армата.mq4 248 28 'OP_SELL' - illegal operation use Армата.mq4 248 31 'mn' - unexpected token Армата.mq4 248 44 
double PriceS(string sy="", int op=OP_SELL, int mn=-1) {             //Цена последнего открытого Селл ордера
  datetime t;
  double   r=0;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
Alekseu Fedotov
:


E l'intestazione della funzione, e non ha copiato il tipo di funzione


La funzione originariamente si presenta così:


Alekseu Fedotov:

Un'intestazione di funzione, e non hanno copiato il tipo di funzione


La funzione originariamente si presenta così:


Corretto, l'esempio diceva anche. Se ho capito bene, è possibile selezionare il tipo di ordine, cosa che ho fatto.

  • Op- Operazione commerciale, tipo di posizione. Valori validi:OP_BUY,OP_SELL o-1. Il valore predefinito di-1 significa qualsiasi posizione.
Poi ho reso la funzione globale mettendola prima di start. Ma se restituisco il tipo doppio subito prima del nome della funzione, si verificherà un errore, per favore ditemi perché!

'PriceS' - la funzione può essere dichiarata solo nell'ambito globale 252 10

Ho capito che la funzione deve essere globale!

Tradotto l'errore nel traduttore dice

La funzione può essere definita solo nell'ambito globale. Se ho capito bene il significato di queste parole, deve essere definita globalmente e quindi non farla precedere da double. Non è chiaro perché genera un errore su sy anche se lo copio semplicemente dal modello.

'sy' - token inatteso 248 17 '=' - token inatteso 248 19 l-value richiesto 1 1

Posso rendere sy globale? e stesso errore con altre variabili dichiarate nella funzione.

'op' - token inatteso 248 28 'OP_SELL' - uso illegale dell'operazione 248 31 'mn' - token inatteso 248 44

 
vikzip:


Esatto, era anche scritto nell'esempio. Se ho capito bene è possibile selezionare il tipo di ordine, cosa che ho fatto.

  • op- operazione commerciale, tipo di posizione. Valori validi:OP_BUY,OP_SELL o-1. Il valore predefinito di-1 significa qualsiasi posizione.
Poi ho reso la funzione globale mettendola prima di start. Ma se restituisco il tipo doppio subito prima del nome della funzione, si verifica un errore. Per favore, ditemi perché!

'PriceS' - la funzione può essere dichiarata solo nell'ambito globale 252 10

Ho capito che la funzione deve essere globale!

Tradotto l'errore nel traduttore dice


Posizionare la funzione al di fuori della funzione di avvio

E nel corpo della funzione di avvio, la chiamate così:

PriceOpenLastPos(); //текущий символ  любая последняя поз.


PriceOpenLastPos(Symbol(),OP_SELL);//текущий символ  OP_SELL   без магика


PriceOpenLastPos(Symbol(),OP_BUY);//текущий символ   OP_BUY  без магика

3 parametri magik, separati da virgola, metti il tuo o 0

 
Alekseu Fedotov:

Posizionare la funzione al di fuori della funzione di avvio

Nel corpo della funzione di avvio, la chiamate così:

3 parametri magik, separati da virgola, metti il tuo o 0


Grazie mille!!! Appena ho messo la funzione fuori dalla funzione start, tutti gli errori sono scomparsi!!!