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

 
Artyom Trishkin:

La migliore raccomandazione qui è di leggere più spesso l'aiuto.

Specifica le proprietà che possono essere recuperate/impostate per il grafico.

In particolare - lo scorrimento del grafico con il tasto sinistro del mouse.

Questo è il punto della documentazione che ho letto.

Quando CHART_EVENT_MOUSE_MOVE = 1, il grafico riceve messaggi di movimento del mouse, ma quando CHART_EVENT_MOUSE_MOVE = 0, non lo fa. Questo è comprensibile.
Ma non è rilevante per la mia domanda... Non importa quale valore sia impostato per CHART_EVENT_MOUSE_MOVE, ho sempre la possibilità di "spostare" il grafico con AUTOSCROLL disattivato
"spostare" il grafico nella finestra al passato (in termini di tempo) semplicemente premendo il pulsante sinistro del mouse e senza rilasciare il pulsante spostare il mouse a destra.
Questo sposta il grafico nella finestra SEMPRE.
Tuttavia, se premo Ctrl+F (per chiamare Crosshair) - poi quando premo il tasto sinistro del mouse, lo tengo premuto e muovo il grafico, vedo il raggio
il tooltip mostrerà i dati sul movimento del mouse e il prezzo del livello in cui si trova il puntatore del mouse.
E soprattutto - il grafico stesso in quel momento non si muoverà nella finestra.

Ecco come ottenere questo effetto senza abilitare Crosshair, è quello che sto chiedendo...

P.S. Posso fare un video dello schermo e mostrarvi come appare.

 
Maksims Ignatovs:

Ho letto questo posto nella documentazione.

Quando CHART_EVENT_MOUSE_MOVE = 1, il grafico riceve messaggi sullo spostamento del mouse, ma se CHART_EVENT_MOUSE_MOVE = 0, non lo fa. Questo è comprensibile.
Ma non è rilevante per la mia domanda... Non importa quale valore sia impostato per CHART_EVENT_MOUSE_MOVE, ho sempre la possibilità di "spostare" il grafico con AUTOSCROLL disattivato
"spostare" il grafico nella finestra al passato (in termini di tempo) semplicemente premendo il tasto sinistro del mouse e senza rilasciare il pulsante spostare il mouse a destra.
Questo sposta il grafico nella finestra SEMPRE.
Tuttavia, se premo Ctrl+F (per chiamare Crosshair) - poi quando premo il tasto sinistro del mouse, lo tengo premuto e muovo il grafico, vedo il raggio
il tooltip mostrerà i dati sul movimento del mouse e il prezzo del livello in cui si trova il puntatore del mouse.
E soprattutto - il grafico stesso in quel momento non si muoverà nella finestra.

Ecco come ottenere questo effetto senza attivare Crosshair, è quello che sto chiedendo...

P.S. Posso fare un video dello schermo e mostrarvi come è fatto.

Non ho risposto?
Se si sposta qualcosa sul grafico con il mouse, si proibisce di spostare il grafico in questo momento. Non appena si rilascia il pulsante del mouse, si permette al grafico di spostarsi.

 

Si può accedere ai campi di una struttura usando l'indicizzazione, cioè come un array unidimensionale? È possibile creare un array di campi struttura?

Quindi l'idea è questa. C'è una struttura

struct MyStruct {int qw;double qe;}; MyStruct qr; 
//пример по сложнее
struct MyStruct1{int qw[5];double qe[5];}; MyStruct1 qr1;

Poi, quando si passa una qualsiasi struttura a una funzione, dobbiamo indirizzare ogni elemento per nome separatamente.

qr.qw qr.q51e, ecc. Naturalmente, non potrete metterlo in un ciclo ed elaborarlo con un solo thread. Voglio creare un array di campi che memorizzi questi elementi come segue

Massiv[2];
//Massiv[0] отвечает за эту запись qr.qw
//Massiv[1] отвечает за эту запись qr.qе

Di conseguenza, possiamo indirizzare questi elementi attraverso l'indicizzazione e, naturalmente, la seconda struttura può essere messa in un ciclo e gestire qw qe attraverso il ciclo.

È possibile farlo, ho visto tali voci su Internet qualche tempo fa, ma forse ho capito male qualcosa perché ho perso il sito? Forse le macro di unione typedef enum possono aiutare in questo caso?

 
Artyom Trishkin:
Non ho risposto?
Se si sposta qualcosa sul grafico con il mouse, si disabilita lo spostamento del grafico in quel momento. Non appena si rilascia il pulsante del mouse, si permette al grafico di spostarsi.

Non sposto nulla sul grafico. Se impostoCHART_EVENT_MOUSE_MOVE = 0 non aiuta - il grafico può ancora essere spostato.
Non socome disabilitare l'elaborazione di ChartNavigate per il grafico. Non l'ho trovato nemmeno nella documentazione.
Allo stesso tempo "crosshair" affronta in qualche modo questo caso. Ecco perché chiedo: come?
Rispondimi - basta impostare il valore corretto perCHART_EVENT_MOUSE_MOVE. L'ho provato - non aiuta.
Con qualsiasi valore di
CHART_EVENT_MOUSE_MOVE, potete ancora spostare il grafico con il mouse avanti e indietro nel tempo semplicemente tenendo premuto il tasto sinistro del mouse sul grafico e muovendo il mouse.
Allo stesso tempo, a seconda della direzione in cui si muove il mouse orizzontalmente, il grafico si sposterà nella finestra Se muovo il mouse a destra, il grafico si sposterà a sinistra (alla storia passata),
e se muovo il mouse a sinistra, il grafico si sposterà al futuro fino a quando appare la barra attuale. Dopo di che, un tentativo di spostarlo a sinistra con il mouse non funzionerà. Ma questo è comprensibile.
Se
sposto il grafico nella finestra a qualche data nel passato usando ChartNavigate, cosa devo fare per assicurarmi che in nessun caso (nessuna manipolazione con click e movimenti del mouse sul grafico), la parte del grafico che vedo non venga spostata? Cosa devo fare?


 
Maksims Ignatovs:

Non sposto nulla sul grafico. Se imposto CHART_EVENT_MOUSE_MOVE = 0 non aiuta - il grafico può ancora essere spostato.
Non so come disabilitare l'elaborazione di ChartNavigate per il grafico. Non l'ho trovato nemmeno nella documentazione.


ChartSetInteger(0, CHART_MOUSE_SCROLL, 0); // Выключим прокрутку графика
 
Buon pomeriggio, si prega di fissare l'indicatore, è necessario visualizzare il tempo del server attraverso il pulsante, a condizione che il pulsante nella sua posizione originale dovrebbe mostrare
Questo è quello che NON ho capito:
#property copyright "Copyright 2014, ForexDE"
#property link      ""
#property version   "1.00"
#property strict
#property indicator_chart_window

string s1="";

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{

   PutButton("B",50,50,"KNOPKA");
   
   if(DayOfWeek()==1)
      s1="Понедельник  /  ";
   if(DayOfWeek()==2)
      s1="Вторник  /  ";
   if(DayOfWeek()==3)
      s1="Среда  /  ";
   if(DayOfWeek()==4)
      s1="Четверг  /  ";
   if(DayOfWeek()==5)
      s1="Пятница  /  ";
   if(DayOfWeek()==6)
      s1="Суббота  /  ";
   if(DayOfWeek()==0)
      s1="Воскресенье  /  ";

   ObjectCreate("WeekDay1",OBJ_LABEL,0,0,0);          
   ObjectSet("WeekDay1",OBJPROP_CORNER,CORNER_RIGHT_LOWER);
   ObjectSet("WeekDay1",OBJPROP_XDISTANCE,5);
   ObjectSet("WeekDay1",OBJPROP_YDISTANCE,2);
   ObjectSet("WeekDay1",OBJPROP_SELECTABLE,false);
   ObjectSet("WeekDay1",OBJPROP_HIDDEN,true);
   ObjectSet("WeekDay1",OBJPROP_ANCHOR,ANCHOR_RIGHT_LOWER);
   ObjectSet("WeekDay1",OBJPROP_COLOR,Black);
   ObjectSet("WeekDay1",OBJPROP_SELECTABLE,false);
   ObjectSet("WeekDay1",OBJPROP_SELECTED,false);
   ObjectSetText("WeekDay1",s1+TimeToString(CurTime(),TIME_DATE)+"  -  " +TimeToString(CurTime(),TIME_SECONDS),13,"Arial",Red);
   
   return(INIT_SUCCEEDED);
}
/****************Custom indicator iteration function*****************/
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
 {
 
   if(DayOfWeek()==1)
      s1="Понедельник  /  ";
   if(DayOfWeek()==2)
      s1="Вторник  /  ";
   if(DayOfWeek()==3)
      s1="Среда  /  ";
   if(DayOfWeek()==4)
      s1="Четверг  /  ";
   if(DayOfWeek()==5)
      s1="Пятница  /  ";
   if(DayOfWeek()==6)
      s1="Суббота  /  ";
   if(DayOfWeek()==0)
      s1="Воскресенье  /  ";
 
   ObjectSetText("WeekDay1",s1+TimeToString(CurTime(),TIME_DATE)+"  -  " +TimeToString(CurTime(),TIME_SECONDS),13,"Arial",Red);

  return(rates_total);
 }/*******************************************************************/

/********************************************************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
 {

  if(id == CHARTEVENT_CLICK)
   {
   
         if(!ObjectGetInteger(0,"B",OBJPROP_STATE,false))
           {
   ObjectSet("WeekDay1",OBJPROP_XDISTANCE,7000); // скрываю 
           }
         else
           {
   ObjectSet("WeekDay1",OBJPROP_XDISTANCE,5);    // показываю обратно
           }
   


   }
   
 }
/*******************************************************************/
void PutButton(string name,int x,int y,string text)
  {
   ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
//--- установим координаты кнопки
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопки
   ObjectSetInteger(0,name,OBJPROP_XSIZE,80);
   ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,name,OBJPROP_CORNER,2);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
//--- установим цвет текста
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
  }
 

vebster005:
Добрый день, исправьте пожалуйста индикатор, нужно вывести серверное время через кнопку, при условии что кнопка в исходном положении должна показывать
Вот что у меня НЕ получилось:

Cosa esattamente non ha funzionato? Cioè, con parole tue, cosa volevi fare...

si fa un pulsante, quando lo si preme, scorre fuori dallo schermo (se non è largo)

perché non sei contento del risultato?

 
Maxim Kuznetsov:

Che cosa esattamente non sei riuscito a fare? cioè con parole tue quello che volevi fare...

si fa un pulsante, quando lo si preme, scorre fuori dallo schermo (se non è largo)

Cosa c'è di sbagliato nel risultato?

il risultato è che quando si è cliccato sul pulsante l'ora era nascosta e poi riappariva perché viene aggiornata a causa del fatto che nella calcolatrice

 
Maxim Kuznetsov:

Che cosa esattamente non sei riuscito a fare? cioè con parole tue quello che volevi fare...

si fa un pulsante, quando lo si preme, scorre fuori dallo schermo (se non è largo)

perché non sei contento del risultato?

Potresti farlo funzionare per i secondi e tutto il resto, come nel terminale, e puoi disabilitare il pulsante
perché quando disabilito il pulsante (lo rimuovo dallo schermo) l'ora riappare

 
vebster005:

Si potrebbe ottenere il risultato che i secondi e tutto il resto funzionano, come nel terminale, e si può disabilitare il pulsante
perché quando disabilito il pulsante (lo rimuovo dallo schermo) l'ora riappare

Ci sono molte persone qui che possono raggiungere quasi tutti i risultati.

È importante che tu stesso cerchi di raggiungerli, piuttosto che supplicare gli altri di farlo per te. Sono sempre disposti ad aiutare, ma per aiutare, non per farlo al posto tuo.