Новая версия платформы MetaTrader 5 build 2875: Улучшения и исправления - страница 2

 
b2875. На Win10 CopyTicks не качает тики, выдавая 4403. На WinServer2019 все отлично.
 
Alain Verleyen:
Это редко, потому что в настоящее время это невозможно ;-)
Vladimir Karputov:

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

С использованием Canvas это возможно.
https://www.mql5.com/ru/code/25414
Причем, при желании данные индикаторных линий можно дублировать в буферах, чтобы их потом использовать для торговой системы или другого индикатора.

Система линейных алгебраических уравнений на каждом баре
Система линейных алгебраических уравнений на каждом баре
  • www.mql5.com
Индикатор на два окна на примере решения системы линейных алгебраических уравнений любой размерности
 

Две давних "беды"

1. При переключении таймфреймов иногда довольно долго экран висит в состоянии "Ожидание обновления". Это бывает даже когда этот же инструмент уже открыт в другом окне на этом же таймфрейме! Что оно там "обновляет"? В МТ4 никогда такого не было и нет. Хорошо бы поправить, а то иногда ожидание затягивается до нескольких минут.

2. Некоторые индикаторы при старте рисуют не то, что надо. Лечится переключением таймфреймов, но один раз даже так не вылечилось - на индикаторе СДЛ пришлось поменять период (потом вернуть нужный). На МАКДе такого не бывало, зато он глючит чаще.

Прикладываю два индикатора с такой проблемой. Оба двухцветные - корень видимо в этом.

ИМХО любой индикатор (даже с не слишком корректным кодом) должен работать стабильно/одинаково. Правильно или нет - это вопрос отдельный, но должна быть стабильность.

Файлы:
 

Наблюдается проблема с функцией ShortArrayToString().

При попытке сохранить обученный Random Forest из пакета Alglib, в функции GetSelectionString() модуля bitconvert.mqh, массив res[] размером 1210402833 байта преобразуется в строку функцией ShortArrayToString(). Преобразование заканчивается ошибкой: "out of memory in 'bitconvert.mqh' (375,11)".

Вероятнее всего проблема с размером строки.

Вопрос разработчикам. Какой максимальный размер может иметь строка?


//+------------------------------------------------------------------+
//| Get string from char array                                       |
//+------------------------------------------------------------------+
string GetSelectionString(char &buf[],int startIndex,int lenght)
  {
//--- create array
   ushort res[];
   int    size=ArraySize(buf);
   ArrayResizeAL(res,size);
//--- converting
   for(int i=0;i<size;i++)
      res[i]=(ushort)buf[i];
//--- return result
   return(ShortArrayToString(res,startIndex,lenght));
  }
 
Vladimir Mikhailov:

Наблюдается проблема с функцией ShortArrayToString().

При попытке сохранить обученный Random Forest из пакета Alglib, в функции GetSelectionString() модуля bitconvert.mqh, массив res[] размером 1210402833 байта преобразуется в строку функцией ShortArrayToString(). Преобразование заканчивается ошибкой: "out of memory in 'bitconvert.mqh' (375,11)".

Вероятнее всего проблема с размером строки.

Вопрос разработчикам. Какой максимальный размер может иметь строка?


Я не разработчик, но предполагая длину строки 64-битной со знаком и 2-байтовые символы, предположу 1G символов.

 
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//--- Check for the first launch
   if(prev_calculated>0) // If not the first launch
     {

     }
   else                                        // If the first launch
     {

     }
//---
   return( rates_total );
  }

Это правильно что при закрытом рынке,  сначала срабатывает else, потом как будто есть тик?

 

Выходной день, ФОРТС, торги закрыты, тики не приходят, графики стоят.

По диспетчеру задач, графический интерфейс потребляет 8-12% процессора. Чем он занят? (работает под Wine)

 
#include <Trade\Trade.mqh>
CTrade  Trade;

//+------------------------------------------------------------------
int OnInit()
{
        return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------
void OnDeinit( const int reason )
{
}

//+------------------------------------------------------------------
void OnTick()
{
        double ask = SymbolInfoDouble( _Symbol, SYMBOL_ASK );
        
        double price    = ask - 1000 * _Point;
        double tp       = ask + 1000 * _Point;
        
        Trade.OrderOpen( _Symbol, ORDER_TYPE_BUY_LIMIT, 0.01, 0.0, price, 0.0, 0.0 );
        
        ulong ticket = Trade.ResultOrder();
        
        if( ticket > 0 )
        {
                if( !OrderSelect( ticket )) return;
                
                double price_open = OrderGetDouble( ORDER_PRICE_OPEN );
                
                Trade.OrderModify( ticket, price_open, 0.0, tp, 0, 0 );
                
                if( Trade.ResultRetcode() != 10009 )
                        Trade.OrderDelete( ticket );
        }
}

С уровнями стоп и фриз по-умолчанию (0) все отлично.

Меняю в тестере значение фриз на 1

2021.04.05 12:36:12.537 Core 01 2021.04.02 00:00:00   buy limit 0.01 EURUSD at 1.16760 (1.17744 / 1.17760 / 1.17744)
2021.04.05 12:36:12.537 Core 01 2021.04.02 00:00:00   CTrade::OrderSend: buy limit 0.01 EURUSD at 1.16760 [done]
2021.04.05 12:36:12.537 Core 01 2021.04.02 00:00:00   failed modify order #2 buy limit 0.01 EURUSD at 1.16760 sl: 0.00000 tp: 0.00000 -> 1.16760, sl: 0.00000 tp: 1.18760 [Modification failed due to order or position being close to market]
2021.04.05 12:36:12.537 Core 01 2021.04.02 00:00:00   CTrade::OrderSend: modify #2 at 1.16760 (sl: 0.00000 tp: 1.18760) [frozen]
2021.04.05 12:36:12.537 Core 01 2021.04.02 00:00:00   failed cancel order #2 buy limit 0.01 EURUSD at 1.16760 [Invalid stops]
2021.04.05 12:36:12.537 Core 01 2021.04.02 00:00:00   CTrade::OrderSend: cancel #2 [invalid stops]

Что ордер что ТП явно же далеко от маркет цены. Думаю, по этой же причине и валидация на маркете не проходит.

Билд 2875

 

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

 
А кто удалил видео про стаканы?