Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 730

 
Artyom Trishkin:
bars[]
Если можно, покажите кодом.
 
Vitaly Muzichenko:

Обозвал Bars, компилятор обругал на чём свет стоит. Вы проверяли эту конструкцию, или просто предположили что должно работать, или Я делаю что-то не так?

Да, моя ошибка. Назовите bars. В общем идея в том, что бы давать выразительные имена переменным, тогда не надо будет создавать дополнительные переменные, существование которых не всегда бывает оправданным.
 
Vasiliy Sokolov:
Да, моя ошибка. Назовите bars. В общем идея в том, что бы давать выразительные имена переменным, тогда не надо будет создавать дополнительные переменные, существование которых не всегда бывает оправданным.

Называл не для того, чтоб что-то выразить, а для того, чтоб сократить код при работе с ними:

if(open1<close1 && close2>close3 && close1>close2 &&

Ну и дальше в том-же духе, в противном случае - длина строк увеличивается

Спасибо всем за разъяснения! 

 
Vitaly Muzichenko:

Называл не для того, чтоб что-то выразить, а для того, чтоб сократить код при работе с ними:

if(open1<close1 && close2>close3 && close1>close2 &&

Ну и дальше в том-же духе, в противном случае - длина строк увеличивается

Спасибо всем за разъяснения! 

Если хотите сократить код до минимума, делайте обращение непосредственно к массиву данных

//+------------------------------------------------------------------+
//|                                                       test09.mq5 |
//|                                                   Sergey Gritsay |
//|                         https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link      "https://www.mql5.com/ru/users/sergey1294"
#property version   "1.00"

MqlRates bars[]; // массив для хранения данных цен OHLC
int start_bar=0; // с какого бара копируем
int count_bar=4; // сколько баров копируем
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ArraySetAsSeries(bars, true);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(CopyRates(Symbol(),PERIOD_CURRENT, start_bar, count_bar, bars)<count_bar) return;
  
   if(bars[1].open<bars[1].close && bars[2].close>bars[3].close && bars[1].close>bars[2].close)
   {
  
   }
  }
//+------------------------------------------------------------------+

 

...
 

Добрый день!

Где и как правильно удалять выставленные ордера и открытые позиции при выгрузке (удалении) эксперта? Если несложно, поделитесь примером пожалуйста.

Спасибо. 

 

У одного из советников какая-то странная ерунда. Тестируется советник нормально, при нажатии на "Запустить одиночное тестирование" прогоняется только один единственный, первый раз. Далее при нажатии на одиночное тестирование или при нажатии на любую строчку в Оптимизации, в Журнале показывается:

2017.02.08 13:31:05.165    Tester    cannot get inputs for pass 4234087422336

2017.02.08 13:31:34.829    Tester    cannot get inputs for pass 4076312468706

2017.02.08 13:31:47.973    Tester    cannot get inputs for pass 1004506640527

Остальные советники ведут себя нормально. Что бы это могло быть?

 

Господа, записываю огромную матрицу 10000*10000

      if(count==0)
        {
         //--- запишем файл
         ResetLastError();
         int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
         //---
         if(handle!=INVALID_HANDLE)
           {
            for(int z=ARRAY_SIZE_Y; z>0; z--) // Перебор по барам, колонка Y
              {
               for(int q=0; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X
                 {
                  arra[q]=sm.d[q].m[nBar-z];                // M(I) SMA              
                 }
         //--- запишем данные массива в конец файла FileTell IsFileLineEnded
               FileSeek(handle,0,SEEK_END);
               FileWriteArray(handle,arra);
              }
            FileClose(handle);
           }
         else
            Print("Failed to open the file, error ",GetLastError()," handle ",handle);
        //---
         count=1;
        }

 Как считаете эффективен по скорости этот алгоритм?

Потому что при матрице 1000*1000 скорость несколько секунд, при увеличении до 10000*10000 система встает   

 
Top2n:

Господа, записываю огромную матрицу 10000*10000

      if(count==0)
        {
         //--- запишем файл
         ResetLastError();
         int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
         //---
         if(handle!=INVALID_HANDLE)
           {
            for(int z=ARRAY_SIZE_Y; z>0; z--) // Перебор по барам, колонка Y
              {
               for(int q=0; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X
                 {
                  arra[q]=sm.d[q].m[nBar-z];                // M(I) SMA              
                 }
         //--- запишем данные массива в конец файла FileTell IsFileLineEnded
               FileSeek(handle,0,SEEK_END);
               FileWriteArray(handle,arra);
              }
            FileClose(handle);
           }
         else
            Print("Failed to open the file, error ",GetLastError()," handle ",handle);
        //---
         count=1;
        }

 Как считаете эффективен по скорости этот алгоритм?

Потому что при матрице 1000*1000 скорость несколько секунд, при увеличении до 10000*10000 система встает   

Это как можно получить такую матрицу если допускаются не более чем четырёхмерные массивы?
Ничего не путаешь?
Документация по MQL5: Операции с массивами
Документация по MQL5: Операции с массивами
  • www.mql5.com
Операции с массивами - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov:
Это как можно получить такую матрицу если допускаются не более чем четырёхмерные массивы?
Ничего не путаешь?

А 10000 х 10000 разве не двумерный?

double arr[10000][10000];

и всё такое...

 
Alexey Viktorov:
Это как можно получить такую матрицу если допускаются не более чем четырёхмерные массивы?
Ничего не путаешь?
Ну да это двумерный же, как то не так излагаюсь, видимо не матрица, а массив. Матрица, что ли подразумевает многомерность?
Причина обращения: