오류, 버그, 질문 - 페이지 53

 
Kos :
설명서에서 MqlTradeCheckResult 검사 결과 구조에 대한 응답 코드(Retcode)에 대한 설명을 찾지 못했습니다. 그들은 할 것인가?


모든 설명은 문서에 있습니다.

OrderSend 함수 , MqlTradeResult 구조 및 거래 응답 코드 목록을 살펴보십시오.

 
Renat :

Told - 크기가 없는 빈 배열

Tnew[1] - 배열을 넘어 배열이 Tnew[1]로 설명되므로 인덱스가 0에서 시작하기 때문에 해당 요소는 Tnew[0]으로만 액세스할 수 있습니다.

결론은 무엇입니까? 이 경우 Tnew[1]은 유효하지 않은 표현식이지만 유효합니까? 올바른 표현은 Tnew[0] , Tnew[] 또는 다른 것입니까? Tnew[1], Tnew[0], Tnew[]를 사용해도 EA의 작업 결과가 바뀌지 않는 것 같다.
 
Renat :

모든 설명은 문서에 있습니다.

OrderSend 함수 , MqlTradeResult 구조 및 거래 응답 코드 목록을 살펴보십시오.

Renat, 내가 올바르게 이해했다면 반환 코드는 ENUM_TRADE_RETURN_CODES입니다. MqlTradeResult 구조의 경우 MqlTradeCheckResult 구조에도 적용
 
ias :
결론은 무엇입니까? 이 경우 Tnew[1]은 유효하지 않은 표현식이지만 유효합니까? 올바른 표현은 Tnew[0] , Tnew[] 또는 다른 것입니까? Tnew[1],Tnew[0],Tnew[]를 사용해도 전문가의 작업 결과가 변하지 않는 것 같다.

적어도 존재하지 않는 인덱스의 배열에서 데이터를 읽는 경우 결과는 같을 수 없습니다. Tnew[1]에 무엇이 있다고 생각하십니까?

계정에 확실하지 않은 내용이 작성되어 있으며 범위를 벗어날 때 전문가 가 오류를 보고 하고 이동할 수 있습니다. 이 경우 Tnew[0]에는 무엇이 있습니까?

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
 
Kos :
Renat, 내가 올바르게 이해했다면 반환 코드는 ENUM_TRADE_RETURN_CODES입니다. MqlTradeResult 구조의 경우 MqlTradeCheckResult 구조에도 적용

예, 거래 기능의 전체 공간에 대한 거래 오류 코드 데이터베이스는 하나뿐입니다.

새로운 기능에 대한 설명을 수정할 것입니다. 바로 시간이 없었습니다.

 
Interesting :

적어도 존재하지 않는 인덱스의 배열에서 데이터를 읽는 경우 결과는 같을 수 없습니다. Tnew[1]에 무엇이 있다고 생각하십니까?

계정에 확실하지 않은 내용이 작성되어 있으며 범위를 벗어날 때 전문가 가 오류를 보고 하고 이동할 수 있습니다. 이 경우 Tnew[0]에는 무엇이 있습니까?

datetime Tnew[ 1 ];Tnew[0];Tnew[];를 사용할 때 EA 작업의 결과는 변경되지 않습니다. 이는 Exp_TEMA.mq5 EA의 "Creating EA that trades on different 악기" , 기능

 //+X================================================================X+
//| IsNewBar() function                                              |
//+X================================================================X+
bool IsNewBar( int Number, string symbol, ENUM_TIMEFRAMES timeframe)
  {
//----+
   static datetime Told[];
   datetime Tnew[ 1 ];
   
   //----+ Объвление переменной для хранения размеров массивов переменных
   static int Size_ = 0 ;
   
   //----+ Изменение размеров массивов переменных
   if (Number + 1 > Size_)
    {
     uint size = Number + 1 ;
     //----
     if ( ArrayResize (Told, size) == - 1 )
      {
       string word = "" ;
       StringConcatenate (word, "IsNewBar( " , Number,
                     " ): Ошибка!!! Не удалось изменить размеры массивов переменных!!!" ); 
       Print (word); 
       //----          
       int error = GetLastError ();
       ResetLastError ();
       if (error > 4000 )
        {
         StringConcatenate (word, "IsNewBar( " , Number, " ): Код ошибки " , error);
         Print (word); 
        }  
       //----                                                                                                                                                                                                  
       Size_ = - 2 ;
       return (false);
      }
    }
   
   CopyTime (symbol, timeframe, 0 , 1 , Tnew); 
   if (Tnew[ 0 ] != Told[Number])
    {
     Told[Number] = Tnew[ 0 ];
     return (true);
    }
//----+
   return (false);
  }
//+X================================================================X+

작동하지 않습니까?

Tnew[1]에 무엇이 있다고 생각하십니까?

CopyTime 이후(기호, 타임프레임, 0, 1, Tnew); 주소 Tnew[1]에는 이전 막대의 시작 시간이 포함되어야 합니다.

 
ias :

datetime Tnew[ 1 ];Tnew[0];Tnew[];를 사용할 때 EA 작업의 결과는 변경되지 않습니다. 이는 Exp_TEMA.mq5 EA의 "Creating EA that trades on different 악기" , 기능

작동하지 않습니까?

Tnew[1]에 무엇이 있다고 생각하십니까?

CopyTime 이후(기호, 타임프레임, 0, 1, Tnew); 주소 Tnew[1]에는 이전 막대의 시작 시간이 포함되어야 합니다.

순서대로 합시다

이 두 줄은 배열을 선언합니다. 그 중 하나는 동적 - (Told) 이고 두 번째 - (Tnew) 에는 내가 이해하는 한 항목이 하나만 포함되어 있습니다.

 static datetime Told[];
datetime Tnew[ 1 ];

여기 에 동적 배열 의 차원을 변경하려는 시도가 있습니다. 배열의 항목 수는 size 와 같다고 가정합니다.

 if ( ArrayResize (Told, size) == - 1 )

이 줄은 막대 번호 0 에서 시작하여 배열 Tnew하나의 레코드 (막대 날짜)를 복사합니다. 그 후, 이 날짜는 이 Tnew[0]처럼 사용할 수 있게 됩니다(배열이 ZERO 부터 번호가 매겨지기 때문).

 CopyTime (symbol, timeframe, 0 , 1 , Tnew);

여기에서 Tnew 배열의 유일한 항목은 숫자 Number-1 에 있는 Told 배열의 셀에 있는 항목과 비교됩니다(번호는 0부터 지정됨을 기억하십시오) .

이 날짜가 일치하지 않으면 Tnew 배열의 값을 Told 배열의 셀에 씁니다.

 if (Tnew[ 0 ] != Told[Number])
{
Told[Number] = Tnew[ 0 ];
return ( true );
}
 
Kos :
설명서에서 MqlTradeCheckResult 검사 결과 구조에 대한 응답 코드(Retcode)에 대한 설명을 찾지 못했습니다. 그들은 할 것인가?


MetaTrader 5\MQL5\Include\ErrorDescription.mqh 파일에서
파일:
 
Valmars :
MetaTrader 5\MQL5\Include\ErrorDescription.mqh 파일에서
발레리, 고마워. 그러나 그것은 내가 찾던 것이 아닙니다 :)
 

질문이 있습니다. 구멍이 없는 그래픽 문제는 고려 대상인가요? https://www.mql5.com/ru/forum/100491

모든 것을 동기화하는 것은 매우 어렵습니다. 지표에서 모든 것을 고려하려고 노력했지만 이러한 구멍을 처리하는 것은 매우 어렵습니다.

2010.07.19 02:20:12 체크홀 (EURUSD,M1) 2010.07.09 21:35:00 날짜부터 260홀 기록
2010.07.19 02:20:12 홀 확인 (EURUSD,M1) GBPUSD 홀 2010.07.19 00:20:00
2010.07.19 02:20:12 홀 확인 (EURUSD,M1) USDJPY 홀 2010.07.19 00:15:00
2010.07.19 02:20:12 홀 확인 (EURUSD,M1) EURGBP 홀 2010.07.16 22:43:00
2010.07.19 02:20:12 홀 확인 (EURUSD,M1) GBPUSD 홀 2010.07.16 22:43:00
2010.07.19 02:20:12 홀 확인 (EURUSD,M1) GBPUSD 홀 2010.07.16 22:38:00
2010.07.19 02:20:12 홀 확인 (EURUSD,M1) 홀 AUD 2010.07.16 22:21:00

등.....

 //+------------------------------------------------------------------+
//|                                                 Проверка дыр.mq5 |
//|                                                    Привалов С.В. |
//|                           https://www.mql5.com/ru/users/Prival |
//+------------------------------------------------------------------+
#property copyright "Привалов С.В."
#property link      "https://www.mql5.com/ru/users/Prival"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
#property indicator_color1  Blue


int   MaxBars= 7200 ;  // точка старта
string mas_0[]={ "USDCHF" , "GBPUSD" , "EURUSD" , "USDJPY" , "USDCAD" , "AUDUSD" , "EURGBP" , "EURAUD" , "EURCHF" , "EURJPY" , "GBPJPY" , "GBPCHF" };
int count_symbol= 12 ;
double Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
   SetIndexBuffer ( 0 ,Buffer, INDICATOR_DATA );
   PlotIndexSetInteger ( 0 , PLOT_DRAW_TYPE , DRAW_HISTOGRAM );

//--- на старте сразу же пошлем асинхронные запросы на поднятие таймфреймов в память
   for ( int i= 0 ; i<count_symbol; i++) CheckOtherSymbol(mas_0[i],MaxBars);
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| 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<MaxBars) return ( 0 );    // ничего не считаем и ничего не рисуем на графике         

   int start_pos=rates_total-MaxBars- 1 ;  // точка старта

   if (close[start_pos]== 0 )   return ( 0 );  // ничего не считаем и ничего не рисуем на графике 

//--- снова пошлем асинхронные запросы на поднятие таймфреймов в память
   for ( int i= 0 ; i<count_symbol; i++)
      {
      if (!CheckOtherSymbol(mas_0[i],MaxBars)) return ( 0 );
      }

   if (prev_calculated== 0 )
     {
      Print ( "Дата начала тестирования " ,time[start_pos]);
      Print ( "Символ " , _Symbol , " приод " , _Period );
     }
   else start_pos=prev_calculated- 1 ;
   int  sum= 0 ;
//--- расчет индикатора
   for ( int i=start_pos;i<rates_total;i++)
     {
      Buffer[i]= 0 ;
      for ( int j= 0 ; j<count_symbol; j++)
         {
         if (!CheckTimeOtherSymbol(mas_0[j],time[i]))
            {
            Print ( "Дыра " ,mas_0[j], " " ,time[i]);
            sum++;
            }
         }
     }
     Print ( "Количество дыр в истории " ,sum, " от даты " ,time[start_pos]);
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Проверка символов с асинхронным возбуждением                     |
//+------------------------------------------------------------------+
//| вход                                                             |
//| symbol - символ                                                  |
//| count_Bars - необходимое количество баров                        |
//+------------------------------------------------------------------+
bool CheckOtherSymbol( string symbol, int bars)
  {
   datetime ctm[ 1 ];
   datetime checktime= TimeCurrent ()-bars* PeriodSeconds ( _Period );  // требуемое время
   bool     res=true;
// скопируем время требуемого бара
   if ( CopyTime (symbol, _Period ,checktime, 1 ,ctm)!= 1 ) res=false;
   if (!res) Print ( "Нет данных по символу " ,symbol);
//--- вернем результат
   return (res);
  }
//+------------------------------------------------------------------+
//| Проверка синхронности символов                                   |
//+------------------------------------------------------------------+
bool CheckTimeOtherSymbol( string symbol, datetime time)
  {
   datetime ctm[ 1 ];
   bool     res=false;
//--- скопируем время бара
   if ( CopyTime (symbol, _Period ,time, 1 ,ctm)== 1 )
     {
      // сравним его с требуемым
      if (ctm[ 0 ]==time) res=true;
     }
//   if(!res) Print("Нет синхронизации по символу ",symbol," time[0]=",ctm[0]," нужно ",time);
//--- вернем результат
   return (res);
  }
//+------------------------------------------------------------------+

두 번째 질문: 이 다중 통화 지표에 제가 확인하지 않은 다른 함정이 있습니까?

Всем, кто хотел видеть графики без пропущенных баров - сюда =) - MQL4 форум
  • www.mql5.com
Всем, кто хотел видеть графики без пропущенных баров - сюда =) - MQL4 форум
파일: