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

 

È possibile duplicare un oggetto Ccanvas?


Creo un oggetto con Ccanvas e nel processo devo creare dei duplicati. A volte 10-20 e a volte 100-200.

Una volta l'oggetto è sicuramente disegnato. C'è un modo per duplicarlo?

 
Sergey Likho:

È possibile duplicare un oggetto Ccanvas?


Creo un oggetto con Ccanvas e nel processo devo creare dei duplicati. A volte 10-20 e a volte 100-200.

Una volta l'oggetto è sicuramente disegnato. C'è un modo per duplicarlo?

CCanvas *canv = nuovo CCanvas
Ma questo non è un duplicato di uno già esistente. Ne sta creando uno nuovo e un puntatore ad esso.
 
Artyom Trishkin:
CCanvas *canv = nuovo CCanvad

Intendevo un oggetto grafico.

   CCanvas obj;
   obj.CreateBitmapLabel(0,1,name,x,y,x_size,y_size,COLOR_FORMAT_ARGB_NORMALIZE);
   obj.FillRectangle(0,0,x_size,y_size,ColorToARGB(Color,Alpha));
   obj.Update(false);


Как сделать 10 копий с измененными координатами?
 
Sergey Likho:

Intendevo un oggetto grafico.

Te l'ho mostrato. Se non sapete in anticipo quanti oggetti devono essere creati, allora solo per mezzo di new.
Se il numero è noto, allora
obj1, obj2, obj3,...,objN
 
Igor Makanu:

Potrei sbagliarmi, ma il tuo link sarà il thread dell'autore, ma devi sfogliare l'intero thread, Igor sembra aver postato codici leggermente grezzi, e poi a volte ha riscritto ciò che doveva essere migliorato, anche se di nuovo potrei sbagliarmi - ho sfogliato questo thread circa 5-6 anni fa, non ricordo più

Non vi sbagliate. Recentemente ha sfogliato l'intero thread dell'autore. Mi ci sono voluti circa 2-3 giorni. Nel tema dell'autore in vista della lontananza della scrittura alcune delle sue caratteristiche non sono più rilevanti (o così mi è sembrato).Leggere assolutamente tutto e altamente attuale e irrilevante poco. E come avete notato, ha avuto errori che sono saltati fuori dopo 2-3, o anche più pagine, quando qualcuno ha deciso di usare la sua funzione, ha trovato l'errore e l'ha corretto e ha solo detto che c'era un errore, o l'ha solo fatto notare. Così anche 10 pagine dopo la stessa funzione può apparire di nuovo, corretta o migliorata (il tempo è passato e lui ha voluto migliorarla).

Quindi se qualcuno ha tirato fuori solo l'argomento più importante e rilevante, si può solo dire grazie e risparmiare un sacco di tempo.

 
Come posso passare un puntatore a una funzione (cioè scrivere una funzione che prende un puntatore a una funzione come argomento) come parametro? L'ho già fatto in mql4 ma ho perso una copia del file dove c'era questo esempio.
 
Seric29:
Come passare un puntatore a una funzione (la funzione prende un puntatore alla funzione come argomento) come parametro? L'ho fatto prima con mql4 ma ho perso una copia del file di esempio.

MQL ha mai supportato i puntatori di funzione? Non credo. Una soluzione è quella di avvolgere la funzione in una classe e passare il puntatore all'oggetto.

 
Sergey Popov:

Ciao a tutti!

Voglio scrivere una funzione nel mio EA che proibisca il trading nelle prime 2 ore dopo l'inizio del trading.

Ma mi sono trovato di fronte al fatto che iTime(Symbol(),1440, 0) non restituisce correttamente il tempo di apertura della candela del giorno.

Più precisamente: il 26.12.2019 il mercato ha aperto alle 06:00:00, ma iTime determina le 00:00:00.

Come posso calcolare esattamente l'orario di apertura del giorno?

SymbolInfoSessionTrade mi aiuterà a scoprire il tempo di trading. Non so se riflette i cambiamenti per il Natale e le altre feste.

 
Aleksey Mavrin:

MQL ha mai supportato i puntatori di funzione? Non credo. Una soluzione è quella di avvolgere la funzione in una classe e passare un puntatore all'oggetto.

Lo fa. Questo viene fatto usando lo specificatore typedif read help ma lo schema è diverso da quello di c++. Ho trovato un forum dove una persona ha scritto questo codice ma non ho salvato il file e ho riavviato il sistema, ovviamente il file è stato cancellato. Ma l'aiuto mostra un esempio semplice e io avevo un esempio su cui stavo chiedendo.

 
Aleksey Mavrin:

MQL ha mai supportato i puntatori di funzione? Non credo. Una soluzione è quella di avvolgere la funzione in una classe e passare il puntatore all'oggetto.

È possibile, codice da riprodurre:

#property copyright "Copyright 2019, IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
typedef void(*TFuncvoidPTR)(void);
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   TFuncvoidPTR f_ptr[3];
   f_ptr[0] = f_1;
   f_ptr[1] = f_2;
   f_ptr[2] = f_3;
   for(int i=0;i<ArraySize(f_ptr);i++)
   {
      printf("Вызываю фунцию № %i ",i);
      f_ptr[i]();
   }

}
//+------------------------------------------------------------------+
void f_1() {Print("Это вызов функции : ",__FUNCTION__);}
void f_2() {Print("Это вызов функции : ",__FUNCTION__);}
void f_3() {Print("Это вызов функции : ",__FUNCTION__);}

2019.12.30 18:30:55.518 Script tst EURUSD,H1: rimosso

2019.12.30 18:30:55.511 tst EURUSD,H1: uninit reason 0

2019.12.30 18:30:55.511 tst EURUSD,H1: Questa è una chiamata di funzione: f_3

2019.12.30 18:30:55.511 tst EURUSD,H1: Chiamata funzione numero 2

2019.12.30 18:30:55.511 tst EURUSD,H1: Questa è la funzione chiamata: f_2

2019.12.30 18:30:55.511 tst EURUSD,H1: Chiamata funzione #1

2019.12.30 18:30:55.511 tst EURUSD,H1: Questa è la funzione chiamata: f_1

2019.12.30 18:30:55.511 tst EURUSD,H1: Calling fuction no. 0

2019.12.30 18:30:55.511 tst EURUSD,H1: inizializzato

2019.12.30 18:30:55.496 Script tst EURUSD,H1: caricato con successo