Errori, bug, domande - pagina 2040

 

Non funziona nella sottofinestra dell'indicatore, cosa sto facendo di sbagliato?

  datetime dt =0; 
  double price =0; 
  int window= ChartWindowFind();
  ChartXYToTimePrice(0,5,34,window,dt,price);
  PrintFormat("Window=%d  =>  time=%s  Price=%G",window,TimeToString(dt),price);

2017.10.15 05:35:36.060	i-Stp EURCHF,M30: Window=0  =>  _Time=2017.09.29 22:00  _Price=0.904348
  datetime dt =0; 
  double price =0; 
  int window= ChartWindowFind();
// ChartXYToTimePrice(0,5,34,window,dt,price);
  PrintFormat("Window=%d  =>  _Time=%s  _Price=%G",window,TimeToString(dt),price); 

2017.10.15 05:37:13.997	i-Stp EURCHF,M30: Window=1  =>  _Time=1970.01.01 00:00  _Price=0
 
Yury Kulikov:

Vengono utilizzati i parametri MouseMove(x, y, key). La posizione del cursore e il clic del mouse sono determinati, la linea principale è spostata da mql, non dalle capacità dell'interfaccia del terminale, cioè il programma controlla la posizione del cursore rispetto alla linea, non il movimento della linea. Il movimento simultaneo delle linee è assicurato dal cambiamento sincrono delle coordinate delle linee principali e dipendenti.

Stranamente, non uso affatto le coordinate del mouse, rispondendo solo a id == CHARTEVENT_MOUSE_MOVE. E tutto funziona bene, il che è effettivamente logico.

Non c'è bisogno di DND personalizzato per la fluidità. Se fai un DND personalizzato allora dovresti anche fare oggetti personalizzati tramite kanvas. Certamente non ci può essere alcun ritardo, perché l'oggetto è sempre lo stesso.

 
Vitaly Muzichenko:

Non funziona nella sottofinestra dell'indicatore, cosa sto facendo di sbagliato?

cosa ci si aspettava e cosa esattamente non funziona?
 
Kirill Belousov:
ma cosa ci si aspettava e cosa esattamente non funziona?

Si aspetta di convertire le coordinate in una sottofinestra e di ottenere un prezzo.

Funziona nella finestra principale, non funziona nelle sottofinestre, come potete vedere dalle stampe.

Inoltre, la funzione sostituisce il numero della sottofinestra con "0", cioè con quella principale:

Преобразует координаты  X и Y графика в значения время и цена.
bool  ChartXYToTimePrice(
   long           chart_id,     // идентификатор графика
   int            x,            // координата X на графике
   int            y,            // координата Y на графике
   int&           sub_window,   // номер подокна
   datetime&      time,         // время на графике
   double&        price         // цена на графике
   );
 

Errore di compilazione

int f() { return 1; }
void OnStart() export
{
        for   ( int i = f();           ;) {} //(1) нормально
        for   (            ;int i = f();) {} //(2) 'i' - unexpected token
        while (             int i = f() ) {} //(3) 'i' - unexpected token
}
 
Vitaly Muzichenko:

Si aspetta di convertire le coordinate in una sottofinestra e di ottenere un prezzo.

Funziona nella finestra principale, non funziona nelle sottofinestre, come potete vedere dalle stampe.

Inoltre, la funzione sostituisce il numero della sottofinestra con "0", cioè con quella principale:

Dall'aiuto della funzione: X e Y - le coordinate sono contate dall'angolo superiore sinistro della finestra principale del grafico.

x=5, y=34 si riferisce anche alla finestra principale, quindi output window=0.

Prova ad aumentare Y dell'altezza della finestra principale per "finire" in una finestra diversa

 
A100:

Errore di compilazione

è accettabile dichiarare e assegnare dentro while(...) invece di verificare una condizione?
 
Kirill Belousov:

Dall'aiuto della funzione: X e Y sono coordinate riferite all'angolo superiore sinistro della finestra del grafico principale.

x=5, y=34 si riferisce anche alla finestra principale, quindi l'output è window=0.

Prova ad aumentare Y dell'altezza della finestra principale per "finire" in un'altra finestra

Questa non è affatto la risposta, né l'uscita.

Specifichiamo il numero di sottofinestra, e potrebbe essere 3 o 4, poi come specifichiamo le coordinate?

C'è un chiaro errore nella funzione.

 
Vitaly Muzichenko:

Questa non è affatto la risposta, né la soluzione.

Specifichiamo il numero di sottofinestra, e potrebbe essere 3 o 4, poi come specifichiamo le coordinate?

C'è un chiaro errore nella funzione.

Non specifichiamo il numero della sottofinestra, ma la funzione ci dice (questo è un parametro di uscita, non di ingresso) - in quale sottofinestra del grafico con l'ID specificato è il grafico del prezzo e ci dice quale prezzo e ora corrispondono alle coordinate X,Y specificate su quel grafico.
 
Kirill Belousov:
È accettabile dichiarare e assegnare dentro while(...) invece di controllare la condizione?

Lasciate che gli sviluppatori controllino. C++ compila, anche se la linea (2) [ma non (3)] può causare un errore nei compilatori obsoleti

Motivazione: