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

 
Andrey Sokolov #:

Wie machen Sie das, und was genau funktioniert nicht?

Ich bin noch dabei, die MQL5-Programmierung zu lernen. Ich bin eine Anfängerin. Ich bin Autodidakt. Ich versuche, einige Probleme zu lösen. Ich habe mir gedacht, dass es eine Funktion geben sollte, mit der man eine Reihe von Ziffern über die Tastatur eingeben kann, und ich habe die Reihe nicht mit einer Ziffer nach der anderen eingegeben. Nun, das Problem stammt aus dem Problembuch C++.

143. Ein Programm schreiben, das über die Tastatur ein eindimensionales Feld mit 5 ganzen Zahlen eingibt.

Array mit 5 Ganzzahlen und gibt dann die Anzahl der

von Nicht-Null-Elementen. Vor der Eingabe jedes Elements wird eine Aufforderung

und zeigt dann einen Tooltip mit der Nummer des Elements an.

Eingabe eines Arrays von Ganzzahlen.

Nachdem Sie jede Nummer eingegeben haben, drücken Sie <Eingabe>.

а[1] -> 12

а[2] -> 0

а[3] -> 3

а[4] -> -1

а[5] -> 0


Das Array enthält 3 Elemente, die nicht Null sind

 
vladeimirami #:

Ich bin noch dabei, die MQL5-Programmierung zu lernen. Ich bin eine Anfängerin. Autodidaktisch. Ich versuche, Probleme zu lösen. Ich dachte, es sollte eine Funktion geben, mit der man ein Feld um eine Ziffer erweitern kann. Nun, das Problem stammt aus dem Problembuch C++.

143. Ein Programm schreiben, das über die Tastatur ein eindimensionales Feld mit 5 ganzen Zahlen eingibt.

Array mit 5 Ganzzahlen und gibt dann die Anzahl der

von Nicht-Null-Elementen. Vor der Eingabe jedes Elements wird eine Aufforderung

und zeigt dann einen Tooltip mit der Nummer des Elements an.

Geben Sie eine Reihe von Ganzzahlen ein.

Nachdem Sie jede Nummer eingegeben haben, drücken Sie <Eingabe>.

а[1] -> 12

а[2] -> 0

а[3] -> 3

а[4] -> -1

а[5] -> 0


Das Array enthält 3 Elemente, die nicht Null sind

int a[] = {12, 0, 3, -1, 0};

Dadurch wird das Array jedoch zu einem dynamischen Array, so dass Sie seine Größe nicht mit ArrayResize() ändern können.

 
Alexey Viktorov #:

Dadurch wird das Array jedoch dynamisch, und Sie können seine Größe nicht mit ArrayResize() ändern.

Alexey, ich bin nicht so dumm. Tut mir leid, ich kann auch auf diese Weise ein Feld füllen. Ich muss sie nur über die Tastatur ausfüllen. Das ist es, was ich herauszufinden versuche.
 
vladeimirami #:

Nun, das Problem stammt aus dem C++-Problembuch.

In mql kann man das Array auch über die Tastatur füllen, muss es aber nicht)))

 
Andrey Sokolov #:

In mql kann man ein Array auch über die Tastatur füllen, aber das ist nicht nötig)))

Andrei! Programmierung. Kreativität. Die Flucht der Gedanken und Phantasien. Sie können sie nicht in den Zellen der grauen Zellen festhalten. Ich will es von der Tastatur weg haben. Das ist keine Täuschung. Es ist nur so, dass mein Wunsch ein Hirngespinst ist. Ich würde es gerne so machen, von der Tastatur aus.
 
vladeimirami #:
Andrei! Programmierung. Kreativität. Fliegende Gedanken und Fantasien. Sie bleiben nicht in den Zellen der grauen Zellen. Ich will es von der Tastatur weg haben. Das ist keine Täuschung. Es ist nur so, dass mein Wunsch ein Hirngespinst ist. Ich würde es gerne so machen, von der Tastatur aus.

Ich werde es einfach machen. Fragen sind in speziellen Themen/Foren angebracht.

 
Andrey Sokolov #:

Ich werde es einfach machen. Fragen sind in speziellen Themen/Foren angebracht.

Andrey, vielleicht wurde diese Frage im Forum gestellt, wie meine? Wenn es etwas im Forum gibt, geben Sie mir bitte einen Link. Oder sollten wir diese Diskussion im Forum eröffnen?

Auf jeden Fall vielen Dank!

 
vladeimirami #:
Andrei! Programmierung. Kreativität. Die Flucht der Gedanken und Phantasien. Sie können sie nicht in den Zellen der grauen Substanz halten. Ich will es von der Tastatur weg haben. Das ist keine Täuschung. Es ist nur so, dass mein Wunsch ein Hirngespinst ist. Ich würde es gerne so machen, von der Tastatur aus.

das Array aus der Datei lesen. Und bearbeiten Sie die Datei in einem beliebigen Texteditor :-)

 
Andrey Sokolov #:

"Tu das - ich sage dir nicht, wie."

Warum haben Sie das nicht selbst herausgefunden? Und sagen Sie dem Benutzervladeimirami , wie er es machen soll. Das steht alles in der Dokumentation:

https://www.mql5.com/ru/docs/event_handlers/onchartevent

//Пример слушателя событий графика

//+------------------------------------------------------------------+
//|                                          OnChartEvent_Sample.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property description "Пример слушателя событий графика и генератора пользовательских событий"
//--- идентификаторы служебных клавиш
#define  KEY_NUMPAD_5       12
#define  KEY_LEFT           37
#define  KEY_UP             38
#define  KEY_RIGHT          39
#define  KEY_DOWN           40
#define  KEY_NUMLOCK_DOWN   98
#define  KEY_NUMLOCK_LEFT  100
#define  KEY_NUMLOCK_5     101
#define  KEY_NUMLOCK_RIGHT 102
#define  KEY_NUMLOCK_UP    104
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- выведем значение константы CHARTEVENT_CUSTOM
   Print("CHARTEVENT_CUSTOM=",CHARTEVENT_CUSTOM);
//---
   Print("Запущен эксперт с именем ",MQLInfoString(MQL5_PROGRAM_NAME));
//--- установка флага получения событий создания объектов графика
   ChartSetInteger(ChartID(),CHART_EVENT_OBJECT_CREATE,true);
//--- установка флага получения событий удаления объектов графика
   ChartSetInteger(ChartID(),CHART_EVENT_OBJECT_DELETE,true);
//--- включение сообщений о прокрутке колесика мышки
   ChartSetInteger(0,CHART_EVENT_MOUSE_WHEEL,1);
//--- принудительное обновление свойств графика гарантирует готовность к обработке событий
   ChartRedraw();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- счетчик тиков для генерации пользовательского события 
   static int tick_counter=0;
//--- будем делить накопленные тики на это число
   int simple_number=113;
//--- 
   tick_counter++;
//--- отправляем пользовательское событие, если счетчик тиков кратен simple_number
   if(tick_counter%simple_number==0)
     {
      //--- сформируем идентификатор пользовательского события в диапазоне от 0 до 65535
      ushort custom_event_id=ushort(tick_counter%65535);
      //---  отправим пользовательское событие с заполнением параметров
      EventChartCustom(ChartID(),custom_event_id,tick_counter,SymbolInfoDouble(Symbol(),SYMBOL_BID),__FUNCTION__);
      //--- сделаем вывод в лог для изучения и анализа результатов примера
      Print(__FUNCTION__,": Отправлено пользовательcкое событие ID=",custom_event_id);
     }
//---     
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//--- нажатие кнопки на клавиатуре
   if(id==CHARTEVENT_KEYDOWN)
     {
      switch((int)lparam)
        {
         case KEY_NUMLOCK_LEFT:  Print("Нажата KEY_NUMLOCK_LEFT");   break;
         case KEY_LEFT:          Print("Нажата KEY_LEFT");           break;
         case KEY_NUMLOCK_UP:    Print("Нажата KEY_NUMLOCK_UP");     break;
         case KEY_UP:            Print("Нажата KEY_UP");             break;
         case KEY_NUMLOCK_RIGHT: Print("Нажата KEY_NUMLOCK_RIGHT");  break;
         case KEY_RIGHT:         Print("Нажата KEY_RIGHT");          break;
         case KEY_NUMLOCK_DOWN:  Print("Нажата KEY_NUMLOCK_DOWN");   break;
         case KEY_DOWN:          Print("Нажата KEY_DOWN");           break;
         case KEY_NUMPAD_5:      Print("Нажата KEY_NUMPAD_5");       break;
         case KEY_NUMLOCK_5:     Print("Нажата KEY_NUMLOCK_5");      break;
         default:                Print("Нажата какая-то неперечисленная клавиша");
        }
     }
//--- нажатие левой кнопкой мышки на графике
   if(id==CHARTEVENT_CLICK)
      Print("Координаты щелчка мышки на графике: x = ",lparam,"  y = ",dparam);
//--- нажатие мышкой на графическом объекте
   if(id==CHARTEVENT_OBJECT_CLICK)
      Print("Нажатие кнопки мышки на объекте с именем '"+sparam+"'");
//--- удален объект
   if(id==CHARTEVENT_OBJECT_DELETE)
      Print("Удален объект с именем ",sparam);
//--- создан объект
   if(id==CHARTEVENT_OBJECT_CREATE)
      Print("Создан объект с именем ",sparam);
//--- изменен объект
   if(id==CHARTEVENT_OBJECT_CHANGE)
      Print("Изменен объект с именем ",sparam);
//--- перемещен объект или изменены координаты точек привязки
   if(id==CHARTEVENT_OBJECT_DRAG)
      Print("Изменение точек привязки объекта с именем ",sparam);
//--- изменен текст в поле ввода графического объекта Edit
   if(id==CHARTEVENT_OBJECT_ENDEDIT)
      Print("Изменен текст в объекте Edit ",sparam,"  id=",id);
//--- события перемещения мышки
   if(id==CHARTEVENT_MOUSE_MOVE)
      Comment("POINT: ",(int)lparam,",",(int)dparam,"\n",MouseState((uint)sparam));
   if(id==CHARTEVENT_MOUSE_WHEEL)
     {
      //--- разберем состояние кнопок и колесика мышки для этого события 
      int flg_keys = (int)(lparam>>32);          // флаг состояний клавиш Ctrl, Shift и кнопок мышки
      int x_cursor = (int)(short)lparam;         // X-координата, в которой произошло событие колесика мышки
      int y_cursor = (int)(short)(lparam>>16);   // Y-координата, в которой произошло событие колесика мышки
      int delta    = (int)dparam;                // суммарное значение прокрутки колесика, срабатывает при достижении +120 или -120
      //--- обработаем флаг 
      string str_keys="";
      if((flg_keys&0x0001)!=0)
         str_keys+="LMOUSE ";
      if((flg_keys&0x0002)!=0)
         str_keys+="RMOUSE ";
      if((flg_keys&0x0004)!=0)
         str_keys+="SHIFT ";
      if((flg_keys&0x0008)!=0)
         str_keys+="CTRL ";
      if((flg_keys&0x0010)!=0)
         str_keys+="MMOUSE ";
      if((flg_keys&0x0020)!=0)
         str_keys+="X1MOUSE ";
      if((flg_keys&0x0040)!=0)
         str_keys+="X2MOUSE ";
 
      if(str_keys!="")
         str_keys=", keys='"+StringSubstr(str_keys,0,StringLen(str_keys)-1)+"'";
      PrintFormat("%s: X=%d, Y=%d, delta=%d%s",EnumToString(CHARTEVENT_MOUSE_WHEEL),x_cursor,y_cursor,delta,str_keys);
     }
//--- изменение размеров графика или изменение свойств графика через диалог свойств
   if(id==CHARTEVENT_CHART_CHANGE)
      Print("Изменение размеров или свойств графика");
//--- пользовательское событие
   if(id>CHARTEVENT_CUSTOM)
      PrintFormat("Пользовательское событие ID=%d, lparam=%d, dparam=%G, sparam=%s",id,lparam,dparam,sparam);
  }
//+------------------------------------------------------------------+
//| MouseState                                                       |
//+------------------------------------------------------------------+
string MouseState(uint state)
  {
   string res;
   res+="\nML: "   +(((state& 1)== 1)?"DN":"UP");   // mouse left
   res+="\nMR: "   +(((state& 2)== 2)?"DN":"UP");   // mouse right 
   res+="\nMM: "   +(((state&16)==16)?"DN":"UP");   // mouse middle
   res+="\nMX: "   +(((state&32)==32)?"DN":"UP");   // mouse first X key
   res+="\nMY: "   +(((state&64)==64)?"DN":"UP");   // mouse second X key
   res+="\nSHIFT: "+(((state& 4)== 4)?"DN":"UP");   // shift key
   res+="\nCTRL: " +(((state& 8)== 8)?"DN":"UP");   // control key
   return(res);
  }

Erweitern Sie die Liste der Konstanten um die erforderlichen Konstanten:

#define  KEY_NUMPAD_5       12
#define  KEY_LEFT           37
#define  KEY_UP             38
#define  KEY_RIGHT          39
#define  KEY_DOWN           40
#define  KEY_NUMLOCK_DOWN   98
#define  KEY_NUMLOCK_LEFT  100
#define  KEY_NUMLOCK_5     101
#define  KEY_NUMLOCK_RIGHT 102
#define  KEY_NUMLOCK_UP    104

Wo man Werte für die Konstanten erhält:. Googeln Sie "C++-Schlüsselcodes" (wie ich bereits sagte). Und verarbeiten Sie es:

//--- нажатие кнопки на клавиатуре
   if(id==CHARTEVENT_KEYDOWN)
     {
      switch((int)lparam)
        {
         case KEY_NUMLOCK_LEFT:  Print("Нажата KEY_NUMLOCK_LEFT");   break;
         case KEY_LEFT:          Print("Нажата KEY_LEFT");           break;
         case KEY_NUMLOCK_UP:    Print("Нажата KEY_NUMLOCK_UP");     break;
         case KEY_UP:            Print("Нажата KEY_UP");             break;
         case KEY_NUMLOCK_RIGHT: Print("Нажата KEY_NUMLOCK_RIGHT");  break;
         case KEY_RIGHT:         Print("Нажата KEY_RIGHT");          break;
         case KEY_NUMLOCK_DOWN:  Print("Нажата KEY_NUMLOCK_DOWN");   break;
         case KEY_DOWN:          Print("Нажата KEY_DOWN");           break;
         case KEY_NUMPAD_5:      Print("Нажата KEY_NUMPAD_5");       break;
         case KEY_NUMLOCK_5:     Print("Нажата KEY_NUMLOCK_5");      break;
         default:                Print("Нажата какая-то неперечисленная клавиша");
        }
     }

Anstelle einer Zeichenkette mit Print eine Funktion einfügen, die dem Array je nach gedrückter Taste einen Wert hinzufügt. Was ist so schwer?

Документация по MQL5: Обработка событий / OnChartEvent
Документация по MQL5: Обработка событий / OnChartEvent
  • www.mql5.com
OnChartEvent - Обработка событий - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Mihail Matkovskij #:

Warum haben Sie das nicht selbst herausgefunden? Und sagen Sie dem Benutzervladeimirami , wie er es machen soll. Das steht alles in der Dokumentation:

https://www.mql5.com/ru/docs/event_handlers/onchartevent

Erweitern Sie die Liste der Konstanten um die erforderlichen Konstanten:

Wo man Werte für die Konstanten erhält:. Googeln Sie "C++-Schlüsselcodes" (wie ich bereits sagte). Und verarbeiten Sie es:

Anstelle einer Zeichenkette mit Print eine Funktion einfügen, die dem Array je nach gedrückter Taste einen Wert hinzufügt. Was ist so kompliziert?

Lesen Sie wenigstens, worauf Sie antworten und wer wem was geantwortet hat, bevor Sie in die Tasten hauen

Grund der Beschwerde: