Пользовательские символы. Ошибки, баги, вопросы, предложения. - страница 9

 
Andrey Khatimlianskii:

Залил 2009 и 2025 в прежнее место.

Спасибо. Попробовал билды 1970+ - у всех этот баг, пока жестко не пересоздашь кастомные символы, оставаясь в пределах одного торового счета.

 
fxsaber:

2009:

2033:

 

Баг 10.

Не получается удалить символ.

#define PRINT(A) Print(#A + " = " + (string)(A))

void OnStart()
{
  MathSrand((uint)TimeLocal());
  
  const string Name = _Symbol + (string)MathRand();

  PRINT(CustomSymbolCreate(Name));

  PRINT(CustomRatesDelete(Name, 0, 0)); // Без этой строки удаление работает.
  
  PRINT(CustomSymbolDelete(Name)); // false
  PRINT(GetLastError());  
}


CustomSymbolCreate(Name) = true
CustomRatesDelete(Name,0,0) = 0
CustomSymbolDelete(Name) = false
GetLastError() = 5306
 

Баг 11.

CustomTicksAdd не формирует бары.

// Проигрываем тиковую историю через таймер.
#define PRINT(A) Print(#A + " = " + (string)(A))

void OnInit()
{
  if (EventSetMillisecondTimer(20)) // С такой частотой будем пробрасывать тики
    MathSrand((uint)TimeLocal());  
}

void OnTimer()
{
  static const string Name = _Symbol + (string)MathRand();
  
  static bool FirstRun = true;
  static MqlTick Ticks[];
  static int Pos = 0;
    
  if (FirstRun)
  {
    PRINT(CustomSymbolCreate(Name, NULL, _Symbol)); // Создали символ.
  
    PRINT(CustomRatesDelete(Name, 0, 0)); // Без этой строки работает.    
    PRINT(SymbolSelect(Name, false));     // https://www.mql5.com/ru/forum/304554/page9#comment_11680616
    
    PRINT(CustomSymbolDelete(Name));                // Убили.
    PRINT(CustomSymbolCreate(Name, NULL, _Symbol)); // Воскресили.
    
    if (SymbolSelect(Name, true)) // Поместили в Обзор рынка
    {
      ChartOpen(Name, PERIOD_M1);            // Открыли чарт
      PRINT(CopyTicksRange(_Symbol, Ticks, COPY_TICKS_INFO, (TimeCurrent() - 3600) * 1000)); // Взяли тики (последний час) для проброса
    }
      
    FirstRun = false;
  }
  else if (Pos < ArraySize(Ticks))
  {
    MqlTick Tick[1];
    
    // Пробрасываем по тику
    Tick[0] = Ticks[Pos++];
    CustomTicksAdd(Name, Tick);
  }
}

На открывшемся чарте бары формироваться не будут. В Обзоре рынка тики обновляются.

 

Баг 12.

При создании пользовательского символа с нуля (через CTRL+U, например) максимальный объем прописывается такой, что Тестер не в состоянии вычислить его профит.

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnInit()
{
  // Именно такой макс. объем автоматом прописывается при создании кастомного символа с нуля.
  const double Lot = 1e11; // SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX)
  
  OrderSend(_Symbol, OP_BUY, Lot, Ask, 0, 0, 0); // После закрытия этой позиции ее профит будет нулевым.
}
 
Почему-то не доходят руки разработчиков до воспроизводимых багов в этой ветке.
 
fxsaber:
Почему-то не доходят руки разработчиков до воспроизводимых багов в этой ветке.
Приглашать наверное надо
 

пригласил Славу Stringо.

вбиваю в это поле (вложение 1) пользовательский инструмент. он открывается без котировок. если я открываю его через меню, то всё ок.

вложение 2 - это к слову.

вложение 3: надоела эта кнопка, не нужная никому. сделайте опцию скрытия её. есть справка. давайте опрос проведем.

спсб

Файлы:
x34zq9.PNG  2 kb
1wvlwh2.PNG  10 kb
qfd9jf.PNG  2 kb
 
superman:

пригласил Славу Stringо.

вбиваю в это поле (вложение 1) пользовательский инструмент. он открывается без котировок. если я открываю его через меню, то всё ок.

вложение 2 - это к слову.

Не так приглашают.

Так: @Slava

 
fxsaber:

Баг 07.

Тестер формируют бары по Last для биржевых кастомных символов с ценой построения баров по Bid.

Соответственно, баровая история в Терминале и Тестере полностью расходится. И если кто-то в ТС использует бары (индикаторы, например), то результат бэктеста для него случайный.

Покажите спецификацию кастомного символа.

И дайте кастомные тики.

Чтобы что-то исправлять, надо сначала воспроизвести