Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1311

 
Sprut 185:

Grazie per la vostra partecipazione.

Purtroppo la funzione ObjectSet*** non era adatta al mio compito.

Ho risolto il problema da solo usando la funzione OnDeinit().

Ora tutto funziona come dovrebbe.

Ma nella tua domanda ci sono queste parole

Sprut 185:

Per favore, aiutatemi con un problema!

Sto appena imparando a scrivere codice e a questo proposito vi chiedo di essere indulgenti con il mio analfabetismo.

Voglio aiutarvi a capire la funzioneOnChartEvent che quando cambiate timeframe, o cambiate le impostazioni nel menu dell'indicatore, aggiornerà gli oggetti grafici nel grafico.

Ho capito che bisogna prima cancellare gli oggetti grafici e poi crearli di nuovo. Mase gli oggetti sono stati cancellati, non c'è accesso alle sue proprietà e quindi come ricreare questi oggetti....... O forse non lo capisco? O forse c'è un altro modo - aggiornare gli oggetti grafici sul grafico?

Per favore, scrivi un esempio con commenti su come farlo.

E per non cancellare, basta cambiare la proprietà dell'oggetto richiesto con una delle funzioni ObjectSet***.

Per quanto riguarda la cancellazione di tutti gli oggetti........., bisogna fare molta attenzione quando si cancellano tutti gli oggetti indiscriminatamente... Tra gli oggetti del grafico, ci possono essere oggetti creati manualmente o da un altro Expert Advisor/indicatore. Se vi piace cancellare gli oggetti, dovreste prestare attenzione alla rimozione per prefisso. Vero, devi creare con il prefisso. Non è difficile.

 
Qual è il risultato di

iSpread?


Vedo che è più o meno simile al valore di spread se si interrogano le barre in Symbols/Bars nel terminale.

Naturalmente questi valori non corrispondono ai valori reali dati da SYMBOL_SPREAD.

Perché una tale differenza? E cos'è uno spread così irreale mostrato coniSpread?

 
Aleksei Skrypnev:
Quale risultato mostra la funzione

iSpread?


Vedo che è più o meno simile al valore di spread se si interrogano le barre in Symbols/Bars nel terminale.

Naturalmente questi valori non corrispondono ai valori reali dati da SYMBOL_SPREAD.

Perché una tale differenza? E cos'è uno spread così irreale mostrato coniSpread?

Diffusione minima per barra.

Ho aggiunto un buffer per il controllo - prende i dati dall'array dell'indicatore spread[] e visualizza un commento per la barra corrente - il risultato di iSpread


Come fare qui:Spread Control

Spread Control
Spread Control
  • www.mql5.com
Просмотр спреда
File:
 

Saluti!

Potete dirmi perché la variabile "ATR14" non cambia e come posso vederla cambiare?

void OnTick()
{

double ATR14=iATR(NULL,PERIOD_CURRENT,14);

Comment(
 
      "ATR14==: ",ATR14,"\n");
}
 
Alexey Belyakov:

Saluti!

Potete dirmi perché la variabile "ATR14" non cambia? Come posso vedere che cambia?

Perché in MQL5 il manico dell'indicatore (a proposito, ha il tipo int) viene creato UNA volta sola e viene fatto in OnInit.

E per la ricezione dei dati dall'indicatore si usa il CopyBuffer.

 
Vladimir Karputov:

Perché in MQL5 il manico dell'indicatore (e ha il tipo int, tra l'altro) viene creato UNA volta sola e viene fatto in OnInit.

E per la ricezione dei dati dall'indicatore si usa il CopyBuffer.

Ok, supponiamo.

double  ATR14m[];   

int ATR14;

int OnInit()
  {
ATR14=iATR(NULL,PERIOD_CURRENT,14);
  return(0);   
  }
  
  
void OnDeinit(const int reason)
  {
//---  
  }


void OnTick()
{
CopyBuffer(ATR14,0,0,3,ATR14m);



Comment(

      "ATR14==: ",ATR14,"\n");

}



Non è cambiato nulla.

 
Alexey Belyakov:

Saluti!

Potete dirmi perché la variabile "ATR14" non cambia e come posso vederla cambiare?

ecco un esempioһttp://www.mql5.com/ru/docs/indicators/iatr

Документация по MQL5: Технические индикаторы / iATR
Документация по MQL5: Технические индикаторы / iATR
  • www.mql5.com
iATR - Технические индикаторы - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Belyakov:

Beh, diciamo solo che

Non è cambiato nulla.

Ci sei quasi. Vi consiglio di chiamare l'array 'array_atr' invece di 'ATR14m'. Allora vedrai prima il tuo errore nel chiamare'Comment'.

 
Vladimir Karputov:

Hai quasi capito bene. Vi consiglio di chiamare l'array 'array_atr' invece di 'ATR14m'. Allora vedrete prima il vostro errore nella chiamata'Commento'.

double  array_atr[];   

int ATR14;

int OnInit()
  {
ATR14=iATR(NULL,PERIOD_CURRENT,14);
  return(0);   
  }
   
void OnDeinit(const int reason)
  {
//---  
  }

void OnTick()
{


CopyBuffer(ATR14,0,0,3,array_atr);

Comment(

      "ATR14==: ",array_atr,"\n");

}

L'ho cambiato e ottengo un errore: " 'array_atr' - accesso all'array non valido "


 
Vladimir Karputov:

Hai quasi capito bene. Vi consiglio di chiamare l'array 'array_atr' invece di 'ATR14m'. Allora vedrai prima il tuo errore nel chiamare'Comment'.

Pensi che chiamare il vasino di un bambino un vaso da notte cambierà qualcosa?

C'è un tale malinteso che non oso nemmeno provare a suggerire qualcosa... Bisogna leggere la documentazione 50 volte per capirla...