Ошибки, баги, вопросы - страница 2929

 
fxsaber:

Подобные сообщения не могут помочь решить проблему, даже если она есть.

У меня нет столько времени, чтобы составить тестовый пример, чтобы поймать ошибку. Как это делаете вы.

Но еще добавлю, что когда оптимизация запускается повторно, то она начинается с самого начала, но прежние результаты оптимизации не очищаются.

Это наверно придумали для того, чтобы продолжить оптимизацию после ее прерывания ?  Но тогда надо было дать возможность удалить прежние результаты, а не делать повторную компиляцию. 

 
Petros Shatakhtsyan:

У меня нет столько времени, чтобы составить тестовый пример, чтобы поймать ошибку. Как это делаете вы.

К сожалению, эта проблема у всех.

Но еще добавлю, что когда оптимизация запускается повторно, то она начинается с самого начала, но прежние результаты оптимизации не очищаются.

Это правильное поведение.

Это наверно придумали для того, чтобы продолжить оптимизацию после ее прерывания ?  Но тогда надо было дать возможность удалить прежние результаты, а не делать повторную компиляцию. 

Вы можете самостоятельно удалить соответствующий opt-файл.


ЗЫ Вроде, в свойствах MQL-проектов есть опция, запрещающая использовать оптимизационные кеши.

 
Сергей Таболин:

Первое - ищите проблему в записи/чтении файлов либо БД. 

Возможно это зависит от тиковых данных.

Для EURUSD оптимизация работает нормально. Тот пример был для BTCUSD.

Если во время оптимизации в клоуде и тестирования, тиковые данные берутся из разных источников, или не будут совпадать, то и результаты оптимизации и одиночного теста будут разные.

Но мы же не сможем регулировать этот процесс.

 

Перевод индикатора с мт4 на мт5

Проблема в размерах толщины DRAW_HISTOGRAM

При установке "1" или "2" размер меняется, а вот "3" или "4" = размер всё-равно остаётся "2"


Почему в мт4 всё работает, а вот в мт5 такая проблема?

#property indicator_separate_window
#property indicator_plots   4
#property indicator_buffers 4
#property indicator_color1 clrDodgerBlue
#property indicator_color2 clrDodgerBlue
#property indicator_color3 clrLimeGreen
#property indicator_color4 clrFireBrick
#property indicator_width1 3
#property indicator_width2 3
#property indicator_width3 3
#property indicator_width4 3

Результат в мт4


Результат в мт5, отображает толщину всего "2", хотя в настройках стоит "3"



Также не помогает установка свойства в OnInit()

PlotIndexSetInteger(0, PLOT_LINE_WIDTH, 3);

 

Критическая ошибка при отладке:

struct sA
  {
   int               i;
   string            s;
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class cA
  {
public:
   sA                my_array[];
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   cA *ca;
   ca=new cA();
   ArrayResize(ca.my_array,1);
   ZeroMemory(ca.my_array);
   ArrayPrint(ca.my_array);
  }

Результат:

2020.12.27 17:04:26.966 1 (EURUSD,M1)   Access violation at 0x000001FE5AF10199 read to 0xFFFFFFFFFFFFFFFF in 'D:\Alpari MT5\MQL5\Scripts\Test\1.ex5'
2020.12.27 17:04:26.967 1 (EURUSD,M1)      crash -->  000001FE5AF10199 8B4318            mov        eax, [rbx+0x18]
2020.12.27 17:04:26.967 1 (EURUSD,M1)                 000001FE5AF1019C 4089442420        mov        [rsp+0x20], eax
2020.12.27 17:04:26.967 1 (EURUSD,M1)                 000001FE5AF101A1 41B910000000      mov        r9d, 0x10
2020.12.27 17:04:26.967 1 (EURUSD,M1)                 000001FE5AF101A7 49B8B807F15AFE01  mov        r8, 0x1fe5af107b8
2020.12.27 17:04:26.967 1 (EURUSD,M1)                                  0000
2020.12.27 17:04:26.967 1 (EURUSD,M1)                 000001FE5AF101B1 488D17            lea        rdx, [rdi]
2020.12.27 17:04:26.967 1 (EURUSD,M1)                 000001FE5AF101B4 48B998D45F5FFE01  mov        rcx, 0x1fe5f5fd498
2020.12.27 17:04:26.967 1 (EURUSD,M1)                                  0000
2020.12.27 17:04:26.967 1 (EURUSD,M1)                 000001FE5AF101BE 49FF96A8120000    call       qword near [r14+0x12a8]  ; #11378 (terminal64.exe)
2020.12.27 17:04:26.967 1 (EURUSD,M1)   
2020.12.27 17:04:26.967 1 (EURUSD,M1)   00: 0x000001FE5AF10199
2020.12.27 17:04:26.967 1 (EURUSD,M1)   01: 0x000001FE633F0010
2020.12.27 17:04:26.967 1 (EURUSD,M1)   
Последняя бета-версия на текущий момент
Документация по MQL5: Программы MQL5 / Ошибки выполнения
Документация по MQL5: Программы MQL5 / Ошибки выполнения
  • www.mql5.com
Ошибки выполнения - Программы MQL5 - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Кто-нибудь придумал способ получить по хэндлу индикатора свойство отображения в главном окне или подокне? Речь про произвольные сторонние индикаторы, которые создаются с помощью IndicatorCreate и потом по запросу пользователя могли бы добавляться на чарт с помощью ChartIndicatorAdd.
 
Stanislav Korotky:
Кто-нибудь придумал способ получить по хэндлу индикатора свойство отображения в главном окне или подокне? Речь про произвольные сторонние индикаторы, которые создаются с помощью IndicatorCreate и потом по запросу пользователя могли бы добавляться на чарт с помощью ChartIndicatorAdd.

Наверное, можно индикатор запихать в OBJ_CHART и посмотреть, где он там расположился.

 
Stanislav Korotky:
Кто-нибудь придумал способ получить по хэндлу индикатора свойство отображения в главном окне или подокне? Речь про произвольные сторонние индикаторы, которые создаются с помощью IndicatorCreate и потом по запросу пользователя могли бы добавляться на чарт с помощью ChartIndicatorAdd.

что-то делал подобное. 
Вот у себя нашел. Не помню, работает или нет. Проверьте пожалуйста.

bool FindIndicatorByHandle(long handle, string &symbol, ENUM_TIMEFRAMES &timeframe, long &ChartId, int &sub_win, string &Name) {
   long chart_id =ChartFirst();
   while (chart_id!=-1) {
      int total_sub = (int)ChartGetInteger(chart_id,CHART_WINDOWS_TOTAL);
      int total_ind; 
      for(int i=0; i<total_sub; i++) {
         total_ind = ChartIndicatorsTotal(chart_id,i);
         for (int j=0; j<total_ind; j++) {
            string name = ChartIndicatorName(chart_id,i,j);
            if (ChartIndicatorGet(chart_id,i,name)== handle) {
               ChartId=chart_id;
               symbol= ChartSymbol(chart_id);
               timeframe=ChartPeriod(chart_id);
               sub_win=i;
               Name=name;
               return true;
            }
         }
      }
      chart_id=ChartNext(chart_id);
   }
   return false;
}
Судя по коду ищет во всех открытых чартах индикатор по хэндлу. Возвращает символ, таймфрейм, id чарта, подокно и имя индикатора.
 
fxsaber:

Наверное, можно индикатор запихать в OBJ_CHART и посмотреть, где он там расположился.

Попробую, пока пришлось сделать опцию указания пользователем.

 
Nikolai Semko:

что-то делал подобное. 
Вот у себя нашел. Не помню, работает или нет. Проверьте пожалуйста.

Судя по коду ищет во всех открытых чартах индикатор по хэндлу. Возвращает символ, таймфрейм, id чарта, подокно и имя индикатора.

Это не подходит к описанному вопросу: индикаторы, созданные IndicatorCreate не размещены ни в каком окне - они "сидят" внутри, и задача как раз такой индикатор по его хэндлу разместить в окно. Сейчас MQL5 позволяет с помощью функции ChartIndicatorAdd добавить произвольный хэндл как в главное окно, так и в подокно, невзирая на "проперти" самого индикатора (без всяких ошибок!), и результат выглядит очень странно, когда добавление делается не по назначению.