MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1868

 
Andrey Sokolov # :

어떻게 하고 있고 정확히 무엇이 작동하지 않습니까?

MQL5 프로그래밍을 공부하는 동안. 저는 초보자입니다. 독학. 나는 문제를 해결하려고 노력한다. 일반적으로 배열을 하나씩 입력하지 않으려면 키보드에서 배열을 입력하는 기능이 있어야 한다고 생각했습니다. 글쎄, C ++ 문제 책의 작업.

143. 1을 입력하는 프로그램을 작성하세요

5개의 정수로 구성된 차원 배열, 그 후에 숫자를 출력합니다.

0이 아닌 요소로. 각 항목을 입력하기 전에,

요소 번호가 있는 툴팁이 표시됩니다.

정수의 입력 배열입니다.

각 번호를 입력한 후 <Enter> 키를 누릅니다.

a[1] -> 12

a[2] -> 0

a[3] -> 3

a[4] -> -1

a[5] -> 0


배열에 0이 아닌 요소가 3개 있습니다.

 
vladeimirami # :

MQL5 프로그래밍을 공부하는 동안. 저는 초보자입니다. 독학. 나는 문제를 해결하려고 노력한다. 일반적으로 배열을 하나씩 입력하지 않으려면 키보드에서 배열을 입력하는 기능이 있어야 한다고 생각했습니다. 글쎄, C ++ 문제 책의 작업.

143. 1을 입력하는 프로그램을 작성하세요

5개의 정수로 구성된 차원 배열, 그 후에 숫자를 출력합니다.

0이 아닌 요소로. 각 항목을 입력하기 전에,

요소 번호가 있는 툴팁이 표시됩니다.

정수의 입력 배열입니다.

각 숫자를 입력한 후 <Enter> 키를 누릅니다.

a[1] -> 12

a[2] -> 0

a[3] -> 3

a[4] -> -1

a[5] -> 0


배열에 0이 아닌 요소가 3개 있습니다.

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

그러나 이것은 배열을 동적 배열로 바꾸고 ArrayResize() 함수로 크기를 변경할 수 없습니다.

 
Alexey Viktorov # :

그러나 이것은 배열을 동적 배열로 바꾸고 ArrayResize() 함수로 크기를 변경할 수 없습니다.

Alexey, 글쎄, 난 그렇게 멍청하지 않아. 죄송합니다. 이 방법으로도 배열을 채울 수 있습니다. 키보드로 채우고 싶습니다. 여기서 머리를 긁적입니다.
 
vladeimirami # :

글쎄, C ++ 문제 책의 작업.

mql에서는 키보드에서 배열을 채울 수도 있지만 불필요합니다)))

 
Andrey Sokolov # :

mql에서는 키보드에서 배열을 채울 수도 있지만 불필요합니다)))

안드레이! 프로그램 작성. 창조. 생각과 환상의 비행. 회백질의 세포에 보관하지 마십시오. 나는 그것을 키보드에서 원한다. 이것은 제 변명이 아닙니다. 내 욕망은 내 환상의 산물일 뿐입니다. 나는 이것을 키보드에서 원한다.
 
vladeimirami # :
안드레이! 프로그램 작성. 창조. 생각과 환상의 비행. 회백질의 세포에 보관하지 마십시오. 나는 그것을 키보드에서 원한다. 이것은 제 변명이 아닙니다. 내 욕망은 내 환상의 산물일 뿐입니다. 나는 이것을 키보드에서 원한다.

더 쉽게 쓰겠습니다. 질문은 전문적인 주제/포럼에 적합합니다.

 
Andrey Sokolov # :

더 쉽게 쓰겠습니다. 질문은 전문적인 주제/포럼에 적합합니다.

Andrey, 아마도 이 질문이 나와 같은 포럼에서 제기된 것입니까? 포럼에 뭔가가 있으면 링크를 제공하십시오. 아니면 포럼에서 이 토론을 여는 것이 여전히 가치가 있습니까?

어쨌든, 정말 감사합니다!

 
vladeimirami # :
안드레이! 프로그램 작성. 창조. 생각과 환상의 비행. 회백질의 세포에 보관하지 마십시오. 나는 그것을 키보드에서 원한다. 이것은 제 변명이 아닙니다. 내 욕망은 내 환상의 산물일 뿐입니다. 나는 이것을 키보드에서 원한다.

파일에서 배열을 읽습니다. 텍스트 편집기에서 파일을 편집하세요 :-)

 
Andrey Sokolov # :

"해봐 - 방법은 말하지 않을게"

왜 스스로 생각하지 못했습니까? 그리고 그들은 사용자 vladeimirami 에게 모든 작업을 수행하는 방법을 알려줄 것 입니다. 아직 문서에 있습니다.

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

상수 목록을 필수 항목으로 확장합니다.

 #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

상수 값을 얻을 수 있는 위치:. Google "C++ 키 코드"(내가 말했듯이). 그리고 우리는 다음을 처리합니다:

 //--- нажатие кнопки на клавиатуре
   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가 있는 줄 대신에 누른 키에 따라 배열에 값을 추가하는 함수를 삽입합니다. 뭐가 어렵나요?

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

왜 스스로 생각하지 못했습니까? 그리고 그들은 사용자 vladeimirami 에게 모든 작업을 수행하는 방법을 알려줄 것 입니다. 아직 문서에 있습니다.

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

상수 목록을 필수 항목으로 확장합니다.

상수 값을 얻을 수 있는 위치:. Google "C++ 키 코드"(내가 말했듯이). 그리고 우리는 다음을 처리합니다:

Print가 있는 줄 대신에 누른 키에 따라 배열에 값을 추가하는 함수를 삽입합니다. 뭐가 어렵나요?

당신은 열쇠를 두드리기 전에 당신이 대답한 것, 누가 누구에게, 무엇에 대해 대답했는지 읽어 보셨습니까?