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

 

안녕하세요, 프로그래머 여러분!

간단한 문제를 해결하도록 도와주세요. MQL4의 코드가 있습니다. 5에 적용하고 싶습니다. 즉, MQL5에서 유사하게 작동합니다.


//Введем внешнюю переменную, чтобы иметь возможность изменить количество сканируемых свечей.
extern int Window=30;
 
void OnStart()
{
   //Вводим переменные.
   double Highest=High[0];
   double Lowest=Low[0];
 
   //Сканируем 30 свечей и обновляем значения самых высоких и самых низких цен.
   for(int i=0; i<=Window; i++) {
   if(Low[i]<Lowest) Lowest=Low[i];
   if(High[i]>Highest) Highest=High[i];  
}
 
   //Выводим результат.
   Alert("Самая высокая цена ",Highest," - Самая низкая цена ",Lowest);
}



내 변형은 분명히 통과하지 못합니다. 어떤 이유로 많은 오류가 있습니다):

//Введем внешнюю переменную, чтобы иметь возможность изменить количество сканируемых свечей.
extern int Window=30;
 
 
void OnStart()
{

double   o = iOpen(NULL, PERIOD_CURRENT, 0);
double   h = iHigh(NULL, PERIOD_CURRENT, 0);
double   l = iLow(NULL, PERIOD_CURRENT, 0);
double   c = iClose(NULL, PERIOD_CURRENT, 0);

double Highest=h;
double Lowest=l;

   //Сканируем 30 свечей и обновляем значения самых высоких и самых низких цен.
     
   for(int i=0; i<=Window; i++) 
{
   if  ( l[i] < Lowest ) 
   Lowest=[i];
  

   if  ( h[i] > Highest ) 
   Highest=[i];  
  
}
 
   //Выводим результат.
   Print("Самая высокая цена ",Highest,
         " - Самая низкая цена ",Lowest);
}
 
 
Alexey Belyakov #:

안녕하세요, 프로그래머 여러분!

간단한 문제를 해결하도록 도와주세요. MQL4의 코드가 있습니다. 5에 적용하고 싶습니다. 즉, MQL5에서도 비슷하게 작동해야 합니다.


도움말에서

iHigh

및 유사한 기능

작동하지 않는다면 루프에 오류가 있는 것입니다.

어떤 변수에 데이터를 추가하고 있는지 확인할 수 없습니다.

 
lynxntech #:

도움말을 살펴보세요.

및 유사한 기능

작동하지 않으면 루프에 오류가 있는 것입니다.

가 발생하고 어떤 변수에 데이터를 추가하고 있는지 확인할 수 없습니다.

최고/최저가 표시되어야 합니다.

이것을 보세요 :

int val_index=iLowest(NULL,0,MODE_CLOSE,10,1);

매우 근접했지만 아직은 아닙니다.

음, 가장 낮은 마지막 10 개 (첫 번째 "1"에서 시작) 캔들 스틱의 숫자를 보여줍니다. 하지만 저는 캔들 번호가 아니라 가격 값이 필요합니다.

 

일반적으로 뒤가 아닌 앞을 바라보는 것이 필요합니다.

예를 들어, 다음 100개의 캔들 중 이전 캔들(번호가 "1"인)의 시작부터 "최소"를 검색합니다.

 
lynxntech #:

실제 작업을 측정 한 사람들에게 질문이었고, 더 나은 개발자에게는 계획에 무엇이 있는지 알고있는 개발자에게 질문이있었습니다.

실험하고 싶지 않고 다른 많은 작업이 있습니다.

맞아요. 왕실 사업이 아닙니다 .........

 
Alexey Viktorov #:

맞습니다. 왕의 비즈니스가 아닌 .........

초보자의 질문 스레드를 닫는 게 어떨까요? 알렉세이, 돕고 싶지 않으시다면 불만이 너무 많으니 관여하지 마세요.

플랫폼이 어떻게 작동하는지 알기 위해 전문적인 답변을 듣고 싶었습니다.

 
Alexey Belyakov #:

안녕하세요, 프로그래머 여러분!

간단한 문제를 해결하도록 도와주세요. MQL4의 코드가 있습니다. 5에 적용하고 싶습니다. 즉, MQL5에서도 비슷하게 작동해야 합니다.




내 변형은 분명히 작동하지 않습니다. 어떤 이유로 많은 오류가 있습니다):

분명히 당신은 프로그래밍에 완전히 익숙하지 않습니다. 그렇기 때문에 어떤 조언을 해도 지금까지는 성공하지 못할 것입니다.

하지만 그럼에도 불구하고... 함수를 이해하려고 노력하세요.

int  CopyHigh(
   string           symbol_name,      // имя символа
   ENUM_TIMEFRAMES  timeframe,        // период
   int              start_pos,        // откуда начнем 
   int              count,            // сколько копируем
   double           high_array[]      // массив для копирования максимальных цен
   );

배열로 작업하는 기능

int  ArrayMaximum(
   const void&   array[],             // массив для поиска
   int           start=0,             // с какого индекса начинаем поиск
   int           count=WHOLE_ARRAY    // количество проверяемых
   );

이 문제를 해결하는 다른 변형이 있습니다.

 
Alexey Belyakov #:

안녕하세요, 프로그래머 여러분!

간단한 문제를 해결하도록 도와주세요. MQL4의 코드가 있습니다. 5에 적용하고 싶습니다. 즉, MQL5에서도 비슷하게 작동해야 합니다.




내 변형은 분명히 작동하지 않습니다. 어떤 이유로 많은 오류가 있습니다):

많은 표시기 대신 CopyRates()를 사용하면 코드 편집이 최소화되고 코드가 간결하고 가독성이 유지됩니다.

//Введем внешнюю переменную, чтобы иметь возможность изменить количество сканируемых свечей.
extern int Window=30;
 
void OnStart()
{
   //Вводим переменные.
   double Highest=DBL_MIN;// 
   double Lowest=DBL_MAX; // 
   MqlRates rates[];
   //Сканируем 30 свечей и обновляем значения самых высоких и самых низких цен.
   if (CopyRates(_Symbol,_Period,30,rates)!=30) {
      Alert("copyRates failed");
      return;
   }
   for(int i=0; i<=Window; i++) {
      if(rates[i].low<Lowest) Lowest=rates[i].low;
      if(rates[i].high>Highest) Highest=rates[i].high;  
   }
 
   //Выводим результат.
   Alert("Самая высокая цена ",Highest," - Самая низкая цена ",Lowest);
}

실제로는 곡선 따옴표에 대한 검사도 추가해야 합니다.

 
Maxim Kuznetsov #:

CopyRates() 대신에 여러 개의 지표와 코드 편집이 최소화되고 코드가 간결하고 가독성이 유지됩니다.

실제로는 곡선 따옴표에 대한 검사도 추가해야 합니다.

Maxim, CopyRates는 심볼의 모든 기능을 가져오는 것으로 표시되지 않나요?

더 저렴하게 개별 기능이 있습니다.

 
lynxntech #:

맥심, 카피레이트는 캐릭터의 모든 기능을 가져오는 것으로 표시되지 않나요?

더 저렴하게 개별 기능이 있습니다.

1) 개발자의 말에 따르면 가상 복사, 즉 가능한 데이터가 전송되지 않으면 내부 참조가 전송됩니다. 2) 전체 복사를하더라도 iHigh, iLow에 대해 별도로 CopyBuffer보다 빠릅니다 (2 개 대신 1 개의 호출, 여전히 동일한 터미널 구조로 이동).

마지막으로 중요한 것은 포팅할 때 코드가 시각적으로도 가능한 한 원본과 유사해야 한다는 것입니다. 코드가 원본과 정확히 동일한 작업을 수행한다는 것을 절대적으로 확신해야합니다. 그리고 작은 최적화는 나중에 정말 중요한 경우에만 수행합니다.

사유: