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

 
Medeya.ts #:

нужно подгрузить историю графика - открепите и полистайте влево. если не сработает - пишите.

Не помогло. Скажу больше, при смене тф бары которые были нарисованы стираются 
 
Как определить какие места в коде тормозят тестирование?
 
Yury Lemeshev #:
Как определить какие места в коде тормозят тестирование?

используйте профилирование

 
Pamagite #:
Не помогло. Скажу больше, при смене тф бары которые были нарисованы стираются 
а у вас в конфиге сколько выставлено "отображать баров" и "хранить в истории баров" ?
 
Bugs Mt5 (build 3291) Проблемы в инициализации статических переменных функции, когда та используется для инициализации другой статической переменной.
Пишешь return true, а код без твоего ведома инициализирует переменную как false.


Наличие проблемы зависит от типа статической переменной, используемой в функции. В основном проблема касается простых типов, включая string. Для последнего проблема может приводить к Memory Leak.
Такое впечатление, что в начале инициализации первой статической переменной выставляется некий флаг, который и не дает инициализироваться другим статическим переменным из функции.
#define PRINT(x) Print(#x, ":", string(x))

bool func(){
   static string prev_str;
   string new_str;
   StringInit(new_str, 12345, 0x22);
   prev_str = new_str;                                 // 1 leaked strings left (32768 bytes of leaked memory)

   //static bool result = typename(A) == typename(A);   
   static bool result = true;                          // result == false
   return result;
}

class A{
public:
   static bool value;
};
static bool A::value = func();                         



void OnStart()
{
   Print(A::value);    // false
}
 
Sergey Dzyublik #:
Bugs Mt5 (build 3291) Проблемы в инициализации статических переменных функции, когда та используется для инициализации другой статической переменной.
Пишешь return true, а код без твоего ведома инициализирует переменную как false.


Наличие проблемы зависит от типа статической переменной переменной, используемой в функции. В основном проблема касается простых типов, включая string. Для последнего проблема может приводить к Memory Leak.
Такое впечатление, что в начале инициализации первой статической переменной выставляется некий флаг, который и не дает инициализироваться другим статическим переменным из функции.

Интересно, что если сделать так, то возвращает true. Опасный баг.

static bool result = !::MQLInfoInteger(MQL_TESTER);
 

MT5 5.00 build 3291 Не работает Print в скрипте

//+------------------------------------------------------------------+
//|                                                         TEST.mq5 |
//|                                                    Alexey Valeev |
//|                            https://www.mql5.com/ru/users/pozitif |
//+------------------------------------------------------------------+
#property copyright "Alexey Valeev"
#property link      "https://www.mql5.com/ru/users/pozitif"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
//---
   Print("Hello MQL!");
}
//+------------------------------------------------------------------+

Вывод


 
Alexey Valeev #:

MT5 5.00 build 3291 Не работает Print в скрипте

Вывод


А вкладка какая?
 
Alexey Valeev #:

MT5 5.00 build 3291 Не работает Print в скрипте

Вывод


Вы вероятно не там ищите. Вкладка "Эксперты", смотрите там.

 

У меня может банальный вопрос, но что то встрял.

Не отображается короткое имя индикатора в МТ5. Аналогичный индикатор в МТ4 все показывает.

Вот такой OnInit:

int OnInit() {
   g_sShortName=StringFormat("ATR(%d) %s", inp_period_atr, EnumToString(inp_timeframes));
   printf("NAME: %s", g_sShortName);
   IndicatorSetString(INDICATOR_SHORTNAME, g_sShortName);
   g_nWinIndex=ChartWindowFind();                  // Определяем номер подокна индикатора
   EventSetTimer(1);
   
   SetIndexBuffer(0, buffer, INDICATOR_DATA);

   TableInit();
//---
   return(INIT_SUCCEEDED);
}

В принте имя индикатора пишет.