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

 
Vladislav Boyko #:

Скажите пожалуйста, для MT4 такой код ведь по прежнему работает? По прежнему идет дозапись в конец?

Ручаться не могу, релогин к торговому серверу может приводить к подобному перетряхиванию.

 

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

Ошибки, баги, вопросы

fxsaber, 2023.06.05 04:35

Лобовое решение.

void DeleteOrders()
{
  static int PrevTotal = HistorySelect(0, INT_MAX) ? HistoryOrdersTotal() : 0;
  
  if (HistorySelect(0, INT_MAX))
  {
    const int Total = HistoryOrdersTotal();
    
    if (PrevTotal < Total)
    {
      ulong Array[][2];
      
      ArrayResize(Array, Total);
      
      for (int i = 0; i < Total; i++)
      {
        const ulong Ticket = HistoryOrderGetTicket(i);

        Array[i][0] = HistoryOrderGetInteger(Ticket, ORDER_TIME_DONE_MSC);
        Array[i][1] = Ticket;
      }
            
      ArraySort(Array);
      
      while (PrevTotal < Total)
      {
        const ulong Ticket = Array[PrevTotal++][1];
        
        if (HistoryOrderGetInteger(Ticket, ORDER_TYPE) > ORDER_TYPE_SELL)
          Alert(Ticket);
      }
    }    
  }
}

Выделил ресурсоемкий кусок кода.


Поэтому простейшая задача в MQL5 решается безумно дорого.

Так было не всегда.

Стесняюсь спросить, а зачем вы берёте ВСЮ историю в выделенной красным строке, если вам нужен только последний ордер? Почему не выбрать за последнюю секунду/минуту…


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

Или время ордера меняется?

 
Alexey Viktorov #:

зачем вы берёте ВСЮ историю в выделенной красным строке, если вам нужен только последний ордер? Почему не выбрать за последнюю секунду/минуту…

Архитектурно HistorySelect с другими параметрами работает очень дорого, т.к. кеши прекращают работать.

 

Ошибка при выполнении (ошибся с предыдущим примером - исправляюсь):

class A {
public:
    virtual void f() { Print(1); }
};
class B : public A {
    virtual void f() { Print(2); }
};
void OnStart()
{
    B b;
    ((A)b).f();
}

Результат:   2

Ожидалось: 1

 
fxsaber #:

Архитектурно HistorySelect с другими параметрами работает очень дорого, т.к. кеши прекращают работать.

Не верю, что будет дольше чем перебрать цикл 1000+++ ордеров…

 
А здесь отсутствует необходимый public:
#define PUBLIC
class A {
public:
    void f() {}
};
class B : PUBLIC A {} b;
void OnStart()
{
    B b;
    ((A)b).f(); //нормально ???
}
 
fxsaber #:

Архитектурно HistorySelect с другими параметрами работает очень дорого, т.к. кеши прекращают работать.

Наличие кэшированных данных гарантирует их актуальность на каждый момент времени?

 
fxsaber #:

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

Проверил в последнем билде 3802 в надежде, что это исправили, но увы ...

 
Artyom Trishkin #:

Наличие кэшированных данных гарантирует их актуальность на каждый момент времени?

По теме.

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

MT5 и скорость в боевом исполнении

Renat Fatkhullin, 2020.08.28 00:38

И эти таблицы могут в любой момент измениться. Как и отдельные записи в них.

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

Как я писал выше, мы применим методы интеллектуального кеширования, что снизит до нуля расходых на Select функции. Если, конечно, не будете специально рандомизировать пределы выборок. Последнюю дату можно менять и она не будет инвалидировать кеш, если она всегда будет в будущем/послднем времени. Последние транзакции будут экономно добавляться в кеш.

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

MT5 и скорость в боевом исполнении

Renat Fatkhullin, 2020.08.27 22:58

Поэтому и такие расходы на копирование. Тем более, если специально заниматься одновременным принудительным копированием этой истории в кеш из множества потоков.

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

То есть, если не будете специально рандомизировать пределы выборок, то кеш будет показывать попадания, близкие к 100%.

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

MT5 и скорость в боевом исполнении

Renat Fatkhullin, 2020.09.01 14:18

нужно четко понимать, что подход "вызову HistorySelect на всю историю, а потом сразу еще сделаю выборку HistorySelectByPosition" будет убивать ранее созданные кеши истории. Это выстрел себе в ногу.

Как сейчас - не знаю. Разработчики, вроде, ни разу не комментировали.

 
Добрый день!

Столкнулся с такой проблемой. 

Решил установить себе один торговый ассистент на мт5 на macOS. Но так как один ассистент уже был установлен, новый мне установить не удавалось и он не появлялся в общем. 

И тут я решил удалить все файлы с папки "каталог данных" вместо того что бы сделать это разумно. (файлы что удалил прикрепил как пример с мт4)

Теперь после того как я скачиваю мт5 и устанавливаю его и перемещаю иконку. Сразу же при нажатии на иконку мт5 выскакивает окошко на 1 секунду и сразу тухнет и так все время комп перезагружал, удалял и скачивал повторно. (окошко что выскакивает закрепил).

С корзины тоже все файлы удалил) пробовал восстанавливать на рабочий стол в папку но не помогло)


В общем не знаю что делать остается наверное либо бек спать мак либо пользоваться только мт4))

Буду очень признателен за ответ и за помощь, кто знает выход из ситуации.

Причина обращения: