Особенности языка mql5, тонкости и приёмы работы - страница 305

 
Edgar Akhmadeev #:

Для GPU показывает только строку с FPS

в файле pixel1.hlsl удалите первый символ ё, случайно там оказавшийся.

 
Edgar Akhmadeev #:

Для CPU работает

Для GPU показывает только строку с FPS

Для OCL Не хватает test_002.cl

Причем чем больше "центров гравитации", тем больше выйгрыш (у меня примервно в 100 раз при 300 центров гравитации)
GPU версия (DirectX) у меня почему-то стала медленее работать чем CPU, хотя раньше быстрее была в несколько раз. 

 
Nikolai Semko #:

в файле pixel1.hlsl удалите первый символ ё, случайно там оказавшийся.

Заработало.

Не нашёл, где вставляется этот ресурс pixel1.hlsl.

Для CL отображается неправильно - на светло-сером фоне изредка проблёскивают цветные всполохи.

 

В индикаторе функция для очищения окна экспертов.

Почему во время OnInit() она не выполняется, хотя время на неё тратится, а при нажатии клавиши J очищение происходит? Как сделать так, чтобы и при вызове функции в коде тоже происходило очищение?

2025.07.09 01:38:46.377 test (EURJPY,H2)        11111
2025.07.09 01:38:46.377 test (EURJPY,H2)        22222
2025.07.09 01:38:46.377 test (EURJPY,H2)        33333
2025.07.09 01:38:46.377 test (EURJPY,H2)        44444
2025.07.09 01:38:46.383 test (EURJPY,H2)        55555
Файлы:
test.mq5  5 kb
 
#property copyright "Botan626"
#property link      "https://www.forexfactory.com/botan626"
#property version   "1.00"
//---
#include <WinAPI/WinAPI.mqh>
#import "kernel32.dll"
int  QueryFullProcessImageNameW(HANDLE process, uint flags, short &Buffer[], uint &size);
#import
//---
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit() {
  Print("11111");
  Print("22222");
  Print("33333");
  Print("44444");
  Sleep(200);
  TerminalExpertsJournalClear();
  Print("55555");
//---
  return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//int OnCalculate(const int32_t rates_total,
//                const int32_t prev_calculated,
//                const int32_t begin,
//                const double &price[]) {
////---
////--- return value of prev_calculated for next call
//  return(rates_total);
//}
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int32_t id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam) {
//---
  if(id == CHARTEVENT_KEYDOWN && lparam == 74) {   // J
    Print("CHARTEVENT_KEYDOWN");
    Sleep(200); 
    TerminalExpertsJournalClear();
  }
}
Показатель не может вызывать Sleep(). После изменения на советник (EA) и добавления задержки в 200 миллисекунд, всё работает нормально. Очистка логов может занять время.
Andrei Iakovlev #:
Почему во время OnInit() она не выполняется, хотя время на неё тратится, а при нажатии клавиши J очищение происходит?
 
hini #:
Показатель не может вызывать Sleep().

В индикаторе никак не сделать, чтобы во время выполнения кода очистка работала?

 
Andrei Iakovlev #:

В индикаторе никак не сделать, чтобы во время выполнения кода очистка работала?

int firstClear = 0;
//---
int OnInit() {
  firstClear = 0;
  Print("1111");
  Print("2222");
  Print("3333");
  
  return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int32_t rates_total,
                const int32_t prev_calculated,
                const int32_t begin,
                const double &price[]) { 
  if (firstClear < 5) {
    TerminalExpertsJournalClear();
    firstClear++;
  }               
  return(rates_total);
}
Думаю, да. Рекомендую либо вообще не выводить никаких Print в OnInit, либо выполнять первоначальную очистку в OnCalculate.
 
hini #:
Думаю, да. Рекомендую либо вообще не выводить никаких Print в OnInit, либо выполнять первоначальную очистку в OnCalculate.

Я хочу очищать окно экспертов в индикаторе тогда, когда хочу, через указание функции TerminalExpertsJournalClear(); в коде, а не в OnCalculate.

 
Andrei Iakovlev #:

Я хочу очищать окно экспертов в индикаторе тогда, когда хочу, через указание функции TerminalExpertsJournalClear(); в коде, а не в OnCalculate.

Разве сейчас это уже не реализуемо? Просто запомни: очистка логов быстрее, чем их вывод. Нужно сначала вывести логи, а потом их очистить — ищи способ это организовать.
 
hini #:
Разве сейчас это уже не реализуемо?

нет