Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Публикуй статьи и увеличивай свой рейтинг!
Le0n
137
Le0n 2014.03.08 09:49 

MetaEditor4 Version: 4.00 Build 610 (14 Feb 2014)

Некорректная работа функции ArrayCopy

Специально для иллюстрации написан следующий советник:

//+------------------------------------------------------------------+
//|                        Проверка исполнения функции ArrayCopy.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

datetime bar;
int Range1[1];
int Range2[1,2];
bool fin=false;

int init()
  { return(0);}
int deinit()
  { return(0);}
int start()
  {
   
   
   if (fin) return(0);
   
   if (bar<iTime(NULL,0,0))
   {
    bar=iTime(NULL,0,0);
    
    Range1[0]=TimeHour(bar);
   
    Range2[0,0]=TimeHour(bar);
    Range2[0,1]=TimeDay(bar);
   
    if ((ArrayRange(Range2,0)>10 || ArrayRange(Range1,0)>10) && fin==false) Report();
    
    ArrayCopy(Range1,Range1,1,0,WHOLE_ARRAY);
    ArrayCopy(Range2,Range2,2,0,WHOLE_ARRAY);
   
   }
   
   return(0);
  }
//+------------------------------------------------------------------+
void Report ()
{
    int Handle = FileOpen("Report"+ ".csv",FILE_CSV | FILE_READ | FILE_WRITE, ";");// Открыли файл
    if(Handle == -1)  Alert("Ошибка при открытии файла ");
    else 
    {FileSeek (Handle,0,SEEK_END);
        
     FileWrite(Handle,StringConcatenate("одномерный массив TimeHour ", TimeHour(bar)));
     for (int i=ArrayRange(Range1,0)-1;i>=0;i--)FileWrite(Handle,Range1[i]);
     
     FileWrite(Handle,StringConcatenate("двумерный массив TimeHour ", TimeHour(bar)," TimeDay ", TimeDay(bar)));
     for ( i=ArrayRange(Range2,0)-1;i>=0;i--)FileWrite(Handle,Range2[i,0],Range2[i,1]);
    }
    FileClose(Handle);
    fin=true;
    return;

}


ArrayCopy( data, data, 3, 0 ); - должна копировать весь двумерный массив data[1,3]; сам в себя с увеличением ArrayRange(data,0), но этого не происходит ...

Проблема именно в исполнении "ArrayCopy", в советнике заполнение массивов данными TimeHour и TimeDay сделано лишь для наглядности, в 509 компиляторе было все логично и отлично.

Проблема сохраняется с любыми данными любого типа.



Файлы:
Ilyas
1182
Ilyas 2014.03.13 10:45  
Спасибо за сообщение, ошибка копирования массивов в себя исправлена. Ждите обновления.
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий