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

 
Сергей Таболин :

첫 번째 방법이 도움이 되었습니다)))) 감사합니다.

질문 하나 더: 다른 시간대에서 데이터를 가져오기 위해 표시기에서 표시기의 3개 인스턴스를 엽니다. 그러나 차트에 첨부하면 다음과 같이 출력됩니다.

그게 무슨 뜻이야?

확실히 말씀드릴 수는 없지만 2차 버퍼 초기화가 늦게 된 것 같습니다.

이유가 무엇인지 더 정확하게 알아보려면 다음 줄을 대략 다음과 같이 수정해야 합니다.

 if ( CopyBuffer (handle_MA, 0 , 0 ,ma_values_to_copy,buffer_MA) < 0 ) // копируем данные из индикаторного массива в массив buffer_MA
   {                                                                                 // если не скопировалось
       Print ( "Не удалось скопировать данные из индикаторного буфера в buffer_MA, код ошибки " + IntegerToString ( GetLastError ()));   // то выводим сообщение об ошибке
       return ( 0 );                                                                     // и выходим из функции
   }

그러면 무슨 일이 일어나고 있는지 더 확신할 수 있습니다.

 
Oleg Peiko :

확실히 말씀드릴 수는 없지만 2차 버퍼 초기화가 늦게 된 것 같습니다.

이유가 무엇인지 더 정확하게 알아보려면 다음 줄을 대략 다음과 같이 수정해야 합니다.

그러면 무슨 일이 일어나고 있는지 더 확신할 수 있습니다.

 2019.03 . 23 22 : 58 : 11.410 my_HMA5_123 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA
2019.03 . 23 22 : 58 : 11.410 my_HMA5_123 (GBPUSD,M30)        Не удалось скопировать данные из индикаторного буфера в buffer_MA2
2019.03 . 23 22 : 58 : 11.410 my_HMA5_123 (GBPUSD,M30)         4806
2019.03 . 23 22 : 58 : 11.637 my_HMA5_123.ex5::my_HMA5 (GBPUSD,M15)   BarsCalculated () вернул - 1 , код ошибки 4806
2019.03 . 23 22 : 58 : 11.648 my_HMA5_123 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA
2019.03 . 23 22 : 58 : 11.648 my_HMA5_123 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA2
2019.03 . 23 22 : 58 : 11.648 my_HMA5_123 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA3
ERR_INDICATOR_DATA_NOT_FOUND      4806     Запрошенные данные не найдены

이것에 대해 뭔가를 할 수 있습니까?

그건 그렇고,이 사본은 M15에서 열립니다.

다른 TF들도 마찬가지지만...

 
Сергей Таболин :

이것에 대해 뭔가를 할 수 있습니까?

그건 그렇고,이 사본은 M15에서 열립니다.

다른 TF들도 마찬가지지만...

타이머에서 2분에 한 번씩 필요한 시간 프레임에 대한 데이터를 요청합니다. 따라서 tf에 대한 최신 데이터를 항상 갖게 됩니다.

추가로: 맨 처음에 OnCalculate()에서 다음과 같이 묻습니다.

   if ( iTime ( NULL , PERIOD_M15 , 1 )== 0 )
       return 0 ;

따라서 15분 시간 프레임의 데이터가 준비될 때까지 표시기는 다음 틱을 기다립니다.
CopyXXX 기능을 사용하여 계산에 필요한 데이터 양을 요청할 수 있습니다.

   datetime array[];
   if ( CopyTime ( NULL , PERIOD_M15 , 0 ,number_of_datas,array)!=number_of_datas)
       return 0 ;

이 경우 number_of_datas에 필요한 데이터의 양이 사용 가능할 때까지 표시기는 다음 틱을 기다립니다.

기능을 사용하기로 결정한 경우

 Bars ( NULL , PERIOD_M15 );

.., 그런 다음 계산을 위해 rate_total 이하의 데이터 양을 가져와야 한다는 점을 고려해야 합니다. 그렇지 않으면 배열이 제한을 초과하게 됩니다 . 즉, 현재 TF에 M15보다 막대가 더 적은 경우 현재 TF = Rates_total의 숫자와 동일한 막대 수를 취해야 합니다.

 
Artyom Trishkin :

타이머에서 2분에 한 번씩 필요한 시간 프레임에 대한 데이터를 요청합니다. 따라서 tf에 대한 최신 데이터를 항상 갖게 됩니다.

추가로: 맨 처음에 OnCalculate()에서 다음과 같이 묻습니다.

따라서 15분 시간 프레임의 데이터가 준비될 때까지 표시기는 다음 틱을 기다립니다.
CopyXXX 기능을 사용하여 계산에 필요한 데이터 양을 요청할 수 있습니다.

이 경우 number_of_datas에 필요한 데이터의 양이 사용 가능할 때까지 표시기는 다음 틱을 기다립니다.

기능을 사용하기로 결정한 경우

.., 그런 다음 계산을 위해 rate_total 이하의 데이터 양을 가져와야 한다는 점을 고려해야 합니다. 그렇지 않으면 배열이 제한을 초과하게 됩니다 . 즉, 현재 TF에 M15보다 막대가 더 적은 경우 현재 TF = Rates_total의 숫자와 동일한 막대 수를 취해야 합니다.

고맙습니다.

다음과 같이 했습니다.

 int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
   
   if ( iTime ( NULL , PERIOD_CURRENT , 1 )== 0 )   return ( 0 ); 
   if ( iTime ( NULL ,periodTF1, 1 )== 0 )       return ( 0 ); 
   if ( iTime ( NULL ,periodTF2, 1 )== 0 )       return ( 0 ); 
   
   int ma_values_to_copy; 
   int ma_calculated = 0 ;
   if ( PeriodSeconds ( PERIOD_CURRENT ) < PeriodSeconds (periodTF1) && PeriodSeconds ( PERIOD_CURRENT ) < PeriodSeconds (periodTF2))   ma_calculated = BarsCalculated (handle_MA);
   else
   if ( PeriodSeconds (periodTF1) < PeriodSeconds ( PERIOD_CURRENT ) && PeriodSeconds (periodTF1) < PeriodSeconds (periodTF2))        ma_calculated = BarsCalculated (handle_MA2);
   else
   if ( PeriodSeconds (periodTF2) < PeriodSeconds ( PERIOD_CURRENT ) && PeriodSeconds (periodTF2) < PeriodSeconds (periodTF1))        ma_calculated = BarsCalculated (handle_MA3);
   
   if (ma_calculated <= 0 ){ 
       PrintFormat (" BarsCalculated () вернул %d, код ошибки %d",ma_calculated, GetLastError ()); 
       return ( 0 ); 
     }  
   if (prev_calculated == 0 || ma_calculated != ma_bars_calculated || rates_total > prev_calculated + 1 ){ 
       if (ma_calculated > rates_total) ma_values_to_copy = rates_total; 
       else ma_values_to_copy = ma_calculated; 
     } else { 
      ma_values_to_copy = (rates_total - prev_calculated) + 1 ; 
     } 

결과:

 2019.03 . 24 00 : 56 : 38.056 my_HMA5_125 (GBPUSD,M30)         BarsCalculated () вернул - 1 , код ошибки 4806
2019.03 . 24 00 : 56 : 38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA
2019.03 . 24 00 : 56 : 38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA_c
2019.03 . 24 00 : 56 : 38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA2
2019.03 . 24 00 : 56 : 38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA_c2
2019.03 . 24 00 : 56 : 38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA3
2019.03 . 24 00 : 56 : 38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA_c3

지표는 나에게 어렵다)))

 

안녕하세요!
CopyHigh 기능에 대해 알려주세요.
" 해당 기호 및 기간에 대한 막대 의 최고 가격에 대한 과거 데이터를 배열로 수신 " 기능의 정의에서 읽었습니다.

Bid 또는 Ask 가격 배열은 어떻습니까? 아니면 어떻게 든 필요한 가격 유형을 설정할 수 있습니까?

 
renatmt5 :

안녕하세요!
CopyHigh 기능에 대해 알려주세요.
" 해당 기호 및 기간에 대한 막대 의 최고 가격에 대한 과거 데이터를 배열로 수신 " 기능의 정의에서 읽었습니다.

Bid 또는 Ask 가격 배열은 어떻습니까? 아니면 어떻게 든 필요한 가격 유형을 설정할 수 있습니까?

도움말 : 그래프 기능

플로팅 차트의 기능

그래프가 작성된 기준으로 기록 데이터는 하드 디스크에 저장됩니다. 차트가 열리면 디스크에서 데이터를 로드하고 거래 서버에서 마지막으로 누락된 데이터를 다운로드합니다. 하드 디스크의 금융 상품에 대한 과거 데이터가 없는 경우 이력의 마지막 512개 막대가 로드됩니다.

이전 데이터를 다운로드하려면 그래프를 필요한 영역으로 이동하십시오. 차트를 연 후 플랫폼은 현재 시세에 대한 정보를 받기 시작합니다. 따라서 추가 가격 역학이 실시간으로 형성됩니다. 이 정보는 자동으로 히스토리 파일에 저장되며 향후 차트를 다시 열 때 사용됩니다.

  •   플랫폼 설정   "차트의 최대 막대" 매개변수가 설정됩니다. 이 옵션을 사용하면 차트에 표시되는 과거 데이터의 양을 제어할 수 있습니다.
  • 차트는 입찰가를 기반으로 합니다. 심도가 기호에 대해 사용 가능한 경우 차트는 마지막 가격 (마지막으로 완료된 거래의 가격)을 기반으로 합니다.
Просмотр и настройка графиков - Графики котировок, технический и фундаментальный анализ - MetaTrader 5
Просмотр и настройка графиков - Графики котировок, технический и фундаментальный анализ - MetaTrader 5
  • www.metatrader5.com
Графики в торговой платформе отображают изменение котировок финансовых инструментов во времени. Они необходимы для проведения технического анализа и работы советников. Они позволяют трейдерам наглядно следить за котировками валют и акций в режиме реального времени и моментально реагировать на любое изменение ситуации на финансовых рынках...
 
Vladimir Karputov :

도움말 : 그래프 기능

플로팅 차트의 기능

그래프가 작성된 기준으로 기록 데이터는 하드 디스크에 저장됩니다. 차트가 열리면 디스크에서 데이터를 로드하고 거래 서버에서 마지막으로 누락된 데이터를 다운로드합니다. 하드 디스크의 금융 상품에 대한 과거 데이터가 없는 경우 이력의 마지막 512개 막대가 로드됩니다.

이전 데이터를 다운로드하려면 그래프를 필요한 영역으로 이동하십시오. 차트를 연 후 플랫폼은 현재 시세에 대한 정보를 받기 시작합니다. 따라서 추가 가격 역학이 실시간으로 형성됩니다. 이 정보는 자동으로 히스토리 파일에 저장되며 향후 차트를 다시 열 때 사용됩니다.

  •   플랫폼 설정   "차트의 최대 막대" 매개변수가 설정됩니다. 이 옵션을 사용하면 차트에 표시되는 과거 데이터의 양을 제어할 수 있습니다.
  • 차트는 입찰가를 기반으로 합니다. 심도가 기호에 대해 사용 가능한 경우 차트는 마지막 가격 (마지막으로 완료된 거래의 가격)을 기반으로 합니다.

블라디미르, 좋은 오후입니다! 언제나처럼 도와주세요 :) 감사합니다!

 
모두에게 좋은 하루. 거래에 할당된 자금을 기반으로 포지션의 정확한 양 을 계산하는 방법을 알려주십시오.
 

mql5의 N에서 가장 작은 양초를 찾는 방법은 무엇입니까?

mql4에서

   min= 99999 ;
   N= 5 ;
   for ( int i= 1 ;i<=N;i++)
     {
       if ( High [i]- Low [i]<min) min= High [i]- Low [i];
     }
 
yiduwi :

mql5의 N에서 최소 양초를 찾는 방법은 무엇입니까?

mql4에서

고문에서 또는 지표에서? 현재 기간 동안 또는 다른 사람의 것입니까?

사유: