MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1868

 
Andrey Sokolov # :

Nasıl yapıyorsun ve tam olarak ne işe yaramıyor?

MQL5 programlama okurken. ben acemiyim Kendi kendine öğretildi. sorunları çözmeye çalışırım Genel olarak tek tek dizi girmemek için klavyeden dizi girebilmek için bir fonksiyon olması gerektiğini düşündüm. Eh, C ++ problem kitabından görev.

143. Bir programa giren bir program yazın

5 tamsayıdan oluşan boyutlu dizi, ardından sayıyı verir

sıfır olmayan öğelere dönüştürülür. Her öğeye girmeden önce,

eleman numarasına sahip bir araç ipucu görüntülenir.

Tamsayıların giriş dizisi.

Her numarayı girdikten sonra <Enter> tuşuna basın.

a[1] -> 12

a[2] -> 0

a[3] -> 3

a[4] -> -1

a[5] -> 0


Dizide sıfır olmayan 3 eleman var

 
vladeimirami # :

MQL5 programlama okurken. ben acemiyim Kendi kendine öğretildi. sorunları çözmeye çalışırım Genel olarak tek tek dizi girmemek için klavyeden dizi girme fonksiyonu olması gerektiğini düşündüm. Eh, C ++ problem kitabından görev.

143. Bir programa giren bir program yazın

5 tamsayıdan oluşan boyutlu dizi, ardından sayıyı verir

sıfır olmayan öğelere dönüştürülür. Her öğeye girmeden önce,

eleman numarasına sahip bir araç ipucu görüntülenir.

Tamsayıların giriş dizisi.

Her numarayı girdikten sonra <Enter> tuşuna basın.

a[1] -> 12

a[2] -> 0

a[3] -> 3

a[4] -> -1

a[5] -> 0


Dizide sıfır olmayan 3 eleman var

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

Ancak bu, diziyi dinamik hale getirir ve boyutu ArrayResize() işlevi tarafından değiştirilemez.

 
Alexey Viktorov # :

Ancak bu, diziyi dinamik hale getirir ve boyutu ArrayResize() işlevi tarafından değiştirilemez.

Alexey, o kadar aptal değilim. Üzgünüm, diziyi bu şekilde de doldurabilirim. Klavye ile doldurmak istiyorum. İşte burada kafayı yiyorum.
 
vladeimirami # :

Eh, C ++ problem kitabından görev.

Mql'de klavyeden bir dizi de doldurabilirsiniz, ancak bu gereksizdir)))

 
Andrey Sokolov # :

Mql'de klavyeden bir dizi de doldurabilirsiniz, ancak bu gereksizdir)))

Andrey! Programlama. Yaratılış. Düşüncelerin ve fantezilerin uçuşu. Onları gri maddenin hücrelerinde tutmayın. Klavyeden istiyorum. Bu benim bahanem değil. Sadece arzum benim hayal ürünüm. Bunu klavyeden istiyorum.
 
vladeimirami # :
Andrey! Programlama. Yaratılış. Düşüncelerin ve fantezilerin uçuşu. Onları gri maddenin hücrelerinde tutmayın. Klavyeden istiyorum. Bu benim bahanem değil. Sadece arzum benim hayal ürünüm. Bunu klavyeden istiyorum.

Daha kolay yazacağım. Sorular özel konulara / forumlara uygundur.

 
Andrey Sokolov # :

Daha kolay yazacağım. Sorular özel konulara / forumlara uygundur.

Andrey, belki bu soru benimki gibi forumda sorulmuştur? Forumda bir şey varsa, lütfen bir bağlantı verin. Yoksa yine de bu tartışmayı forumda açmaya değer mi?

Her durumda, çok teşekkürler!

 
vladeimirami # :
Andrey! Programlama. Yaratılış. Düşüncelerin ve fantezilerin uçuşu. Onları gri maddenin hücrelerinde tutmayın. Klavyeden istiyorum. Bu benim bahanem değil. Sadece arzum benim hayal ürünüm. Bunu klavyeden istiyorum.

dosyadan dizi oku. Ve dosyayı herhangi bir metin düzenleyicide düzenleyin :-)

 
Andrey Sokolov # :

"Yap - sana nasıl olduğunu söylemeyeceğim"

Neden kendin düşünmedin? Ve vladeimirami kullanıcısına her şeyi nasıl yapacağını söylerlerdi . Hala belgelerde:

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);
  }

Sabitlerin listesini gerekli olanlara genişletiyoruz:

 #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

Sabitler için değerler nereden alınır:. Google "C++ Anahtar Kodları" (dediğim gibi). Ve işliyoruz:

 //--- нажатие кнопки на клавиатуре
   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 ( "Нажата какая-то неперечисленная клавиша" );
        }
     }

Print ile bir satır yerine, basılan tuşa bağlı olarak diziye bir değer eklemek için bir fonksiyon ekliyoruz. Zor olan ne?

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

Neden kendin düşünmedin? Ve vladeimirami kullanıcısına her şeyi nasıl yapacağını söylerlerdi . Hala belgelerde:

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

Sabitlerin listesini gerekli olanlara genişletiyoruz:

Sabitler için değerler nereden alınır:. Google "C++ Anahtar Kodları" (dediğim gibi). Ve işliyoruz:

Print ile bir satır yerine, basılan tuşa bağlı olarak diziye bir değer eklemek için bir fonksiyon ekliyoruz. Zor olan ne?

Anahtarları çekiçlemek için acele etmeden önce ne cevapladığınızı, kimin kime ve ne hakkında cevap verdiğini bile okuyor musunuz?