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

 
fxsaber:

Да, на демо заходит без проблем.


На реал - нет.

Там было два сервера:

Я демо создавал на первом.

Может реал на втором?

 
Artyom Trishkin:

Там было два сервера:

Я демо создавал на первом.

Аналогично.

Может реал на втором?

На втором другой торговый сервер.

 

Ребята помогите пожалуйста!

Не давно начал программировать, у меня появилось такие ошибки, подскажите это из-за чего...

1. Я использовал MarketInfo(Symbol(),MODE_TICKVALUE), для пары EURUSD в тестере даёт число 0,01 а в терминале 1, это почему?

2. iClose,iOpen,iHigh,iLow иногда выдаёт 0, при shift =1, как исправить?


Спасибо

 

По прежнему не дает покоя тема скорости работы ArrayResize()+reserve.
На этот раз вопрос касается массивов примитивных типов данных.

#define K 1000
#define M (1000 * K)

#define   SpeedTest(test_count,msg,EX_pref, EX_test, EX_post) {         \
               uint result = 0; ulong count=test_count;                 \
               for(ulong ii=0;ii<count&&!_StopFlag;ii++){               \ 
                   EX_pref                                              \
                   uint start=GetTickCount();                           \
                   EX_test                                              \
                   result += GetTickCount() - start;                    \ 
                   EX_post                                              \
               }                                                        \
               printf("%-60s: loops=%i ms=%u",msg,count,result);}
                                              
class A{
public:
   int data;
};


template<typename T>
void test1(const int test_count, const int array_size){
   T class_array[];
   T tmp[];
   
   SpeedTest(
      test_count, StringFormat("Test %s ArrayResize all", typename(T)),
      {}
      ,
      {
         ArrayResize(class_array, array_size);
         for(int i = 1; i <= array_size; i++){
            ArrayResize(class_array, array_size, i);
            class_array[i-1] = NULL;
         }
      },
      {            
         ArraySwap(tmp, class_array);
         ArrayFree(tmp);
      }
   )
};

template<typename T>
void test2(const int test_count, const int array_size){
   T class_array[];
   T tmp[];
   
   SpeedTest(
      test_count, StringFormat("Test %s ArrayResize one by one with reserved memory", typename(T)),
      {},
      {
         ArrayResize(class_array, array_size);         
         for(int i = 1; i <= array_size; i++){
            ArrayResize(class_array, i, i);
            class_array[i-1] = NULL;
         }
      },   
      {            
         ArraySwap(tmp, class_array);
         ArrayFree(tmp);
      }
   )
};

 


void OnStart()
{
  const int test_count = 1;
  const int array_size = 20*K*K;  
  
   printf("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
   test1<int>(test_count, array_size);              // Avg time: release( 120) / debug( 155)
   test2<int>(test_count, array_size);              // Avg time: release( 205) / debug( 235)
   test1<int>(test_count, array_size);
   test2<int>(test_count, array_size);
   test1<int>(test_count, array_size);
   test2<int>(test_count, array_size);
   test1<int>(test_count, array_size);
   test2<int>(test_count, array_size);
   test1<int>(test_count, array_size);
   test2<int>(test_count, array_size);
   
   printf("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
   test1<double>(test_count, array_size);           // Avg time: release( 155) / debug( 190)
   test2<double>(test_count, array_size);           // Avg time: release( 250) / debug( 260)
   test1<double>(test_count, array_size);
   test2<double>(test_count, array_size);
   test1<double>(test_count, array_size);
   test2<double>(test_count, array_size);
   test1<double>(test_count, array_size);
   test2<double>(test_count, array_size);
   test1<double>(test_count, array_size);
   test2<double>(test_count, array_size);
   
   printf("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
   test1<A*>(test_count, array_size);              // Avg time: release( 190) / debug( 200)
   test2<A*>(test_count, array_size);              // Avg time: release( 330) / debug( 340)
   test1<A*>(test_count, array_size);
   test2<A*>(test_count, array_size);
   test1<A*>(test_count, array_size);
   test2<A*>(test_count, array_size);
   test1<A*>(test_count, array_size);
   test2<A*>(test_count, array_size);
   test1<A*>(test_count, array_size);
   test2<A*>(test_count, array_size);
}

По сравнению с прошлой версией, код был немного улучшен:
- для обоих тестов ArrayResize гарантированно вызывается одинаковое число раз, ранее оптимизатор вносил свой вклад...
- из подсчета времени выполнения исключено время на освобождение массивов - ArrayFree;


Для примитивных типов данных ArrayResize()+reserve выполняется более чем 3 раз медленнее чем обычный ArrayResize() (205 ms vs 65 ms). 
Это очень много, так для Generic\ArrayList.mqh на 20М вызовах CArrayList::Add скорость работы без резервирования памяти и с резервированием отличаются в 1.85 раза  (170 ms vs 95 ms).
Что-то тут явно то.

Можно ли как-то улучшить скорость работы для примитивных типов функциональности ArrayResize()+reserve?
На чем там могут быть такие большие потери?

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

IsDynamic == true
IsIndexBuffer == false
IsSetAsSerrias == false
new_size > size
new_size < capacity
IsFundamental == true (или конструктор и деструктор == 0)

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

 
fxsaber:

Да, на демо заходит без проблем.

На реал - нет.

2020.03.26 08:42:41.418 'xxxxxxx': no connection to Swissquote-Server

Добрый день,

1. На терминале (исследовательском) где не проходит подключение к реальному аккаунту в списке счетов этот аккаунт присутствует?

То есть отображается ли этот xxxxxxx аккаунт в навигаторе:


2. Если аккаунт xxxxxxx есть, то отображается ли он с именем YYYYYY после двоеточия (а не только в виде числа)?

3. Если аккаунт xxxxxxx есть, то если его удалить (в навигаторе через команду меню Delete) и по новой подключиться, то подключение проходит?


Спасибо

 
Anton:

1. На терминале (исследовательском) где не проходит подключение к реальному аккаунту в списке счетов этот аккаунт присутствует?

То есть отображается ли этот xxxxxxx аккаунт в навигаторе:

Отображается xxxx.

2. Если аккаунт xxxxxxx есть, то отображается ли он с именем YYYYYY после двоеточия (а не только в виде числа)?

Нет YYYY и нет двоеточия.

3. Если аккаунт xxxxxxx есть, то если его удалить (в навигаторе через команду меню Delete) и по новой подключиться, то подключение проходит?

Получилось!


Похоже, когда первый раз подключался, просто ввел название сервера. В навигаторе появилась эта запись, но данных торгового сервера не было и туда шла пустышка. И даже после принудительного получения данных через поиск для этого счета все равно подставлялась пустышка.


Спасибо!


ЗЫ В тему.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Новая версия платформы MetaTrader 5 build 2280

fxsaber, 2020.02.19 11:32

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


При логине на MetaQuotes-Demo укажите адрес сервера MetaQuotes-Demo2. Увидите, что произойдет в Навигаторе. Просьба, к существующим счетам применять такое правило только после удачного соединения.

Строка для поиска: Uluchshenie 005.
 
не нашел поиском информации

тестер стратегий в режиме оптимизации "Медленная (полный перебор параметров" - при каком общем значении  шагов оптимизации переключается в генетическую  оптимизацию?

ЗЫ: был бы благодарен если есть методика как сделать полный перебор чтобы генетическая оптимизация не включилась
 
Периодически самопроизвольно закрывается терминал МТ4, в логе терминала ничего об этом нет, в событиях винды тоже нет. Как можно определить причину таких вылетов?
 
Igor Makanu:
ЗЫ: был бы благодарен если есть методика как сделать полный перебор чтобы генетическая оптимизация не включилась

Пакетная Оптимизация.

 
Дефект в работе отладчика ME(build 2370) - не работает StepInto (F11) и установленные breakpoints.
Проблема в том, что если для вызова функции хоть раз применить действие StepOver (F10) то в дальнейшем эту функцию уже ни как не будет возможности отладить.

void Increment(int &n){
   ++n;
};

void test(){
   int n = 0;
   for(int i = 0; i < 100; ++i){
      DebugBreak();
      Increment(n);
   }  
}

void OnStart(){
   test();
}

Шаги по воспроизведению:
1) Запустить код в дебаг режиме;
2) После срабатывания точки останова выполнить дважды StepOver (F10);

Все - теперь ни как не "попасть" во внутрь функции Increment, все вручную установленные breakpoints не срабатывают, а вместо операции StepInto (F11) в действительности выполняется StepOver (F10).