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

 
Potete dirmi se c'è un modo per cambiare i tempi di apertura delle barre h4 e d1? Più o meno per simulare un cambio di fuso orario. Forse uno script che costruisce grafici offline basati sul timeframe h1 o qualcosa del genere.
 
Artyom Trishkin:

L'esecuzione non può essere perdonata.

Qual è l'errore?

Qui.

Come potete vedere, non potete passare una struttura dichiarata localmente a una funzione.

 
vladnev:
Potete dirmi se c'è un modo per cambiare gli orari di apertura delle barre h4 e d1? Imita grossomodo un cambio di fuso orario. Forse uno script che costruisce grafici offline basati sul timeframe h1 o qualcosa del genere.
iOpen(Symbol,нужный таймфрейм,номер бара(счёт идёт справа налево))

Dobbiamo lavorare con questo

 
Seric29:

Qui.

Come potete vedere, non potete passare una struttura dichiarata localmente a una funzione.

State confondendo la definizione della struttura con la dichiarazione di una variabile con il tipo di questa struttura.
 
Artyom Trishkin:

Puoi controllare tu stesso? È difficile? E perché scrivere troppo?

Non ho controllato. Cosa ti ferma?

Artyom, questa opzione non funziona davvero. La struttura deve essere definita a livello di variabile globale. E una variabile di tipo struttura è ovunque. Allora sarà possibile passarlo per riferimento. Perché il tipo nei parametri di funzione in arrivo non sarà definito.

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
   struct MyPoint
     {
      int         x[5];
      int         y;
     }gw777; // Переменная глобального уровня, просто лишняя.
int OnInit()
  {
   MyPoint qw1; // Локальная переменная
   EqualPointsP(qw1);// передал структуру в функцию EqualPointsP
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool EqualPointsP(MyPoint &qw)
  {
   Print("EqualPointsP ");
   return true;
  }
 
Artyom Trishkin:
Lei confonde la definizione di una struttura con la dichiarazione di una variabile con il tipo di questa struttura.

Significato. Vuoi dire che la struttura deve essere dichiarata globalmente, cioè fuori dal codice, e la struttura per la sua definizione non può essere descritta all'interno del codice, cioè localmente; solo le variabili possono essere create in questo modo, o sto fraintendendo qualcosa? Si prega di spiegare.

 
Alexey Viktorov:

Artyom, questa variante non funziona davvero. La struttura dovrebbe essere definita a livello delle variabili globali. E una variabile di tipo struttura è ovunque. Poi sarà possibile trasferirlo per riferimento. Perché il tipo nei parametri in entrata della funzione non sarà definito.

Quindi è globale, dopo tutto.

 
Seric29:

Quindi è globale, dopo tutto.

NO. Una struttura è un tipo definito dall'utente. E quindi questo tipo deve essere disponibile ovunque. E una VARIABILE di tipo personalizzato può essere dichiarata ovunque il mignolo sinistro del piede destro voglia e passare questa variabile ovunque l'amato cane voglia, ma solo per riferimento.

 
Alexey Viktorov:

In questo modo la struttura non funzionerà, Artyom. La struttura deve essere definita a livello di variabili globali. E la variabile di tipo struttura è ovunque. Poi sarà possibile trasferirlo per riferimento. Perché il tipo nei parametri di funzione in arrivo non sarà definito.

 

In generale, poiché Artyom non risponde a nulla, e l'uomo sopra ha dato la risposta che le funzioni lavorano con strutture che devono essere conosciute e quindi devono essere dichiarate globalmente, concludiamo che la struttura deve essere dichiarata globalmente.

Per sua natura, una funzione che lavora con una struttura può accettare solo le stesse strutture statiche. Significa che è impossibile dichiarare una struttura localmente in modo che abbia un ambito limitato e passarla alla funzione.

Motivazione: