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

 

Что не так в МТ5  с отрисовкой большого кол-ва объектов на графике?

Когда у меня много более 500 начинаются проблемы с отрисовкой свечек графика, цена стоит ничего не обновляется. При этом все расчеты идут в OnTimer по сути в отдельном потоке и никак не долны влиять на отрисовку графика терминалом.

В мт4 все идеально хоть 7000 объектов , без проблем никаких подвисаний. Вы уже почините эту отрисовку. Не хочется переделывать все на canvas, так как там и линии и текст и всплывающие подсказки реализовывать или брать из чужих решений...

Замучался я уже с этими проблемами в мт5 .

 
Alexandr Gavrilin #:

Что не так в МТ5  с отрисовкой большого кол-ва объектов на графике?

Когда у меня много более 500 начинаются проблемы с отрисовкой свечек графика, цена стоит ничего не обновляется. При этом все расчеты идут в OnTimer по сути в отдельном потоке и никак не долны влиять на отрисовку графика терминалом.

В мт4 все идеально хоть 7000 объектов , без проблем никаких подвисаний. Вы уже почините эту отрисовку. Не хочется переделывать все на canvas, так как там и линии и текст и всплывающие подсказки реализовывать или брать из чужих решений...

Замучался я уже с этими проблемами в мт5 .

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

Помогите понять, это баг или я чего-то не понимаю:


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
      int ChartID_res1 = (int)ChartID();
      int ChartID_res2 = (int)MathAbs(ChartID());
      int ChartID_res3 = MathAbs((int)ChartID()); 
      int ChartID_res4 = (int)ChartID(); ChartID_res4 = MathAbs(ChartID_res4);
      
      
      Print("ChartID_res1: ",ChartID_res1);
      Print("ChartID_res2: ",ChartID_res2);
      Print("ChartID_res3: ",ChartID_res3);
      Print("ChartID_res4: ",ChartID_res4);
//---
   return(INIT_SUCCEEDED);
  }

Результат:


Почему во второй строчке получаем отрицательное, а не положительное значение?

 
Alexandr Gavrilin #:

Когда у меня много более 500 начинаются проблемы с отрисовкой свечек графика

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

 
Konstantin Efremov #:

Почему во второй строчке получаем отрицательное, а не положительное значение?

long-значение больше INT_MAX.

 
Nikolai Semko #:
Эта дверь закрыта. Давно долблюсь в нее.
Но с канваса не вернусь к объектам ввиду их ограниченности, если даже их тормознутое поведение исправят.

Наверняка у вас есть готовые решения для отрисовки подсказок в канвасе? 

 
fxsaber #:

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

а вот тут интересный момент. 

если индикатор рисует - то график виснет

если сделать советником, то все работает.

я не могу тут разместить код, код клиента.

Но подумаю как воспроизвести данную ситуацию для демонстрации.

 

Как найти размер маржи под один лот?

Функция

   lot1 =OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1,Ask,lot1);

не работает. везде выдаёт 1.Тоже самое

lot2 =SymbolInfoDouble(Symbol(),SYMBOL_MARGIN_INITIAL);


на всех инструментах и плечах =1

 
Dmitrii Troshin #:

Как найти размер маржи под один лот?

Функция

не работает. везде выдаёт 1.Тоже самое


на всех инструментах и плечах =1

Обратите внимание на OrderCheck()

struct MqlTradeCheckResult
  {
   uint         retcode;             // Код ответа
   double       balance;             // Баланс после совершения сделки
   double       equity;              // Эквити после совершения сделки
   double       profit;              // Плавающая прибыль
   double       margin;              // Маржевые требования
   double       margin_free;         // Свободная маржа
   double       margin_level;        // Уровень маржи
   string       comment;             // Комментарий к коду ответа (описание ошибки)
  };

margin

Размер маржи необходимый для требуемой торговой операции


Кроме этого может ещё что-то пригодиться.


Плюс ко всему это

   lot1 =OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1,Ask,lot1);

ошибочный код. Функция возвращает bool значение.

Документация по MQL5: Торговые функции / OrderCheck
Документация по MQL5: Торговые функции / OrderCheck
  • www.mql5.com
OrderCheck - Торговые функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Да туплю. так вот откуда 1 :)  Но

lot2 =SymbolInfoDouble(Symbol(),SYMBOL_MARGIN_INITIAL);

всё равно показывает не то что хотелось

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