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

 
kopeyka2 :

그게 바로 내가 생각한 것입니다. "매개변수"라는 단어에 대한 오해의 문제입니다. 그리고 핸들 --> CopyBuffer와 관련된 모든 변수를 살펴보기 시작했습니다.

1) 처음부터 내 질문은 핸들 데이터를 저장하기 위해 시간 프레임 SCREEN을 전환하는 것입니다. 글쎄, 그것은 MT4에서처럼.

그리고 실제로 다음과 같이 밝혀졌습니다.

ALWAYS 및 on ALL 기간 은 동일한 값 10을 제공합니다.

여기에서 아무것도 받지 못한 나는 계속 이동했습니다.

2) 나는 인용한다: " 지정된 양의 지정된 인디케이터의 지정된 버퍼의 데이터를 버퍼 배열로 수신".

즉, 손으로 count를 설정하여 값이 있는 INTERVAL이 있어야 합니다. 그리고 그들은! 하지만!!!!!! 처리 기간이 일치하는 경우에만

모니터 화면의 시간대 PERIOD_H1. 모든 값은 명확하게 전송됩니다. 그러나 데이터 화면에서 다른 시간대로 이동하는 것은 NO입니다.

그들은 전송하지 않습니다!!!! 그리고 제 질문은 바로 이것이었습니다. 그리고 계산을 위한 막대의 수는 여기에 없으면 그다지 중요하지 않습니다!!!


제안된 지표 MTF_LRMA.mq5 를 살펴보았지만 동일한 내용이 있습니다. 화면의 다른 시간 프레임으로 전환하고 데이터는 화면의 시간 프레임을 따릅니다. 그리고 손잡이가 필요합니다.

예: iClose(NULL, PERIOD_H1, 5); 모든 시간 프레임에서 동일한 값을 제공합니다: H1의 10개 막대.

지금까지 모든 예제는 CopyBuffer 버퍼의 카운트를 조정하는 것이었습니다. 하지만 어레이가 비어 있습니다.


당신이 옳지 않다. 핸들은 모든 시간대에 데이터를 제공합니다. 10시간 후에 예를 들어 드리겠습니다. 모바일은 안되요
 
Artyom Trishkin :
당신이 옳지 않다. 핸들은 모든 시간대에 데이터를 제공합니다. 10시간 후에 나는 예를 들어 줄 것이다. 모바일은 안되요

확인. 답변 해주셔서 감사합니다


나 자신을 수정

Напррмер: iClose ( NULL , PERIOD_H1 , 5 ); на всех таймфреймах будут давать одно и тоже значение : Закрытие на 5 баре по Н 1 . 

그럴지도 몰라

 MqlParam params[]; 
//--- create iMA("EURUSD",PERIOD_M15,8,0,MODE_EMA,PRICE_CLOSE); 
   ArrayResize (params, 4 ); 
//--- set ma_period 
   params[ 0 ].type         = TYPE_INT ; 
   params[ 0 ].integer_value= 0 ; 
//--- set ma_shift 
   params[ 1 ].type         = TYPE_INT ; 
   params[ 1 ].integer_value= 0 ; 
//--- set ma_method 
   params[ 2 ].type         = TYPE_INT ; 
   params[ 2 ].integer_value= MODE_EMA ; 
//--- set applied_price 
   params[ 3 ].type         = TYPE_INT ; 
   params[ 3 ].integer_value= PRICE_CLOSE ; 
//--- create MA 
   h_MA= IndicatorCreate ( "EURUSD" , PERIOD_M15 , IND_MA , 4 ,params); 
//--- release indicators (first h_MACD) 
   
   if (h_MA== INVALID_HANDLE )
     {
       Print ( "The iMA (" , string ( PERIOD_M15 ), ") object was not created: Error " , GetLastError ());
       return INIT_FAILED ;
     }
//---
   return ( INIT_SUCCEEDED );

그러나 첫 번째 방법을 사용하여 기술 지표 (iMA)의 가치를 얻을 수 있다고 저를 설득하신다면 저는 기다릴 것입니다. 근데 아직도 이해가 안감...

 
kopeyka2 :

확인. 답변 해주셔서 감사합니다


나 자신을 수정

그럴지도 몰라

그러나 첫 번째 방법을 사용하여 기술 지표 (iMA)의 가치를 얻을 수 있다고 저를 설득하신다면 저는 기다릴 것입니다. 근데 아직도 이해가 안감...

위에서 다른 TF의 막대 수가 다르므로 지표를 계산해야 하는 TF에 따라 복사할 막대의 수를 다르게 요청해야 함을 보여주었습니다. BarsCalculated()를 사용하여 표시기에 의해 계산된 막대 수를 확인하고 계속 진행합니다. 다음은 MTF에 대한 이러한 구현의 한 부분입니다.

 //+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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 (rates_total==prev_calculated) return (rates_total);
//---
   int     i;
   double diff;
//--- check for rates count
   if (rates_total<=ExtPeriodRSI)
       return ( 0 );
//---
   if (TF!= PERIOD_CURRENT )
   {
       if (handle== INVALID_HANDLE )
        {
         handle= iCustom ( Symbol (),TF,ind_name,Variant,RSIPeriod,Levl_Up,Levl_Down, PERIOD_CURRENT );
         return ( 0 );
        }
       else
        {
         int bars_calculated= BarsCalculated (handle);
                   //Print("Начнем расчет - " , bars_calculated);
         if (bars_calculated<= 0 ) return ( 0 );
         if ( Bars ( Symbol (),TF)!=bars_calculated)
           {
             for (i=rates_total-prev_calculated- 1 ;i>= 0 ;i--)
              {
               Delta[i]= 0.0 ;   
              }
             return (prev_calculated);
           } 
        }
 
Aleksey Vyazmikin :

위에서 다른 TF의 막대 수가 다르므로 지표를 계산해야 하는 TF에 따라 복사할 막대의 수를 다르게 요청해야 함을 보여주었습니다. BarsCalculated()를 사용하여 표시기에 의해 계산된 막대 수를 확인하고 계속 진행합니다. 다음은 MTF에 대한 이러한 구현의 한 부분입니다.

고맙습니다. 노력하겠습니다. 그러나 앞에서 지적했듯이 배열은 전혀 비어 있습니다. 어레이의 Sdigi I가 손을 잡았습니다. 다 비어있다
 
kopeyka2 :
고맙습니다. 노력하겠습니다. 그러나 앞에서 지적했듯이 배열은 전혀 비어 있습니다. 어레이의 Sdigi I이 손을 잡았습니다. 다 비어있다
데이터가 다른 시간대에서 로드될 때까지 기다려야 한다는 사실을 무시하고 계십니까? 나는 예를 들었다. 표시된 표시기에서 데이터는 더 높은 기간에서만 가져옵니다. tf를 현재 값보다 작거나 같게 설정하면 현재 데이터에서 데이터를 가져옵니다. 이 모든 것이 코드에 있지만 귀찮게 보지 않았습니다. 그러나 당신은 진술을 합니다.
 
Artyom Trishkin :
데이터가 다른 시간대에서 로드될 때까지 기다려야 한다는 사실을 무시하고 계십니까? 나는 예를 들었다. 표시된 표시기에서 데이터는 더 높은 기간에서만 가져옵니다. tf를 현재 값보다 작거나 같게 설정하면 현재 데이터에서 데이터를 가져옵니다. 이 모든 것이 코드에 있지만 귀찮게 보지 않았습니다. 그러나 당신은 진술을 합니다.
나사로 표시기를 볼뿐만 아니라 분해했습니다. 데이터 전송 지연에 대한 생각은 처음부터 있었습니다. 그리고 바로 첫눈에 너의 타이머가 보였다. 이 방향으로 볼게요
 
kopeyka2 :
나사로 표시기를 볼뿐만 아니라 분해했습니다. 데이터 전송 지연에 대한 생각은 처음부터 있었습니다. 그리고 바로 첫눈에 너의 타이머가 보였다. 이 방향으로 볼게요
현재 TF 로의 데이터 변환 이 있는 마지막 주기를 주석 처리하고 계산된 Mashek 버퍼에서 모든 그래픽 버퍼로 데이터를 전송하면 차트에서 보고 싶은 것을 볼 수 있습니다.
 

일단은 하자

다른 (비 기본) 기간


 
kopeyka2 :

일단은 하자

다른 (비 네이티브) 기간


데이터가 수신되지 않은 경우를 대비하여 의도적으로 리턴 라인을 주석 처리했습니까? 무엇 때문에? 바퀴의 나사를 풀고 엔진이 윙윙거린다고 하면 핸들은 돌아가는데 차가 안돌아가서 작동이 안되고 있다는게 어쩐지 험난하네요.
 
kopeyka2 :
고맙습니다. 노력하겠습니다. 그러나 앞에서 지적했듯이 배열은 전혀 비어 있습니다. 어레이의 Sdigi I가 손을 잡았습니다. 다 비어있다

이전 에 나는 당신에게 당신의 지표 코드의 일부를 프린트와 함께 주었습니다. 당신은 그것을 복사하려고 했습니까? 로그에 아무 것도 표시되지 않고 숫자가 아니라 오류가 표시되지 않습니까?

사유: