초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 1479

 
MrBrooklin #:

정말 감사합니다, 알렉산더. 수정 덕분에 코드가 제대로 작동했습니다. 솔직히 말해서 저도 소나무 세 그루에서 혼란스러웠다는 것을 깨달았습니다. 함수에 인수를 전달하는 방법을 다시 공부해야겠습니다. 분명히 제가 완전히 오해하고 있는 것 같습니다.

안부 전해주세요, 블라디미르.

전역 영역에 변수를 출력하는 것은 함수에 인수를 전달하는 것이 아닙니다...

//+------------------------------------------------------------------+
//|                                              Count_Pos (v.2).mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Calculate positions Buy and Sell                                 |
//+------------------------------------------------------------------+
void Calc_Pos(uint & pos_buy,uint & pos_sell)
  {
   for(int i=0; i<PositionsTotal(); i++)
     {
      PositionGetSymbol(i);
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
         pos_buy++;
      if(
         PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
         pos_sell++;
     }
   Print("pos_buy ",pos_buy);
   Print("pos_sell ",pos_sell);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   uint count_buy=0, count_sell=0;
   Calc_Pos(count_buy,count_sell);
   Print("По символу ",_Symbol," открыто: ",count_buy," длинных позиций");
   Print("По символу ",_Symbol," открыто: ",count_sell," коротких позиций");
  }
//+------------------------------------------------------------------+

함수 입력에 변수 이름 앞에 &를 넣으면 모든 문제가 해결됩니다.

 
Alexey Viktorov #:

전역 범위로 변수를 출력하는 것은 함수에 인수를 전달하지 않습니다...

함수 입력 시 변수 이름 앞에 &를 넣으면 모든 문제가 해결됩니다.

안녕하세요 Alexey, 그게 문제입니다 !!! 정말 고마워요! 내 머리가 모두 부러졌고 뭔가 빠진 것이 있다고 생각했습니다! 두뇌가 충분하지 않다는 것이 밝혀졌습니다!!!! ))

안부, 블라디미르.

 
Alexey Viktorov #:
함수 입력 시 변수 이름 앞에 &를 넣으면 모든 문제가 해결됩니다.

레퍼런스가 있는 함수에 대한 동영상을 찾아서 봤습니다. 이 비디오 강의를 통해 저는 초보자를 위한 MQL5 강의 가 아니라 특히 멍청한 영재 초보자를 위한 MQL5 강의가 필요하다는 것을 깨달았습니다. 요컨대, 저는 아무것도 이해하지 못했습니다. 일반적으로받은 모든 정보를 소화하고이 비디오를 5 ~ 6 번 다시 시청해야합니다. 하지만 여가 시간에 할 일이있을 것입니다! ))

안부, 블라디미르.

 
MrBrooklin #:

링크가 있는 함수에 대한 동영상을 찾아서 봤습니다. 이 비디오 레슨을 통해 저는 초보자를 위한 MQL5 레슨이 아니라 특히 어리석음에 재능이 있는 초보자를 위한 MQL5 레슨이 필요하다는 것을 깨달았습니다. 요컨대, 저는 아무것도 이해하지 못했습니다. 일반적으로받은 모든 정보를 소화하고이 비디오를 5 ~ 6 번 다시 시청해야합니다. 하지만 여가 시간에 할 일이있을 것입니다! ))

안부, 블라디미르.

시간을 보낼 곳이 없더라도 시간을 낭비하지 마십시오. "선생님"의 이름은 그 자체로 말하며, 딜레탕트는 딜레탕트입니다.

이 비디오는 3 분 동안 만 유용합니다. 나머지는 산만 할 뿐이며 유용한 정보를 잃게됩니다.

문서를주의 깊게 읽고 예제를 실험하면 모든 것을 이해하는 것이 좋습니다.

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

시간을 낭비할 곳이 없더라도 시간을 낭비하지 마세요. '선생님'이라는 이름만으로도 아마추어는 아마추어라는 것을 알 수 있습니다.

이 동영상에는 유용한 정보가 3분밖에 없습니다. 나머지는 산만하고 유용한 정보를 잃게 됩니다.

문서를주의 깊게 읽고 예제를 실험하면 모든 것을 이해하는 것이 좋습니다.

감사합니다, Alexey, 비디오 강의가 더 유익하고 유용 할 것이라고 생각했지만 정확히 그 반대 인 것으로 판명되었습니다. MQL5 참조 설명서 인 매개 변수 전송 섹션의 경우 동일한 방식으로 읽었지만 "책을 보면 그림이 보인다!"라는 유명한 말처럼 밝혀졌습니다. 나는 아무것도 이해하지 못했습니다. 요컨대, 물론 몇 번 더 다시 읽고 실험 할 것이지만 선택의 여지가 많지 않습니다. ))

안부, 블라디미르.

 

비디오 자습서를 보고 MQL5 참조 설명서에서 참조로 인 수를 전달하는 방법에 대해 읽은 후에는 어느 정도 명확해진 것 같습니다. 그러나 참조 매뉴얼에 제시된 코드를 분석 한 결과, 제 생각에는 참조로 인수를 전달하는 것과는 아무런 관련이 없지만 여전히 한 조각이 당혹감을 불러 일으켰습니다:

//+------------------------------------------------------------------+
//| передача параметров по ссылке                                    |
//+------------------------------------------------------------------+
double SecondMethod(int &i,int &j)
  {
   double res;
//---
   i*=2;
   j/=2;
   res=i+j;
//---
   return(res);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---.
   int a=14,b=8;
   Print("a и b перед вызовом:",a," ",b);
   double d= SecondMethod(a,b);
   Print("a и b после вызова:",a," ",b);
  }
//+------------------------------------------------------------------+
//--- результат выполнения скрипта
//  a и b перед вызовом: 14 8
//  a и b после вызова: 28 4

이와 관련하여 MQL5 프로그래밍 전문가에게 질문이 있습니다. 도대체 왜 SecondMethod(a,b ) 함수를 OnStart( )의 d 변수에 "밀어 넣은" 것일까요? 스크립트의 올바른 작동을위한 전제 조건입니까, 아니면 제가 다시 오해 한 것이 있습니까?

감사합니다, 블라디미르.

 

도와주세요.

시간이 있는 배열이 여러 개 있는데 이 배열의 일부 요소의 시간이 일치할 수 있습니다.

시간 값을 반복하지 않고 하나의 배열로 수집해야 합니다.

이런 식으로 해봤습니다:

struct str1
  {
   int               time[];// в массиве порядка 10 тыс элементов
  };

struct str2
  {
   str1              arr[];// в массиве порядка 1 тыс элементов
  };

str2 m_name[]; // в массиве порядка 100 элементов

int ArrFull[]; // массив в который нужно собрать отсортированное время без повторений
//+------------------------------------------------------------------+
void OnStart()
  {
// считаем что m_name[] ранее уже заполнили


   int tempArr[];// объявляю дополнительный массив

   int size1 = ArraySize(m_name);
   for(int i = 0; i < size1; i++)
     {
      int size2 = ArraySize(m_name[i].arr);
      for(int j = 0; j < size2; j++)
        {
         // копирую в дополнительный массив все массивы времени из структур
         ArrayInsert(tempArr, m_name[i].arr[j].time, ArraySize(tempArr));
        }
     }
// сортирую дополнительный массив
   ArraySort(tempArr);

   int size = ArraySize(tempArr);
   ArrayResize(ArrFull, size);
   ArrFull[0] = tempArr[0];
   int j = 1;

// копирую не повторяющиеся элементы из дополнительного массива в массив с которым в дальнейшем буду работать
   for(int i = 1; i < size; i++)
      if(ArrFull[j - 1] != tempArr[i])
        {
         ArrFull[j] = tempArr[i];
         j++;
        }

   size = ArrayResize(ArrFull, j);

// дальше продолжение. много много букв
  }
//+------------------------------------------------------------------+


하지만 매우 느린 코드로 밝혀졌습니다. 더 빨라야 합니다. 방법 ????

 
MrBrooklin 참조로 인 수를 전달하는 방법에 대해 읽은 후에는 어느 정도 명확해진 것 같습니다. 그러나 참조 매뉴얼에 제시된 코드를 분석한 결과, 제 생각에는 참조로 인수를 전달하는 것과는 아무런 관련이 없지만 여전히 혼란을 야기하는 한 가지 조각이 있었습니다:

이와 관련하여 MQL5 프로그래밍 전문가에게 질문이 있습니다. 도대체 왜 SecondMethod(a,b ) 함수를 OnStart( )의 d 변수에 "밀어 넣은" 것일까요? 스크립트의 올바른 작동을위한 전제 조건이며 내가 다시 무언가를 잘못 이해 했습니까?

안부 인사, 블라디미르.

d 변수에는 함수 실행의 결과가 할당됩니다.
 
Artyom Trishkin #:
변수 d에 함수 실행 결과가 할당됩니다.

답변해 주셔서 감사합니다, Artyom!할당 없이 SecondMethod(a,b ) 함수만 사용하는 것은불가능합니까?

감사합니다, 블라디미르.

 
MrBrooklin #:

답변해 주셔서 감사합니다, Artyom!할당 없이 SecondMethod(a,b ) 함수만 사용하는 것은불가능하나요?

안녕하세요, 블라디미르.

네, 가능합니다. 그러면 참조로 전달된 변수에서만 두 개의 값이 수신됩니다. 즉, 함수는 세 가지 값을 반환합니다.
사유: