Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1080

 
Artyom Trishkin:

Die beste Empfehlung ist hier, die Hilfe öfter zu lesen.

Sie gibt die Eigenschaften an, die für den Graphen abgerufen/eingestellt werden können.

Insbesondere das Scrollen des Diagramms mit der linken Maustaste.

Dies ist die Stelle in der Dokumentation, die ich gelesen habe.

Wenn CHART_EVENT_MOUSE_MOVE = 1 ist, empfängt das Diagramm Mausbewegungsmeldungen, wenn CHART_EVENT_MOUSE_MOVE = 0 ist, empfängt es keine. Das ist verständlich.
Aber das ist für meine Frage nicht relevant... Unabhängig davon, welcher Wert für CHART_EVENT_MOUSE_MOVE eingestellt ist, habe ich immer die Möglichkeit, das Diagramm mit ausgeschaltetem AUTOSCROLL zu "verschieben".
"Verschieben Sie die Grafik im Fenster in die Vergangenheit (zeitlich), indem Sie die linke Maustaste drücken und die Maus nach rechts bewegen, ohne die Taste loszulassen.
Dadurch wird das Diagramm im Fenster IMMER verschoben.
Wenn ich jedoch Strg+F drücke (um Fadenkreuz aufzurufen) - und dann die linke Maustaste drücke, sie gedrückt halte und die Grafik bewege, sehe ich den Strahl
zeigt der Tooltip Daten über die Mausbewegung und den Preis der Ebene an, auf der sich der Mauszeiger befindet.
Und das Wichtigste: Das Diagramm selbst wird sich in diesem Moment nicht im Fenster bewegen.

Wie kann man diesen Effekt erreichen, ohne das Fadenkreuz zu aktivieren, das ist meine Frage...

P.S. Ich kann ein Video des Bildschirms machen und Ihnen zeigen, wie er aussieht.

 
Maksims Ignatovs:

Ich habe diese Stelle in der Dokumentation gelesen.

Wenn CHART_EVENT_MOUSE_MOVE = 1 ist, empfängt das Diagramm Nachrichten über Mausbewegungen, aber wenn CHART_EVENT_MOUSE_MOVE = 0 ist, empfängt es keine. Das ist verständlich.
Aber das ist für meine Frage nicht relevant... Unabhängig davon, welcher Wert für CHART_EVENT_MOUSE_MOVE eingestellt ist, habe ich immer die Möglichkeit, das Diagramm mit ausgeschaltetem AUTOSCROLL zu "verschieben".
"Verschieben" Sie die Grafik im Fenster in die Vergangenheit (zeitlich), indem Sie die linke Maustaste drücken und die Maus nach rechts bewegen, ohne die Taste loszulassen.
Dadurch wird das Diagramm im Fenster IMMER verschoben.
Wenn ich jedoch Strg+F drücke (um Fadenkreuz aufzurufen) - und dann die linke Maustaste drücke, sie gedrückt halte und die Grafik bewege, sehe ich den Strahl
zeigt der Tooltip Daten über die Mausbewegung und den Preis der Ebene an, auf der sich der Mauszeiger befindet.
Und das Wichtigste: Das Diagramm selbst wird sich in diesem Moment nicht im Fenster bewegen.

Wie kann man diesen Effekt erreichen, ohne das Fadenkreuz einzuschalten, das ist meine Frage...

P.S. Ich kann ein Video des Bildschirms machen und Ihnen zeigen, wie er aussieht.

Habe ich darauf nicht geantwortet?
Wenn Sie mit der Maus etwas auf dem Diagramm verschieben, verbieten Sie das Verschieben des Diagramms an dieser Stelle. Sobald Sie die Maustaste loslassen, können Sie das Diagramm verschieben.

 

Kann auf die Felder einer Struktur mit Hilfe eines Indexes, d.h. als eindimensionales Array, zugegriffen werden? Ist es möglich, ein Array von Strukturfeldern zu erstellen?

Die Idee ist also die folgende. Es gibt eine Struktur

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

Wenn wir eine Struktur an eine Funktion übergeben, müssen wir jedes Element einzeln mit seinem Namen ansprechen.

qr.qw qr.q51e usw. Natürlich kann man sie nicht in eine Schleife einbauen und mit einem einzigen Thread verarbeiten. Ich möchte ein Array von Feldern erstellen, das diese Elemente wie folgt speichert

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

Daher können wir diese Elemente durch Indizierung ansprechen und natürlich kann die zweite Struktur in eine Schleife gestellt werden und qw qe durch die Schleife behandeln.

Ist das möglich? Ich habe vor einiger Zeit solche Einträge im Internet gesehen, aber vielleicht habe ich etwas falsch verstanden, weil ich die Seite nicht mehr finde? Vielleicht können typedef enum union Makros in dieser Angelegenheit helfen?

 
Artyom Trishkin:
Habe ich darauf nicht geantwortet?
Wenn Sie mit der Maus etwas auf dem Diagramm verschieben, wird die Verschiebung des Diagramms in diesem Moment deaktiviert. Sobald Sie die Maustaste loslassen, können Sie das Diagramm verschieben.

Ich bewege nichts in der Tabelle. Wenn ichCHART_EVENT_MOUSE_MOVE = 0 setze,hilft das nicht - das Diagramm kann immer noch verschoben werden.
Ich weiß nicht, wie ich die ChartNavigate-Verarbeitung für das Diagramm deaktivieren kann. Ich habe es auch nicht in der Dokumentation gefunden.
Gleichzeitig wird das "Fadenkreuz" irgendwie mit diesem Fall fertig. Deshalb frage ich - wie?
Sie antworten mir - setzen Sie einfach den richtigen Wert fürCHART_EVENT_MOUSE_MOVE. Ich habe es versucht - es hilft nicht.
Bei jedem Wert von
CHART_EVENT_MOUSE_MOVE können Sie das Diagramm mit der Maus vor und zurück bewegen, indem Sie einfach die linke Maustaste auf dem Diagramm gedrückt halten und die Maus bewegen.
Gleichzeitig verschiebt sich das Diagramm je nach Richtung der horizontalen Mausbewegung im Fenster. Wenn ich die Maus nach rechts bewege, verschiebt sich das Diagramm nach links (in die Vergangenheit),
und wenn ich die Maus nach links bewege, verschiebt sich das Diagramm in die Zukunft, bis der aktuelle Balken erscheint. Danach funktioniert der Versuch, sie mit der Maus nach links zu verschieben, nicht mehr. Aber das ist verständlich.
Wenn ich
das Diagramm im Fenster mit ChartNavigate auf ein Datum in der Vergangenheit verschiebe, was muss ich tun, um sicherzustellen, dass unter keinen Umständen (keine Manipulationen mit Klicks und Mausbewegungen auf dem Diagramm) der Teil des Diagramms, den ich sehe, nicht verschoben wird? Was muss ich tun?


 
Maksims Ignatovs:

Ich bewege nichts in der Tabelle. Wenn ich CHART_EVENT_MOUSE_MOVE = 0 setze, hilft das nicht - das Diagramm kann immer noch verschoben werden.
Ich weiß nicht, wie ich die ChartNavigate-Verarbeitung für das Diagramm deaktivieren kann. Ich habe es auch nicht in der Dokumentation gefunden.


ChartSetInteger(0, CHART_MOUSE_SCROLL, 0); // Выключим прокрутку графика
 
Guten Tag, bitte beheben Sie den Indikator, müssen Sie die Server-Zeit durch die Schaltfläche anzuzeigen, vorausgesetzt, dass die Schaltfläche in seiner ursprünglichen Position sollte zeigen
Das habe ich NICHT verstanden:
#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:
Добрый день, исправьте пожалуйста индикатор, нужно вывести серверное время через кнопку, при условии что кнопка в исходном положении должна показывать
Вот что у меня НЕ получилось:

was genau hat nicht funktioniert? d.h. in Ihren eigenen Worten, was Sie tun wollten...

eine Schaltfläche wird erstellt, die beim Drücken vom Bildschirm verschwindet (wenn sie nicht breit ist)

warum sind Sie mit dem Ergebnis nicht zufrieden?

 
Maxim Kuznetsov:

was genau hat nicht funktioniert? d.h. in Ihren eigenen Worten, was Sie tun wollten...

die Schaltfläche ist so gestaltet, dass sie beim Drücken vom Bildschirm verschwindet (wenn sie nicht breit ist)

Was ist an dem Ergebnis falsch?

das Ergebnis ist, dass die Zeit beim Klicken auf die Schaltfläche ausgeblendet wurde und dann wieder erscheint, weil sie aufgrund der Tatsache aktualisiert wird, dass im Rechner

 
Maxim Kuznetsov:

was genau hat nicht funktioniert? d.h. in Ihren eigenen Worten, was Sie tun wollten...

eine Schaltfläche wird erstellt, die beim Drücken vom Bildschirm verschwindet (wenn sie nicht breit ist)

warum sind Sie mit dem Ergebnis nicht zufrieden?

Könnten Sie es für Sekunden und alles andere funktionieren lassen, wie im Terminal, und Sie können die Schaltfläche deaktivieren
denn wenn ich die Schaltfläche deaktiviere (vom Bildschirm entferne), wird die Uhrzeit wieder angezeigt

 
vebster005:

Könnten Sie das Ergebnis, dass Sekunden und alles andere funktioniert, wie im Terminal zu erhalten, und Sie können die Schaltfläche deaktivieren
denn wenn ich die Schaltfläche deaktiviere (vom Bildschirm entferne), wird die Uhrzeit wieder angezeigt

Es gibt hier eine Menge Leute, die fast jedes Ergebnis erzielen können.

Es ist wichtig, dass Sie selbst versuchen, diese Ziele zu erreichen, anstatt andere darum zu bitten, es für Sie zu tun. Sie sind immer bereit zu helfen, aber um zu helfen, nicht um es für Sie zu tun.

Grund der Beschwerde: