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

 
Aleksandr Slavskii #:

Теперь понял)

Ну да решение выглядит логично. 

Одно НО, теперь котировки дублируются не только терминал + тестер, а терминал + тестер + папка с агентами.

Жёсткий диск будет забиваться котировками намного быстрее.

Субъективно оптимизация идёт медленнее, но это понятно, в терминале участвовали в оптимизации и виртуальные ядра, а в локальных агентах только реальные.

Но это субъективная оценка, сравнительные тесты я не проводил.

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

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

 

Есть такое понятие как переменная с названием символа, а есть ли переменная с "ВСЕ СИМВОЛЫ ИЗ ОБЗОРА РЫНКА" ? так как такое значение выбирается в окошке символа при выборе оптимизация по всем символам.


Мне нужно чтобы в терминале выбралось именно это значение -  ВСЕ СИМВОЛЫ ИЗ ОБЗОРА РЫНКА а не конкретный символ.

P.S. Почему мои вопросы настолько уникальные, что никто не знает на них ответа.

Решилось банальным выбором любого символа или так же написанием значения "ВСЕ СИМВОЛЫ ИЗ ОБЗОРА РЫНКА"

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

Библиотека LibTest
#property library
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

int var;

//----------------------
//Экспортируемя функция
int FooInit(void) export
{
   var = rand();
   
   return(var);
}

//----------------------
//Экспортируемя функция
int FooGet(void) export
{
   return(var);
}

Сервис ServiceTest
#property service
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

#import "LibTest.ex5"
   int FooInit(void);
#import

//+------------------------------------------------------------------+
//| Service program start function                                   |
//+------------------------------------------------------------------+
void OnStart()
{
   while(!_StopFlag)
   {
      Print("Сервис FooInit: ", FooInit());
      
      Sleep(10000);   
   }

}


Скрипт ScriptTest

#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

#import "LibTest.ex5"
   int FooGet(void);
#import

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   Print("Скрипт FooGet: ", FooGet());

}



Запускаем сервис, он принтует значение глобальной переменной var которая в библиотеке.
Запускаем скрипт, ожидая получить значение переменной var.
Не работает!



Файлы:
 
Roman #:
Почему библиотека .ex5 не работает с динамическими переменными?
А если переменной присвоить статичное значение, то работает.
Задача передавать значения любых стандартных типов, из сервиса в другую программу.

Библиотека LibTest

Сервис ServiceTest


Скрипт ScriptTest



Запускаем сервис, он принтует значение глобальной переменной var которая в библиотеке.
Запускаем скрипт, ожидая получить значение переменной var.
Не работает!



Скрипт и сервис - две отдельные программы. И у каждой своя переменная var.

 
Koldun Zloy #:

Скрипт и сервис - две отдельные программы. И у каждой своя переменная var.

Раньше давно другое поведение было и работало.
Библиотека загружалась единожды в окружение. Разве это не ошибка сейчас?
Как тогда обмениваться значениями между программами? Ведь библиотека должна это уметь.

 
Roman #:
Почему библиотека .ex5 не работает с динамическими переменными?
А если переменной присвоить статичное значение, то работает.
Задача передавать значения любых стандартных типов, из сервиса в другую программу.


штатными средствами терминала - только через глобальные переменные терминала и ресурсы. И ещё ChartEvent можно рассылать. Или держать общую SQLite базу

при совмещении доступных средств, можно организовать эффективный "ансамбль". Или DLL если умеете, но тогда отпадут VPS 

 
Maxim Kuznetsov #:

штатными средствами терминала - только через глобальные переменные терминала и ресурсы. И ещё ChartEvent можно рассылать. Или держать общую SQLite базу

при совмещении доступных средств, можно организовать эффективный "ансамбль". Или DLL если умеете, но тогда отпадут VPS 

Это всё не то.
Глобальные переменные терминала, только тип double.
ChartEvent имеет свою общую очередь с событиями графиков, не подходит.
Файлы вообще не вариант.
Как раз задача не использовать dll.

 
Roman #:

Это всё не то.
Глобальные переменные терминала, только тип double.
ChartEvent имеет свою общую очередь с событиями графиков, не подходит.
Файлы вообще не вариант.
Как раз задача не использовать dll.

если через глобальные переменные только "семафорить/защищать"  про изменения, а сами данные передавать в SQLite на RAM-диске, то очень всё шустро, на грани погрешности измерений

Или пришпилить ресурсы когда надо просто большие массивы перекидывать. 

Без DLL, но попыхтеть придётся :-)

 
Maxim Kuznetsov #:

если через глобальные переменные только "семафорить/защищать"  про изменения, а сами данные передавать в SQLite на RAM-диске, то очень всё шустро, на грани погрешности измерений

Или пришпилить ресурсы когда надо просто большие массивы перекидывать. 

Без DLL, но попыхтеть придётся :-)

Просто не пойму, зачем такие костыли делает разработчик? 
Раньше всё же работало нормально. И в доках про экспорт функций пишут, что dll загружается по правилу windows, т.е. единожды.
Разве это не ошибка  с .ex5 ?
Почему мне предлагают обходные пути? Когда должны работать стандартные. Тем более библиотека .ex5 

 
Roman #:

Просто не пойму, зачем такие костыли делает разработчик? 
Раньше всё же работало нормально. И в доках про экспорт функций пишут, что dll загружается по правилу windows, т.е. единожды.
Разве это не ошибка  с .ex5 ?
Почему мне предлагают обходные пути? Когда должны работать стандартные. Тем более библиотека .ex5 

отвлечённо - у нас даже с DLL будут небольшие проблемы. 

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

Стандартный путь, чтобы из одного независимого треда передать данные в другой - нужно что-то между ними общего. Общего - перечисленные вещи (переменные, chartevent, ресурсы, базы,файлы). То есть сделано хорошо, тут не придраться.