Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 740

 

Sto solo duplicando la domanda qui, nessuno risponde negli indicatori...

Ho iniziato a studiare MQL5. Non sono esperto di programmazione e quindi ho alcune domande e dubbi. Alcuni di essi possono essere risolti da me, analizzando gli esempi e in parte con il 'gut feeling', ma alcuni aspetti sono difficili da capire subito. Ho iniziato a studiare una cosa semplice: avere due toolline visualizzate nella finestra principale del grafico. Disegno il Close per lo strumento corrente e quello aggiuntivo (correlato, la nota seguirà) per il timeframe corrente di 1000 barre all'indietro. Lo strumento correlato è il futures della serie successiva, è illiquido e ha sempre alcune lacune nei dati, cioè il numero di operazioni non è così frequente come nella serie principale di futures. Il compito sembrerebbe compiuto, ma ci sono degli errori. Non so dire se lo smoothing sarebbe utile, quindi ho usato iMA con il periodo 1 in modo che, se necessario, potrei smussarlo senza rifarlo.

Ecco le domande:

1. Durante la compilazione, quando copio il buffer iMA in un array, vedo un avviso "possibile perdita di dati a causa della conversione di tipo". Cos'è questo e perché, di che tipo di conversione stiamo parlando? Le linee sono disegnate normalmente e non sembra mancare nulla.

2. dopo che l'indicatore ha funzionato e le linee dei due strumenti appaiono nella finestra principale del grafico, vedo che non sono sincronizzate. Cioè il primo strumento è normale e corrisponde al grafico a candele della finestra principale. Il secondo (meno liquido) ha delle lacune e quindi viene gradualmente "spremuto", causando la desincronizzazione. Ho bisogno che sia sincronizzato nel tempo in qualche modo. Questo è molto al di là delle mie capacità. Devo vederlo visivamente per capire cosa manca.

Ecco uno screenshot di come appare. La linea gialla è ciò che deve essere sincronizzato rispetto alla linea verde. Così che la linea gialla, dove i vuoti nelle date sono solo "connessioni" dei valori precedenti al successivo, piuttosto che una stretta con le date mancanti. Il codice è nell'allegato.

File:
 
ottenand:

Sto solo duplicando la domanda qui, nessuno risponde negli indicatori...

Ho iniziato a studiare MQL5. Non sono esperto di programmazione e quindi ho alcune domande e dubbi. Alcuni di essi possono essere risolti da me stesso, analizzando esempi e in parte con il 'gut feeling', ma alcuni aspetti sono difficili da capire subito. Ho iniziato a studiare una cosa semplice: avere due toolline visualizzate nella finestra principale del grafico. Disegno il Close per lo strumento corrente e quello aggiuntivo (correlato, la nota seguirà) per il timeframe corrente di 1000 barre all'indietro. Lo strumento correlato è il futures della serie successiva, è illiquido e ha sempre alcune lacune nei dati, cioè il numero di operazioni non è così frequente come nella serie principale di futures. Il compito sembrerebbe compiuto, ma ci sono degli errori. Non so dire se lo smoothing sarebbe utile, quindi ho usato iMA con il periodo 1 in modo che, se necessario, potrei smussarlo senza rifarlo.

Ecco le domande:

1. Durante la compilazione, quando copio il buffer iMA in un array, vedo un avviso "possibile perdita di dati a causa della conversione di tipo". Cos'è questo e perché, di che tipo di conversione stiamo parlando? Le linee sono disegnate normalmente e non sembra mancare nulla.

2. dopo che l'indicatore ha funzionato e le linee dei due strumenti appaiono nella finestra principale del grafico, vedo che non sono sincronizzate. Cioè il primo strumento è normale e corrisponde al grafico a candele della finestra principale. Il secondo (meno liquido) ha delle lacune e quindi viene gradualmente "spremuto", causando la desincronizzazione. Ho bisogno che sia sincronizzato nel tempo in qualche modo. Questo è molto al di là delle mie possibilità. Devo vederlo visivamente per capire cosa manca.

Ecco uno screenshot di come appare. La linea gialla è ciò che deve essere sincronizzato rispetto alla linea verde. Così che la linea gialla, dove i vuoti nelle date sono solo "connessioni" dei valori precedenti al successivo, piuttosto che una stretta con le date mancanti. Il codice è nell'allegato.


Il manico dell'indicatore deve essere di tipo int. Esempio vedi qui:CopyBuffer

int  CopyBuffer( 
   int       indicator_handle,     // handle индикатора 
   int       buffer_num,           // номер буфера индикатора 
   int       start_pos,            // откуда начнем  
   int       count,                // сколько копируем 
   double    buffer[]              // массив, куда будут скопированы данные 
   );
 
Vladimir Karputov:


Il manico dell'indicatore deve essere di tipo int. Esempio vedi qui:CopyBuffer

Giusto, mi era sfuggito quel punto, l'errore di compilazione è sparito, grazie!

Ma il problema principale al momento è la differenza di tempo, è ancora rilevante. Senza la sua soluzione sarà impossibile eseguire, per esempio, operazioni matematiche tra gli strumenti, che ho intenzione di testare.

 
ottenand:

Giusto, mi era sfuggito questo punto, l'errore di compilazione è sparito, grazie!

Ma il problema principale al momento, la questione dei tempi, è ancora rilevante. Senza risolverlo, sarebbe impossibile, per esempio, eseguire operazioni matematiche tra strumenti, cosa che ho intenzione di testare.


Se fossi in te comincerei con una codifica corretta - il fatto è che il tuo stile ora è uno sconsiderato "four-way" - cioè, non ci sono controlli, tutto è a caso.

Inizia a fissare OnInit():

  1. dopo aver ottenuto la maniglia, è necessario controllare la correttezza
  2. se tutto è corretto, ritorna NON "0", ma "INIT_SUCCEED".
Tutto questo è nell'esempio diiMA. Solo allora potremo andare avanti.

 
Vladimir Karputov:


Se fossi in te, comincerei a scrivere il codice correttamente - il fatto è che il tuo stile è ora un "quaternario" sconsiderato - cioè nessun controllo, tutto a capriccio.

Iniziare la correzione di OnInit():

  1. dopo aver ottenuto la maniglia, è necessario controllare la correttezza
  2. se ok, ritorna NON "0" ma "INIT_SUCCEED".
Tutto questo è nell'esempio diiMA. Solo allora si può andare avanti.

Allora chi ti ha detto, amico, che non si può pinzare su un cinque e scrivere splendidamente su un quattro?

Non si tratta della PIATTAFORMA, ma della testa dello scriba in particolare...

Il professor Preobrazhensky aveva ragione quando diceva che non è negli armadi, è nelle teste...


 
Vladimir Karputov:


Se fossi in te, comincerei con la scrittura corretta del codice - il fatto è che il tuo stile è ora un "quaternario" sconsiderato - cioè, non ci sono controlli, tutto è sul caso.

Iniziare la correzione di OnInit():

  1. dopo aver ottenuto la maniglia, è necessario controllare la correttezza
  2. se ok, ritorna NON "0" ma "INIT_SUCCEED".
Tutto questo è nell'esempio diiMA. Solo allora si può andare avanti.

Bene, ora saprò come si chiama il mio stile) Vero, sto iniziando proprio dalla versione 5, da zero)

Grazie, ho risolto i punti 1 e 2. L'intero problema è nel blocco di calcolo. Penserò a come prescrivere la posizione delle barre di due strumenti secondo il tempo. Altrimenti c'è un ritardo e lo stesso avvertimento #4806.

File:
 
ottenand:

Bene, ora saprò come si chiama il mio stile) Davvero, sto iniziando proprio dalla versione 5, da zero)

Grazie, ho risolto i punti 1 e 2. L'intero problema è nel blocco di calcolo. Penserò a come prescrivere la posizione delle barre di due strumenti secondo il tempo. Altrimenti un lag e lo stesso avvertimento #4806.

Giusto! Così, per esempio, su M1 sul futures "A" ci sono barre a 13 minuti, 14 minuti e 15 minuti. Ma il futures "B" ha barre solo a 13 minuti e 15 minuti - cioè un gap. C'erano articoli da qualche parte, cercate la parola "buco".
 
Vladimir Karputov:
Proprio così! Perché, per esempio, il futures M1 "A" ha barre a 13 minuti, 14 minuti e 15 minuti. Ma il futures "B" ha barre solo a 13 minuti e 15 minuti - cioè un gap. C'erano articoli da qualche parte, cercate con la parola "buco".
Questo è quello di cui sto parlando) L'errore #4806 sembra essere il motivo. Ok, lo cercherò).
 

Buon pomeriggio.

Potete dirmi come trovare il prezzo della linea di tendenza per la barra corrente? Ho provato con ObjectGetDouble, ma non dà il risultato desiderato. Codice di esempio:

   ObjectCreate(0,"O_Resistance",OBJ_TREND,0,UpTime_2[0],UpFractal_2,UpTime_1[0],UpFractal_1);
   ObjectMove(0,"O_Resistance",0,UpTime_2[0],UpFractal_2);
   ObjectMove(0,"O_Resistance",1,UpTime_1[0],UpFractal_1);
   ObjectSetInteger(0,"O_Resistance",OBJPROP_RAY_RIGHT,true);
   ObjectSetInteger(0,"O_Resistance",OBJPROP_COLOR,O_Resistance_Color);
   ObjectSetInteger(0,"O_Resistance",OBJPROP_STYLE,O_Resistance_Style);
   ObjectSetInteger(0,"O_Resistance",OBJPROP_WIDTH,O_Resistance_Width);


double O_ResistancePrice = ObjectGetDouble(0,"O_Resistance",OBJPROP_PRICE,0); // при любом баре дает координату изначальной точки луча, а нужна цена
                                                                              // соответствующая текущему бару или первому
 
MaksGroup:

Buon pomeriggio.

Potete dirmi come trovare il prezzo della linea di tendenza per la barra corrente? Ho provato con ObjectGetDouble, ma non dà il risultato desiderato. Codice di esempio:

ObjectGetValueByShift() (solo MT4), ObjectGetValueByTime()(MT4, MT5)