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

 
-Aleks- :

내 기능에 표시, 어떻게 할 수 있습니까? 정말 이해하기 어렵습니다.


함수에서 필요한 변수(메인 프로그램용)를 결정하고 전달/가져와야 합니다. 모든 사람이 필요한 경우 프로그램 맨 처음에 이러한 변수를 선언하면 모든 함수에서 한 번에 볼 수 있습니다.
 
-Aleks- :

예, "왜"라고 생각하지 말고 "어떻게"를 생각하는 것이 좋습니다.

이 기능과 관련이 없다고 말했는데...

이러한 함수는 일반적으로 크기가 커서 다른 값을 얻기 위해 여러 번 실행을 위해 호출하는 것이 유감이지만 모든 결과를 한 번에 얻고 싶습니다.

예를 들어, 모든 로트 수와 모든 주문 수를 한 번에 주문 유형별 로 분류하고 싶습니다.

 #property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict
double n_Lot_BUY;
double n_Lot_SELL;
int n_Order_BUY;
int n_Order_SELL;

int OnInit ()
  {
   return ( INIT_SUCCEEDED );
  }
void OnDeinit ( const int reason)
  {
  }
void OnTick ()
  {
   F();
   Print ( "Лотов BUY:" ,n_Lot_BUY, "   Лотов SELL:" ,n_Lot_SELL, "   Позиций BUY:" ,n_Order_BUY, "   Позиций SELL:" ,n_Order_SELL);
  }
//+------------------------------------------------------------------+
void F()
  {
   n_Lot_BUY= 0 ;
   n_Lot_SELL= 0 ;
   n_Order_BUY= 0 ;
   n_Order_SELL= 0 ;
   for ( int pos= OrdersTotal ()- 1 ;pos>= 0 ;pos--)
     {
       if (! OrderSelect (pos, SELECT_BY_POS , MODE_TRADES )){ break ;}
       if ( OrderType ()== 0 )
        {
         n_Order_BUY++;
         n_Lot_BUY=n_Lot_BUY+ OrderLots ();
        }
       if ( OrderType ()== 1 )
        {
         n_Order_SELL++;
         n_Lot_SELL=n_Lot_SELL+ OrderLots ();
        }
     }
  }
//+------------------------------------------------------------------+
 
Nikolay Gaylis :

저것들. 아이디어는 모든 변수를 미리 선언한 다음 함수를 통해 변경하는 것입니다. 옵션을 주셔서 감사합니다. 그러나 같은 유형의 변수에 같은 이름을 사용하는 경우 항상 편리한 것은 아닙니다. 다른 옵션이 있습니까?
 

위에서 이미 제안한 것처럼 동일한 유형을 구조로 결합 하고 배열을 선언 할 수 있습니다.

 //структура из переменных
struct OrdStruct
   {
   double tp;
   double sl;
   double open;
   double close;
   double lot;
   datetime time_open; 
   datetime time_close;
   };

//массив структур
OrdStruct ORDERS[];


//обращение к переменным
ORDERS[i].sl= OrderStopLoss ();
ORDERS[i].tp= OrderTakeProfit ();
ORDERS[i].lot= OrderLots ();

//или
ORDERS[i]=ORDERS[i+ 1 ];

ZeroMemory (ORDERS[i]);
 
Taras Slobodyanik :

위에서 이미 제안한 것처럼 동일한 유형을 구조로 결합 하고 배열을 선언 할 수 있습니다.

이미 이해하기 어렵습니다... 예를 들어 i를 이해할 수 없습니다. ORDERS[i]= 배열의 크기를 다음과 같게 설정해야 하지 않습니까?

 
-Aleks- :

이미 이해하기 어렵습니다... 예를 들어 i를 이해할 수 없습니다. ORDERS[i]= 배열의 크기를 다음과 같게 설정해야 하지 않습니까?


이것은 단지 예일 뿐이며 주문 수에 따라 배열의 크기를 지정하고 설정 해야 합니다...

즉, 변수는 그대로 tp/sl/lot이지만 배열 인덱스 i가 변경됩니다.

 
-Aleks- :

당신의 고통을 보는 것은 마음이 아픕니다... 당신은 기술 포럼에 있습니다. 논리를 사용하십시오.

1. 작업을 설명합니다.

2. 어떤 변수를 사용하는지 설명하십시오.

3. 출력으로 얻고자 하는 것을 설명하십시오.

기술 포럼에서 기술 언어로 자신의 생각을 표현하는 방법을 배우십시오. 그렇지 않으면 여기에서 오랫동안 추측할 수 있습니다.

 
Taras Slobodyanik :


이것은 단지 예일 뿐이며 주문 수에 따라 배열의 크기를 지정하고 설정 해야 합니다...

즉, 변수는 그대로 tp/sl/lot이지만 배열 인덱스 i가 변경됩니다.

네, 알겠습니다. 감사합니다. 나중에 어딘가에 적용해 봐야겠네요.... 하지만 이해가 안 가는데 이 구조로 배열처럼 작업할 수 있을까요? 다른 표준 작업을 정렬하고 수행합니까?

 
Alexey Kozitsyn :

당신의 고통을 보는 것은 마음이 아픕니다... 당신은 기술 포럼에 있습니다. 논리를 사용하십시오.

1. 작업을 설명합니다.

2. 어떤 변수를 사용하는지 설명하십시오.

3. 출력으로 얻고자 하는 것을 설명하십시오.

기술 포럼에서 기술 언어로 자신의 생각을 표현하는 방법을 배우십시오. 그렇지 않으면 여기에서 오랫동안 추측할 수 있습니다.

내 말에 논리가없는 곳에 쓰십시오.

지식의 고통 - 결정의 기쁨.

내 문제를 던지고 싶지 않아 작업을 단순화했습니다. 인식의 어려움을 일으킨 원인을 추측하기가 어렵습니다 ... 제 "고통"으로 인해 불편 함을 드려 죄송합니다.

 
-Aleks- :

저것들. 아이디어는 모든 변수를 미리 선언한 다음 함수를 통해 변경하는 것입니다. 옵션을 주셔서 감사합니다. 그러나 같은 유형의 변수에 같은 이름을 사용하는 경우 항상 편리한 것은 아닙니다. 다른 옵션이 있습니까?

여기 를 주의 깊게 읽으면 모든 것을 이해하게 될 것입니다. 참조로 매개변수를 전달하여 제안된 첫 번째 옵션을 설명합니다.

간단히 말해서, 함수를 호출할 때 매개변수로 변수를 전달할 수 있습니다.

 double FirstMethod( int i, int j)

또는 변수 이름 앞에 & 기호가 있는 경우 참조로

 double SecondMethod( int &i, int &j)

두 번째 변형에서 참조에 의해 함수에 전달된 변수는 다른 이름을 가진 변수와 함께 변경됩니다. 특정한 경우에 다음은 변수 i와 j입니다.

다른 모든 것은 도움말 텍스트에서 충분히 명확합니다.

Передача параметров - Функции - Основы языка - Справочник MQL4
Передача параметров - Функции - Основы языка - Справочник MQL4
  • docs.mql4.com
Передача параметров - Функции - Основы языка - Справочник MQL4