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

 
mr LSV :

제대로 이해합니까?

 if (rates_total - prev_calculated == 1 )
 Print ( "Новый бар" );
 
Taras Slobodyanik :

감사합니다.

 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[])
   {
   fin= iTime ( Symbol (), PERIOD_M1 , 0 );
   if (last==fin) return (rates_total);
   last=fin;
   
   if (rates_total - prev_calculated == 1 )
   Print ( "Новый бар" );


return (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[])
   {
   fin= iTime ( Symbol (), PERIOD_M1 , 0 );
   if (last==fin) return (rates_total);
   last=fin;
   
   if (rates_total - prev_calculated == 1 )
   //Print("Новый бар");
   
   if (open[ 1 ] > close[ 1 ])
   {
       Print ( "Dn" );
   }
   else if (open[ 1 ] < close[ 1 ])
   {
       Print ( "Up" );
   }

return (rates_total);

이러한 코드는 촛불이 무엇이든 상관없이 지속적으로 동일한 메시지를 생성합니다.
주기를 통해 양초를 어떻게 든 다시 계산해야한다는 것을 이해합니까?
좋은 분들 알려주세요!

 
Taras Slobodyanik :

글쎄, 왜 그런 경험이 없는 프로그래머를 비웃는가?

그리고 누락된 이력이 로드되고 차이가 1보다 크면? 그러나 우리는 신경 쓰지 않습니다. 음, 한 마디를 건너 뛰자 ... 한 마디 더 - 하나 덜 생각하십시오. 그리고 설명도 없이 왜 코드를 주나요? 결국 무슨 일이 일어났는지 볼까요?

 
Alexey Viktorov :

글쎄, 왜 그런 경험이 없는 프로그래머를 비웃는가?

그리고 누락된 이력이 로드되고 차이가 1보다 크면? 그러나 우리는 신경 쓰지 않습니다. 음, 한 마디를 건너 뛰자 ... 한 마디 더 - 하나 덜 생각하십시오. 그리고 설명도 없이 왜 코드를 주나요? 결국 무슨 일이 일어났는지 볼까요?

Alexey, 올바르게 하는 방법을 알려주세요. 물론이죠.
 
Alexey Viktorov :

글쎄, 왜 그런 경험이 없는 프로그래머를 비웃는가?

그리고 누락된 이력이 로드되고 차이가 1보다 크면? 그러나 우리는 신경 쓰지 않습니다. 음, 한 마디를 건너 뛰자 ... 한 마디 더 - 하나 덜 생각하십시오. 그리고 설명도 없이 왜 코드를 주나요? 결국 무슨 일이 일어났는지 볼까요?

분명히 zhezh)

로드되면 1보다 크며 이것은 새 막대아닙니다 . 왜 추적합니까? 작업에는 그런 것이 없습니다.

 
mr LSV :

바를 열 때 마지막으로 닫힌 촛불의 방향을 결정해야 한다고 말해주세요.

이러한 코드는 촛불이 무엇이든 상관없이 지속적으로 동일한 메시지를 생성합니다.
주기를 통해 양초를 어떻게 든 다시 계산해야한다는 것을 이해합니까?
좋은 분들 알려주세요!

괄호가 없기 때문입니다.

 if (rates_total - prev_calculated == 1 )
   {
   //Print("Новый бар");
   if (open[ 1 ] > close[ 1 ])
        {
         Print ( "Dn" );
        }
   else if (open[ 1 ] < close[ 1 ])
        {
         Print ( "Up" );
        }
   }
 
mr LSV :

제대로 이해합니까?

네, 그러죠.

미스터 LSV :

양초의 열림은 9-12초의 지연으로 발생합니다.
말해주세요, 이것이 첫 번째 틱이 오는 것입니까?

새 양초의 첫 번째 눈금에 계산을 수행하고 모든 작업을 수행하는 것이 매우 중요합니다.


새 양초 는 첫 번째 틱에만 형성됩니다.

확인을 위해 틱을 요청할 수 있습니다.

 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[])
 {
   MqlTick tick[];
   if (prev_calculated > 0 && rates_total > prev_calculated)
   {
     if ( CopyTicks ( _Symbol , tick, COPY_TICKS_ALL , 0 , 2 ) <= 0 )
       Print ( "ERR " , GetLastError ());
     else
       ArrayPrint (tick);
   }

   return (rates_total);
 }

마지막 틱이 현재 캔들에 속하고 이전 틱이 이전 캔들에 속하는지 확인합니다.

 2021.06 . 02 17 : 50 : 59.311 00 (EURUSD,M1)                   [time]   [bid]   [ask] [last] [volume]    [time_msc] [flags] [volume_real]
2021.06 . 02 17 : 50 : 59.311 00 (EURUSD,M1)  [ 0 ] 2021.06 . 02 17 : 50 : 58 1.22005 1.22007 0.0000          0 1622656258958        4        0.00000
2021.06 . 02 17 : 50 : 59.311 00 (EURUSD,M1)  [ 1 ] 2021.06 . 02 17 : 51 : 00 1.22004 1.22010 0.0000          0 1622656260655        6        0.00000
2021.06 . 02 17 : 51 : 58.741 00 (EURUSD,M1)                   [time]   [bid]   [ask] [last] [volume]    [time_msc] [flags] [volume_real]
2021.06 . 02 17 : 51 : 58.741 00 (EURUSD,M1)  [ 0 ] 2021.06 . 02 17 : 51 : 59 1.22021 1.22026 0.0000          0 1622656319887        6        0.00000
2021.06 . 02 17 : 51 : 58.741 00 (EURUSD,M1)  [ 1 ] 2021.06 . 02 17 : 52 : 00 1.22020 1.22025 0.0000          0 1622656320080        6        0.00000

여기 내 데모에서 나는 지체없이 오프닝을 얻습니다.

그러나 덜 유동적인 쌍에서는 1초의 지연이 있습니다.

 2021.06 . 02 17 : 55 : 59.742 00 (CADJPY,M1)                   [time]  [bid]  [ask] [last] [volume]    [time_msc] [flags] [volume_real]
2021.06 . 02 17 : 55 : 59.742 00 (CADJPY,M1)  [ 0 ] 2021.06 . 02 17 : 55 : 59 90.881 90.885    0.000          0 1622656559379        2          0.000
2021.06 . 02 17 : 55 : 59.742 00 (CADJPY,M1)  [ 1 ] 2021.06 . 02 17 : 56 : 01 90.882 90.887    0.000          0 1622656561076        6          0.000
 
Taras Slobodyanik :

분명히 zhezh)

로드되면 1보다 크며 이것은 New bar아닙니다 . 왜 추적합니까? 작업에는 그런 것이 없습니다.

새 막대와 함께 기록을 로드할 수 없다는 내용은 어디에 있습니까?
 
Taras Slobodyanik :

괄호가 없기 때문에

도움이되지 않았습니다 :(

 2021.06 . 02 17 : 54 : 09.465 Test (Volatility 10 Index,M1)      Up
2021.06 . 02 17 : 55 : 09.439 Test (Volatility 10 Index,M1)      Up
2021.06 . 02 17 : 56 : 09.686 Test (Volatility 10 Index,M1)      Up
2021.06 . 02 17 : 57 : 09.471 Test (Volatility 10 Index,M1)      Up
2021.06 . 02 17 : 58 : 09.586 Test (Volatility 10 Index,M1)      Up