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);
}
У меня переключение на MQ тестер, чтобы получить тик. У него наверное нет указателя. В других местах попробую поменять.
voidOnTick(){
VIRTUAL::SelectByIndex(0);// восстановит реальный тестер, чтобы получить правильное время и тик, а не последний из VirtualstaticMqlTick Tick;
if (SymbolInfoTick(_Symbol, Tick)){
#ifdef _MathTick_
if(MathTick.SaveTick(Tick)){ return; }//если сохраняем тики, то выход и не торгуем. #endif
Strategy(Tick);//trading
}
}
Альтернатива - можно не перехватывать
SymbolInfoTick(_Symbol, Tick)
в Виртуале, а оставить родной. Чтоб не переключать на каждом тике на 0. Или как то по другому сделать доступ к реальному тику.
voidOnTick(){
//VIRTUAL::SelectByIndex(0);// восстановит реальный тестер, чтобы получить правильное время и тик, а не последний из Virtual
Virtual[0].Select();
staticMqlTick Tick;
if (SymbolInfoTick(_Symbol, Tick)){
#ifdef _MathTick_
if(MathTick.SaveTick(Tick)){ return; }//если сохраняем тики, то выход и не торгуем. #endif
Strategy(Tick);//trading
}
}
Нет - виртуал по реальным тикам. Применил _VSP - стало еще медленнее 14 вместо 12
voidOnTick(){
//VIRTUAL::SelectByIndex(0);// восстановит реальный тестер, чтобы получить правильное время и тик, а не последний из Virtual//Virtual[0].Select();
_VSP(Virtual[0]);
staticMqlTick Tick;
if (SymbolInfoTick(_Symbol, Tick)){
#ifdef _MathTick_
if(MathTick.SaveTick(Tick)){ return; }//если сохраняем тики, то выход и не торгуем. #endif
Strategy(Tick);//trading
}
}
Core 1 pass 0 returned result -2.950378 in 0:00:18.113 Core 1 pass 1 returned result -2.950378 in 0:00:14.418 Core 1 pass 2 returned result -2.950378 in 0:00:14.866
Основной расчет будет в мат режиме. Этот просто для контроля пусть будет.
voidOnTick(){
//VIRTUAL::SelectByIndex(0);// восстановит реальный тестер, чтобы получить правильное время и тик, а не последний из Virtual
Virtual[0].Select();
Напишите просто.
voidOnTick(){
VIRTUAL::NewTick();
Так будет получен тик в виртуальное окружение из реального напрямую - минуя переключения.
Но его надо получить в переменную и его отправить на проверки, на запись и в стратегию.
voidOnTick(){
//VIRTUAL::SelectByIndex(0);// восстановит реальный тестер, чтобы получить правильное время и тик, а не последний из Virtual//Virtual[0].Select();//_VSP(Virtual[0]);
VIRTUAL::NewTick();
staticMqlTick Tick;
if (SymbolInfoTick(_Symbol, Tick)){
#ifdef _MathTick_
if(MathTick.SaveTick(Tick)){ return; }//если сохраняем тики, то выход и не торгуем. #endif
Strategy(Tick);//trading
}
}
В общем не ускорить... Основной расчет будет в мат режиме. Этот просто для контроля пусть будет.
VIRTUAL::SelectByIndex(0);// восстановит реальный тестер, чтобы получить правильное время и тик, а не последний из Virtual
Вот оно на каждом тике и тормозит до 8 секунд
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: Virtual
fxsaber, 2023.01.26 08:48
Результаты замеров на обеих платформах.
97326 mcs
77569 mcs
869 mcs
525 mcs
36 mcs
8 mcs
13 mcs
Полностью перешел на указатели.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: EAToMath
fxsaber, 2025.11.04 14:59
2 виртуалки без переключений на 0
_VSP(VirtualPointer);
Альтернатива - можно не перехватывать в Виртуале, а оставить родной. Чтоб не переключать на каждом тике на 0.
Или как то по другому сделать доступ к реальному тику.
Forester #:
У меня переключение на MQ тестер, чтобы получить тик.
В мат. режиме же ничего не получите.
У него наверное нет указателя. В других местах попробую поменять.
Но я не использую такое, т.к. есть классный макрос _VSP.
В мат. режиме же ничего не получите.
Сделал так:
Ускорения нет - всё те же 12 секунд.Сделал так:
Ускорения нет - всё те же 12 секунд.Это же не в мат. режиме?
Нет - виртуал по реальным тикам.
Применил _VSP - стало еще медленнее 14 вместо 12
Core 1 pass 0 returned result -2.950378 in 0:00:18.113
Core 1 pass 1 returned result -2.950378 in 0:00:14.418
Core 1 pass 2 returned result -2.950378 in 0:00:14.866
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: Virtual
Forester, 2025.11.07 14:24
Напишите просто.
Так будет получен тик в виртуальное окружение из реального напрямую - минуя переключения.
Применил _VSP - стало еще медленнее 14 вместо 12
VIRTUAL::NewTick();
Применил - 13 секунд.
Но его надо получить в переменную и его отправить на проверки, на запись и в стратегию.
В общем не ускорить... Основной расчет будет в мат режиме. Этот просто для контроля пусть будет.