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

 
WinProject:
Grazie!) Dalla vostra risposta, concludo che per ogni tipo di oggetto devo fare una funzione separata. Ho pensato che in qualche modo sarebbe stato possibile fare un inizio separato di funzioni per costruire oggetti, collegato al ciclo Mentre la funzione principale per leggere il file. Che ne dici di Switch?

Probabilmente non mi sono addentrato abbastanza.

La prima, la costruzione di tutti gli oggetti grafici, non causa alcun problema o domanda. Ma devo aver capito male il secondo. Apparentemente la domanda non era su come organizzare il lavoro con un pulsante per molti tipi di oggetti, ma un pulsante per un tipo di oggetti. In questo caso, farei una struttura con parametri di oggetti e diversi array di strutture, un array per ogni tipo di oggetto. E, rispettivamente, legherei questi array di strutture ai pulsanti dei tipi corrispondenti.

Poi, quando si preme il pulsante, il tipo di oggetto corrispondente viene cancellato. E quando il pulsante viene rilasciato, gli oggetti saranno ripristinati dai parametri che si trovano nell'array della struttura.

Quindi sarà necessario leggere il file solo una volta all'avvio.

 
Alexey Viktorov:

Probabilmente non mi sono addentrato abbastanza.

La prima, la costruzione di tutti gli oggetti grafici, non causa alcun problema o domanda. Ma devo aver capito male il secondo. Apparentemente la domanda non era su come organizzare il lavoro con un pulsante per molti tipi di oggetti, ma un pulsante per un tipo di oggetti. In questo caso, farei una struttura con parametri di oggetti e diversi array di strutture, un array per ogni tipo di oggetto. Quindi, legherei questi array di strutture ai pulsanti dei tipi corrispondenti.

Poi, quando si preme il pulsante, il tipo di oggetto corrispondente viene cancellato. E quando il pulsante viene rilasciato, gli oggetti saranno ripristinati dai parametri che si trovano nell'array della struttura.

Così, sarà necessario leggere il file solo una volta all'avvio.

Grazie mille per la risposta, proverò a fare entrambe le varianti, attraverso le bandiere come suggerito da STARIJ e la tua variante è anche interessante da provare. Cercherò di fare meno domande, è felice che siano risposte!)
 
STARIJ:

Le bandiere sono variabili. O bool: false=vuoto, true=sollevato o int - allora ci sono molte bandiere in un numero alla volta: 0 - tutto omesso, 1=mancato primo, 2=mancato secondo, 3=mancato primo e secondo, 4=mancato terzo, 5=mancato terzo e primo, 6=mancato terzo e secondo, 7=mancato primo, secondo, terzo, 8=mancato quarto.... Beh, questo è in codice binario. Come si fa a scoprirlo?

Grazie, mi sembrava di aver trovato una buona spiegazione in rete, la proverò. La cosa strana è che su questo sito né nella documentazione, né nel tutorial, probabilmente assunto che tutti coloro che sono venuti qui già hanno competenze di programmazione.
 
WinProject:
Grazie mille per la risposta, proverò a fare entrambe le varianti, attraverso le bandiere come suggerito da STARIJ e anche la tua variante è interessante da provare. Cercherò di fare meno domande, è bene avere delle risposte!)

Le bandiere non sono male, ma mancano il punto

Forum sul trading, sistemi di trading automatico e test di strategia

Tutte le domande dei neofiti su MQL4, aiuto e discussione su algoritmi e codici

WinProject, 2018.01.26 18:17

Buona sera, ancora una volta sto cercando aiuto. Il mio EA ha una funzione principale in OnInit, che legge un file, e costruisce immediatamente diversi oggetti grafici secondo diverse condizioni. Anche sul grafico c'è un pulsante che, quando viene cliccato, opera la funzione per rimuovere questi oggetti, come le etichette di testo. Come fare che, dopo che la pressione del pulsante ha rimosso le etichette di testo, quando il pulsante viene rilasciato è possibile avviare non l'intera funzione che costruirà completamente tutti gli oggetti, ma costruire solo le etichette di testo. L'unica cosa che mi viene in mente è creare un analogo della funzione principale separatamente per ogni tipo di oggetto con tutte le azioni associate all'apertura e alla lettura del file, ma voglio usare qualche soluzione intelligente, ma non so cosa e come, nella funzione principale o nelle funzioni dei pulsanti?

In questo caso è più facile implementare la lettura del file in una funzione separata definita dall'utente e chiamarla più volte, per non moltiplicare la creazione di uno stesso codice più volte. Ma non importa quanto ci proviate, la lettura dei file rimarrà quando si usano le bandiere. E non fa differenza cosa controllare quando si creano oggetti cancellati - la loro assenza o lo stato di flag per tipo di oggetto. Dopo tutto, il tipo di oggetto è determinato dal pulsante collegato a un tipo particolare, questa è la bandiera.
 

Potete dirmi come ottenere il valore dell'ora corrente in MQL5 ?
Ho creato un oggetto della struttura MqlDateTime, non dà nulla

 
Roman Sharanov:

Potete dirmi come ottenere il valore dell'ora corrente in MQL5 ?
Ho creato un oggetto della struttura MqlDateTime, non dà nulla

La struttura deve essere riempita con la data-ora.
 
Artyom Trishkin:
La struttura deve essere riempita con la data-ora.

Usare TimeCurrent()? Non capisco proprio come.

 
Roman Sharanov:

usare TimeCurrent()? non capisco come

TimeToStruct()
 
Artyom Trishkin:
TimeToStruct()

Ah, capito, funziona, grazie!

 

https://docs.mql4.com/ru/basis/types/casting

Penultimo esempio,colore in rappresentazione RGB come stringa."Convertire due strutture copiandone il contenuto" non funziona.

#property script_show_inputs
input color          testColor=clrBlue;// задайте цвет для тестирования
//--- структура для представления цвета в RGB
struct RGB
  {
   uchar             blue;          // синяя составляющая цвета
   uchar             green;         // зеленая составляющая цвета
   uchar             red;           // красная составляющая цвета
   uchar             empty;         // этот байт не используется
   string            toString();    // функция для получения в виде строки
  };
//--- функция для вывода цвета в виде строки
string RGB::toString(void)
  {
   string out="("+(string)red+":"+(string)green+":"+(string)blue+")";
   return out;
  }
//--- структура для хранения встроенного типа color 
struct builtColor
  {
   color             c;
  };
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- переменная для хранения в RGB
   RGB colorRGB;
//--- переменная для хранения типа color
   builtColor test;
   test.c=testColor;
//--- приведение двух структур путем копирования содержимого
   colorRGB=test;
   Print("color ",test.c," = ",colorRGB.toString());
//---
  }

Il compilatore genera il seguente errore... ('=' - operazione illegale usa test.mq4 34 12 )

Ho copiato qualcosa di sbagliato o c'è un errore nel campione? Per favore, consigliatemi.

Приведение типов - Типы данных - Основы языка - Справочник MQL4
Приведение типов - Типы данных - Основы языка - Справочник MQL4
  • docs.mql4.com
Часто возникает необходимость преобразовать один числовой тип в другой. Не каждый числовой тип допустимо преобразовать в другой, допустимые преобразования в MQL4 показаны на схеме: Сплошные линии со стрелками обозначают преобразования, которые выполняются без потери информации. Вместо типа char может выступать тип bool (оба занимают в памяти 1...