Библиотеки: EAToMath - страница 7

 
Forester #:

Мой OnTick() вызывается, но он не пожет получить значения тика:

Реальное окружение в мат. режиме является же виртуальным. Почему не использоваться советник, как если бы штатно торговали в реальном окружении?
 

Это действие лишние, если при сохранении тиков выбрать только торговые.

 
fxsaber #:
Реальное окружение в мат. режиме является же виртуальным. Почему не использоваться советник, как если бы штатно торговали в реальном окружении?

Реальное окружение не использовал для скорости - советник для виртуалки написан.

У меня одна виртуалка для получения разметки, а во второй торгует уже обученное МО.

 
Forester #:

У меня одна виртуалка для получения разметки, а во второй торгует уже обученное МО.

Просьба пояснить.

 
fxsaber #:

Просьба пояснить.

В разметочной все сделки подряд, на них обучается МО. Потом во второй виртуалке торговля отфильтрованое МО.
В общем 2 виртуалки нужны.
 
fxsaber #:
Содержит данные символа и тестера.

Нужно ваши использовать?

  inTechData0=AAAAAEVVUlVTRAAAAAAAABAABAAAAAAAAAAEAAAAAAD/AwAAAAAAAAAAAAAAAAA
  inTechData1=AAAD9lk4CAADUc7of+38AAAAA/ZbxaOOItfjkPgUAAAD//////2n4QPFo44i1+O
  inTechData2=Q+AAAAAACIw0AAp0tnAAAAAACxbWgAAAAA

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

У меня сейчас в тики нули считываются - возможно из за этого и сделок нет.
 
Forester #:
В общем 2 виртуалки нужны.
#include <fxsaber\EAToMath\EAToMath.mqh> // https://www.mql5.com/ru/code/61283

sinput bool inVirtual = false; // true - виртуальное, false - "реальное"

void OnTick()
{
  static const VIRTUAL_POINTER VirtualPointer = VIRTUAL::Create(AccountBalance()); // Создали виртуальное окружение для разметки

  // Здесь находимся в "реальном" окружении.
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick)) // Получили тик из "реального" окружения.
  {
    _VSP(VirtualPointer);            // Зашли в виртуальное окружение и выйдем автоматически из него, как будет выход из скопа.    
    VIRTUAL::NewTick_NoCheck(Tick);  // Пробросили в виртуальное окружение тик.

    if (OrdersHistoryTotal() < 5)
      OrderSend(_Symbol, OP_BUY, 1, Tick.ask, 0, Tick.ask - 10 * _Point, Tick.ask + 10 * _Point);    
  }
  
  // Здесь находимся в "реальном" (MT4Orders не было при компиляции) окружении.
  
  if (OrdersHistoryTotal() < 2)
    OrderSend(_Symbol, OP_SELL, 1, Tick.bid, 0, Tick.bid + 10 * _Point, Tick.bid - 10 * _Point);    
}

double OnTester()
{
  if (inVirtual)
    VIRTUAL::SelectByIndex(VIRTUAL::Total()); // Так зайдем в созданное выше виртуальное окружение.

  return(AccountBalance());
}

Одновременная торговля в двух окружениях.


Включите HTML-отчет, чтобы увидеть торговлю в каждом из окружений (входным inVirtual выбирается).


 
Forester #:

Нужно ваши использовать?

Нет. Эти поля автоматически генерируются в режиме записи тиков.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Библиотеки: EAToMath

fxsaber, 2025.07.09 20:25

Алгоритм запуска одиночного прохода при сохранении тиков.

  1. В Тестере каждый OnTick записывается в файл.
  2. После завершения прохода автоматически запускается скрипт RunMe.ex5 в Терминале.
  3. Этот скрипт в тихом режиме запускает исходный советник в Терминале.
  4. Исходный советник прописывает технические данные в свои настройки в Тестере.

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


Такие строки в журнале должны быть после запуска советника в тестере в режиме сохранения тиков.

2025.07.09 23:24:41.184 Scripts script RunMe (EURUSD,M1) loaded successfully
2025.07.09 23:24:41.216 Experts expert EAToMath_Example (EURUSD,M1) loaded successfully
2025.07.09 23:24:41.733 Scripts script RunMe (EURUSD,M1) removed
2025.07.09 23:24:41.918 Experts expert EAToMath_Example (EURUSD,M1) removed
 
fxsaber #:
Нет. Эти поля автоматически генерируются в режиме записи тиков.
Не записывает. Вот такой лог:
CS    0    18:21:30.324    Tester      inVirtual=true
CS    0    18:21:30.325    test3 (EURUSD,M1)    1970.01.01 00:00:00   EAToMath.mqh 840: version 2025.09.01, https://www.mql5.com/ru/code/61283
CS    0    18:21:30.325    test3 (EURUSD,M1)    1970.01.01 00:00:00   EAToMath.mqh 841: : testing of Experts\test3.ex5 from 1970.01.01 00:00:00 to 1970.01.01 00:00:00,
CS    0    18:21:30.325    test3 (EURUSD,M1)    1970.01.01 00:00:00   EAToMath.mqh 867: TechData-inputs are invalid!
CS    0    18:21:30.325    test3 (EURUSD,M1)    1970.01.01 00:00:00   EAToMath.mqh 1182: final balance 1000000000.00, OrdersHistoryTotal() = 0
CS    0    18:21:30.325    Tester    OnTester result 0
CS    0    18:21:30.376    Tester    0 : mathematical test passed in 0:00:00.064
CS    0    18:21:30.377    Tester    169 Mb memory used
CS    0    18:21:30.377    Tester    log file "C:\Users\0\AppData\Roaming\MetaQuotes\Tester\D0E8209F77C8CF37AD8BF550E51FF075\Agent-127.0.0.1-3000\logs\20251104.log" written
CS    0    18:21:30.377    Tester    test Experts\test3.ex5 on EURUSD,M1 thread finished
CS    0    18:21:30.381    127.0.0.1    prepare for shutdown
CS    0    18:21:30.381    127.0.0.1    shutdown finished

в \fxsaber\MultiTester\RunMe.mq5 сделал так
//#define FAKE // Убрать - обход для размещения кода в КБ.
 
Forester #:
Не записывает. Вот такой лог:

В логе Тестера не будет никаких записей по этому поводу. Только в логе Терминала (вкладки Journal, не Experts).

На всякий случай скинул в ЛС последнюю версию MTTester.mqh.

Библиотеки: MultiTester
Библиотеки: MultiTester
  • 2025.09.21
  • www.mql5.com
Статьи и техническая библиотека по автоматическому трейдингу: Библиотеки: MultiTester