Hatalar, hatalar, sorular - sayfa 53

 
Kos :
Belgelerde MqlTradeCheckResult kontrol sonucu yapısı için yanıt kodlarının (Retcode) bir açıklamasını bulamadım. Yapacaklar mı?


Tüm açıklamalar belgelerde bulunmaktadır.

OrderSend işlevine , MqlTradeResult yapısına ve ticari yanıt kodları listesine bakın.

 
Renat :

Told - boyutu olmayan boş bir dizi

Tnew[1] - dizinin ötesine geçer, dizi Tnew[1] olarak tanımlanır, bu nedenle dizinin öğelerine yalnızca Tnew[0] olarak erişilebilir, çünkü dizin sıfırdan başlar.

Sonuç nedir? Bu durumda, Tnew[1] geçersiz bir ifadedir, ancak geçerli midir? Doğru ifade Tnew[0] , Tnew[] veya başka bir şey mi? EA'nın çalışmasının sonucu Tnew[1], Tnew[0], Tnew[] kullanıldığında değişmiyor gibi görünüyor
 
Renat :

Tüm açıklamalar belgelerde bulunmaktadır.

OrderSend işlevine , MqlTradeResult yapısına ve ticari yanıt kodları listesine bakın.

Renat, seni doğru anladıysam dönüş kodları ENUM_TRADE_RETURN_CODES MqlTradeResult yapısı için MqlTradeCheckResult yapısı için de geçerlidir
 
ias :
Sonuç nedir? Bu durumda, Tnew[1] geçersiz bir ifadedir, ancak geçerli midir? Doğru ifade Tnew[0] , Tnew[] veya başka bir şey mi? Uzmanın çalışmasının sonucu Tnew[1],Tnew[0],Tnew[] kullanıldığında değişmiyor gibi görünüyor

Sonuç aynı olamaz, en azından diziden veri mevcut olmayan bir dizinde okunuyorsa. Sizce Tnew[1]'de ne yatıyor?

Hesapta emin değil yazıyor, aralıktan çıkarken uzman bir hata bildirebilir ve devam edebilir. sadece bu durumda Tnew[0]'da ne olacak?

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
 
Kos :
Renat, seni doğru anladıysam dönüş kodları ENUM_TRADE_RETURN_CODES MqlTradeResult yapısı için MqlTradeCheckResult yapısı için de geçerlidir

Evet, tüm ticaret işlevleri alanı için yalnızca bir ticaret hata kodu veritabanı vardır.

Yeni işlevlerin açıklamalarını düzelteceğiz - hemen zamanımız olmadı.

 
Interesting :

Sonuç aynı olamaz, en azından diziden veri mevcut olmayan bir dizinde okunuyorsa. Sizce Tnew[1]'de ne yatıyor?

Hesapta emin değil yazıyor, aralıktan çıkarken uzman bir hata bildirebilir ve devam edebilir. sadece bu durumda Tnew[0]'da ne olacak?

EA işleminin sonucu, datetime Tnew[ 1 ];Tnew[0];Tnew[]; kullanıldığında değişmez. enstrümanlar" , işlev

 //+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+

çalışmıyor?

Sizce Tnew[1]'de ne yatıyor?

CopyTime'dan sonra(sembol, zaman çerçevesi, 0, 1, Tnew); adres Tnew[1] önceki çubuğun başlangıç zamanını içermelidir.

 
ias :

EA işleminin sonucu, datetime Tnew[ 1 ];Tnew[0];Tnew[]; kullanıldığında değişmez. enstrümanlar" , işlev

çalışmıyor?

Sizce Tnew[1]'de ne yatıyor?

CopyTime'dan sonra(sembol, zaman çerçevesi, 0, 1, Tnew); adres Tnew[1] önceki çubuğun başlangıç zamanını içermelidir.

sırayla alalım

Bu iki satır, biri dinamik - (Told) olan ve ikincisi - (Tnew) olan dizileri bildirir, anladığım kadarıyla yalnızca bir girdi içerir.

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

Burada dinamik bir dizinin boyutunu değiştirme girişimi var. Dizideki girdilerin sayısının boyuta eşit olduğu varsayılır.

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

Bu satır, 0 numaralı çubuktan başlayarak bir kaydı (çubuk tarihi) Tnew dizisine kopyalar. Bundan sonra, bu tarih şu şekilde kullanılabilir hale gelir Tnew[0] (çünkü dizi ZERO 'dan numaralandırılmıştır).

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

Burada, Tnew dizisinin tek girişi, Told dizisinin hücresindeki Number-1 sayısı altındaki girişle karşılaştırılır (numaralandırmanın 0'dan olduğunu unutmayın) .

Bu tarihler eşleşmezse Told dizisinin hücresine Tnew dizisinin değerini yazarız .

 if (Tnew[ 0 ] != Told[Number])
{
Told[Number] = Tnew[ 0 ];
return ( true );
}
 
Kos :
Belgelerde MqlTradeCheckResult kontrol sonucu yapısı için yanıt kodlarının (Retcode) bir açıklamasını bulamadım. Yapacaklar mı?


MetaTrader 5\MQL5\Include\ErrorDescription.mqh dosyasında
Dosyalar:
 
Valmars :
MetaTrader 5\MQL5\Include\ErrorDescription.mqh dosyasında
Valery, teşekkür ederim. Ama aradığım bu değil :)
 

Bir sorum var. Deliksiz grafik sorunu değerlendiriliyor mu? https://www.mql5.com/ru/forum/100491

Her şeyi senkronize etmek çok zor, göstergede her şeyi hesaba katmaya çalıştım ama bu deliklerle başa çıkmak çok zor

2010.07.19 02:20:12 Kontrol delikleri (EURUSD,M1) Geçmişteki delik sayısı 2010.07.09 21:35:00 tarihinden itibaren 260
2010.07.19 02:20:12 Delikleri kontrol etme (EURUSD,M1) GBPUSD deliği 2010.07.19 00:20:00
2010.07.19 02:20:12 Delikleri kontrol etme (EURUSD,M1) USDJPY deliği 2010.07.19 00:15:00
2010.07.19 02:20:12 Deliklerin kontrol edilmesi (EURUSD,M1) EURGBP deliği 2010.07.16 22:43:00
2010.07.19 02:20:12 Deliklerin kontrol edilmesi (EURUSD,M1) GBPUSD deliği 2010.07.16 22:43:00
2010.07.19 02:20:12 Deliklerin kontrol edilmesi (EURUSD,M1) GBPUSD deliği 2010.07.16 22:38:00
2010.07.19 02:20:12 Deliklerin kontrol edilmesi (EURUSD,M1) Delik AUDUSD 2010.07.16 22:21:00

vb.....

 //+------------------------------------------------------------------+
//|                                                 Проверка дыр.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);
  }
//+------------------------------------------------------------------+

ve ikinci soru: Bu çoklu para birimi göstergesinde kontrol etmediğim başka tuzaklar var mı?

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