도움이 필요한 배열이 범위를 벗어났습니다. - 페이지 7

 
Valeriy Yastremskiy :

일일 극단, 그리고 당신이 찾은 것은 본질적으로 극단입니다. 저점(또는 최고점)은 현재 가격 과 상당히 큰 거리를 두고 있습니다. Eve의 132일 동안의 최소값과 최대값의 스프레드는 12300포인트 이상입니다. 2000의 가장 가까운 저가에서 800의 고가에서 가격.

나도 따라잡지 않는다.

미안해 내일 설명해줄게 오늘 피곤해

 
MakarFX :

나는 AUDUSD가 없다

ArrayCopyRates(Bar_data_D1, _Symbol , PERIOD_D1 ); // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров

어디에서 누구에게 반환합니까?

 
Алексей Тарабанов :

어디에서 누구에게 반환합니까?

알렉세이 타라바노프 :

어디에서 누구에게 반환합니까?

함수를 호출하는 방법은 2가지가 있습니다.

int ArrayCopyRates (
    MqlRates&    rate_array[] , // 참조에 의해 전달된 MqlRates 배열
          symbol=NULL , // 기기
    정수          기간=0      // 기간
);

지정된 차트의 막대 데이터를 Double RateInfo[][6] 유형의 2차원 배열에 복사하여 복사한 막대의 개수를 반환합니다.

int ArrayCopyRates (
    무효의&       dest_array[][] , // 참조로 전달된 배열
         symbol=NULL , // 기기
    정수         기간=0        // 기간
);

옵션

ArrayCopyRates

호출의 두 번째 형식을 사용할 때 데이터는 실제로 dest_array[][] 배열에 복사되고 배열 자체는 시계열 크기에 맞게 자동으로 재할당됩니다(배열이 정적으로 선언된 경우에도).

배열의 첫 번째 차원에는 막대 수가 포함됩니다. 두 번째 차원에는 값이 있는 6개의 요소가 있습니다.

0 - 시간(시간),
1 - 시가(오픈),
2 - 최저 가격(낮음),
3 - 가장 높은 가격(높음),
4 - 종가(종가),

Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Если некоторое имя, которое не было описано ранее, появляется в выражении и за ним следует левая круглая скобка, то оно по контексту считается именем некоторой функции. Аргументы (формальные параметры) передаются по значению, т. е. каждое выражение x1, . . . , xn вычисляется и значение передается функции. Порядок вычисления выражений и порядок...
 
Dark Kchlyzov :
함수를 호출하는 방법은 2가지가 있습니다.

int ArrayCopyRates (
    MqlRates&    rate_array[] , // 참조로 전달된 MqlRates 배열
          symbol=NULL , // 기기
    정수          기간=0      // 기간
);

지정된 차트의 막대 데이터를 Double RateInfo[][6] 유형의 2차원 배열에 복사하여 복사한 막대의 개수를 반환합니다.

int ArrayCopyRates (
    무효의&       dest_array[][] , // 참조로 전달된 배열
         symbol=NULL , // 기기
    정수         기간=0        // 기간
);

옵션

ArrayCopyRates

호출의 두 번째 형식을 사용할 때 데이터는 실제로 dest_array[][] 배열에 복사되고 배열 자체는 시계열 크기에 맞게 자동으로 재할당됩니다(배열이 정적으로 선언된 경우에도).

배열의 첫 번째 차원에는 막대 수가 포함됩니다. 두 번째 차원에는 값이 있는 6개의 요소가 있습니다.

0 - 시간(시간),
1 - 시가(오픈),
2 - 최저 가격(낮음),
3 - 가장 높은 가격(높음),
4 - 종가(종가),

int 유형의 반환 값은 어디에 저장됩니까? 모든 데이터를 함수에 전달했지만 아무 것도 얻지 못했습니다.

 
Алексей Тарабанов :

int 유형의 반환 값은 어디에 저장됩니까? 모든 데이터를 함수에 전달했지만 아무 것도 얻지 못했습니다.

Min_D_Level = iLow(_Symbol,PERIOD_D1,i); break ;

여기인듯

이중 Min_D_Level ; // 가장 가까운 최소 D 레벨

아니면 내가 뭔가를 이해하지 못하고 있습니까?

int 유형의 반환 값은 어디에 저장됩니까?  

???

정말 뇌가 끓었습니다.

그것은 Prosh에서 어떻게 든 가능합니다.

예를 들어, 여기에서 허용되지 않는 것을 허용했습니다. 이 코드의 예, 등등이 맞을 것입니다.

 

여기에 잠시 앉았다.

 #property version    "1.00"
#property strict

//символ и таймфрейм текущего графика
string symbol;
ENUM_TIMEFRAMES frame;
datetime time;
   

struct BarData
   {
   struct Elem
      {
       int       number;     //порядковый номер периода (дня, месяца или года)
       double    high;       //максимум периода
       double    low;         //минимум периода
       datetime time_high;   //время максимума
       datetime time_low;   //время минимума
      } Arr[];             //массив периода
   int index;               //текущий индекс массива
   double    max;           //последнее максимальное значение периода
   double    min;           //последнее минимальное значение периода
   datetime time_max;       //время максимума
   datetime time_min;       //время минимума

   //при создании структуры указываем, что массив пустой
   BarData(){index=- 1 ;}    
   
   //функция записывает текущие экстремумы
   void WriteBar( int eNumber, string eSymbol, ENUM_TIMEFRAMES eFrame, datetime eTime)
      {
       int eShift= iBarShift (eSymbol,eFrame,eTime);
       double eHigh= iHigh (eSymbol,eFrame,eShift);
       double eLow= iLow (eSymbol,eFrame,eShift);
       //если элементов ещё нет или период сменился
       if (index< 0 || eNumber!=Arr[index].number)
         {
         ArrayResize (Arr,++index+ 1 );
         Arr[index].number=eNumber;
         Arr[index].high=eHigh;
         Arr[index].low=eLow;
         Arr[index].time_high=eTime;
         Arr[index].time_low=eTime;
         }
       //если произошло обновление текущего максимума
       if (eHigh-Arr[index].high> 0 )
         {
         Arr[index].high=eHigh;
         Arr[index].time_high=eTime;
         }
       //если произошло обновление текущего минимума
       if (Arr[index].low-eLow> 0 )
         {
         Arr[index].low=eLow;
         Arr[index].time_low=eTime;
         }
       //если произошло обновление предыдущего максимума
       if (eHigh-max> 0 )
         {
         for ( int i=index+ 1 ; i>= 0 ; i--)
            {
             if (Arr[index].high-eHigh> 0 )
               {
               max=Arr[index].high;
               time_max=Arr[index].time_high;
               break ;
               }
            }
         }
       //если произошло обновление предыдущего минимума
       if (min-eLow> 0 )
         {
         for ( int i=index+ 1 ; i>= 0 ; i--)
            {
             if (eLow-Arr[index].low> 0 )
               {
               min=Arr[index].low;
               time_min=Arr[index].time_low;
               break ;
               }
            }
         }
      }
   } day, month, year;

int OnInit ()
   {
   symbol= Symbol ();
   frame=( ENUM_TIMEFRAMES ) Period ();
   return ( INIT_SUCCEEDED );
   }

void OnTick ()
   {
   //текущее время закрытого бара
   time= iTime (symbol,frame, 1 );
   
   MqlDateTime date; 
   TimeToStruct (time,date);
   
   //делаем записи каждого периода
   day.WriteBar(date.day,symbol,frame,time);
   month.WriteBar(date.mon,symbol,frame,time);
   year.WriteBar(date.year,symbol,frame,time);
   
   //теперь имеем значения   
   Comment ( TimeToString (day.time_max)+ " : " + DoubleToString (day.max)+ " : " + DoubleToString (day.Arr[day.index].high)+ "\n" + TimeToString (day.time_min)+ " : " + DoubleToString (day.Arr[day.index].low)+ " : " + DoubleToString (day.min));
   }
불필요한 순환을 피하기 위해 노력해야 합니다. 우리는 스트림에서 오는 인용문을 가지고 있으며 나중에 기록을 탐구하고 컴퓨터 리소스를 낭비하지 않도록 필요한 항목을 즉시 작성해야 합니다.
 
Dark Kchlyzov :

여기인듯

이중 Min_D_Level ; // 가장 가까운 최소 D 레벨

아니면 내가 뭔가를 이해하지 못하고 있습니까?

예, 당신은 이해하지 못합니다. 다음과 같아야 합니다.

Количество_баров=ArrayCopyRates(Bar_data_D1, _Symbol , PERIOD_D1 ); // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров

음, 더...

 
Алексей Тарабанов :

예, 당신은 이해하지 못합니다. 다음과 같아야 합니다.

자, 더...

이것에 대해 대단히 감사합니다!!

 
Dark Kchlyzov :

이것에 대해 대단히 감사합니다!!

아무 이유 없이 큽니다.

 

3.47 나는 자러 간다.

내일 모두 해결해 드리겠습니다. 궁금한 점이 있으면 알려주세요!

모두 정말 감사합니다!!!