Ваше предложение решило проблему несоответствия общего количества сделок, я попробовал вызвать Stop(), используя определение VIRTUAL_CLOSEALL_BYEND в верхней части кода.
Я также добавил тест IsNewBar, чтобы иметь меньше сделок.
// Запуск ТС в реальной и виртуальной торговых средах//необходимо, чтобы тестер мог торговать как настоящая стратегия#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006#define VIRTUAL_TESTER // Запуск в виртуальной торговой среде#define VIRTUAL_CLOSEALL_BYEND
#include <fxsaber\Virtual\Virtual.mqh> // Виртуальная торговая средаinputdouble Lots = 1;
inputint Interval = 100; // Время жизни позицииinputbool Example = true; // Какой пример кода выбратьdatetime bartime;
//+------------------------------------------------------------------+//||//+------------------------------------------------------------------+bool och_NewBar(string _symbol, ENUM_TIMEFRAMES _timeframe, datetime& _lasttime)
{
if(::iTime(_symbol,_timeframe,0) != _lasttime)
{
_lasttime=::iTime(_symbol,_timeframe,0);
return (true);
}
elsereturn (false);
}
// Reversible TCvoid System()
{
if (!OrderSelect(OrdersTotal() - 1, SELECT_BY_POS))
OrderSend(_Symbol, OP_BUY, Lots, SymbolInfoDouble(_Symbol, SYMBOL_ASK), 100, 0, 0); // Если нет позиции - открытьelseif (TimeCurrent() - OrderOpenTime() > Interval) // Если позиция прожила дольше указанного времени
{
// Перевернутое положение
OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 100);
OrderSend(_Symbol, 1 - OrderType(), Lots, OrderClosePrice(), 100, 0, 0);
}
//PrintFormat("%s-Line#%d::HistoryOrders.Total() = %d", __FUNCTION__, __LINE__, OrdersHistoryTotal());
}
int handle = VIRTUAL::Create(); // Создан хэндл для виртуальной торговой среды. 0 - реальная торговая средаvoidOnTick()
{
//static const int handle = VIRTUAL::Create(); //Создали хэндл для виртуальной торговой среды. 0 - реальная торговая средаif (!och_NewBar(_Symbol, _Period, bartime)) return;
if (Example)
{
if (VIRTUAL::SelectByHandle()) // Выбор реальной торговой среды
System(); // Запуск ТС на выбранной торговой среде (реальной)if (VIRTUAL::SelectByHandle(handle)) // Выбор виртуальной торговой среды
{
VIRTUAL::NewTick(); // Добавили тик в виртуальную торговую среду
System(); // Запуск ТС на выбранной торговой среде (виртуальной)
}
}
else// Альтернативная запись тех же действий.// Просматриваем все доступные торговые средыfor (int i = 0; i <= VIRTUAL::Total(); i++)
if (VIRTUAL::SelectByIndex(i)) // Выбор подходящей торговой среды
{
VIRTUAL::NewTick(); // Добавили тик в выбранную торговую среду
System(); // Запуск TS на выбранной торговой среде
}
Comment(VIRTUAL::ToString()); // Привели в соответствие с графиком состояние виртуальной торговой среды
}
voidOnDeinit(constint reason)
{
VIRTUAL::SelectByHandle();
PrintFormat("(%s-%s)::%s - Initial deposit=%.2f, Balance=%.2f, Equity=%.2f, Profit=%G, Trades=%d", _Symbol, EnumToString(_Period), "Real", 0,AccountBalance(), AccountEquity(), AccountProfit(), OrdersHistoryTotal());
VIRTUAL::SelectByHandle(handle);
VIRTUAL::Stop();
PrintFormat("(%s-%s)::%s - Initial deposit=%.2f, Balance=%.2f, Equity=%.2f, Profit=%G, Trades=%d", _Symbol, EnumToString(_Period), "Virtual", 0,AccountBalance(), AccountEquity(), AccountProfit(), OrdersHistoryTotal());
Comment("");
}
Но, по моему мнению, баланс должен быть равен (начальный депозит - прибыль), а прибыль должна быть равна (начальный депозит - убыток + прибыль), как мы можем видеть в результатах бэктестера для реальной ТС.
То есть баланс правильный, но прибыль не может быть (баланс - капитал), как это определено в Orders.mqh
Ваше предложение решило проблему несоответствия общего количества сделок, я попробовал вызвать Stop(), используя определение VIRTUAL_CLOSEALL_BYEND в верхней части кода.
Я также добавил тест IsNewBar, чтобы иметь меньше сделок.
Но, по моему мнению, баланс должен быть (начальный депозит - прибыль), а прибыль должна быть (начальный депозит - убыток + прибыль), как мы можем видеть в результатах бэктестера для реальной ТС.
Таким образом, баланс правильный, но прибыль не может быть (баланс - эквити), как это определено в Orders.mqh
Я также не понимаю, почему AccountInfoDouble(ACCOUNT_PROFIT) возвращает 0 для реальной ТС.
Я ошибаюсь?
Так что не очень элегантный способ решения проблемы, все еще нужно исследовать для виртуального TS:
Но, по моему мнению, баланс должен составлять (начальный депозит - прибыль), а прибыль - (начальный депозит - убыток + прибыль), как мы можем видеть в результатах бэктестера для реальной ТС.
Таким образом, баланс правильный, но прибыль не может быть (баланс - эквити), как это определено в Orders.mqh
Я также не понимаю, почему AccountInfoDouble(ACCOUNT_PROFIT) возвращает 0 для реальной ТС.
Я ошибаюсь?
ACCOUNT_PROFIT равен сумме прибылей всех текущих открытых позиций.
fxsaber,
Спасибо за быстрый ответ.
Ваше предложение решило проблему несоответствия общего количества сделок, я попробовал вызвать Stop(), используя определение VIRTUAL_CLOSEALL_BYEND в верхней части кода.
Я также добавил тест IsNewBar, чтобы иметь меньше сделок.
Но, по моему мнению, баланс должен быть равен (начальный депозит - прибыль), а прибыль должна быть равна (начальный депозит - убыток + прибыль), как мы можем видеть в результатах бэктестера для реальной ТС.
То есть баланс правильный, но прибыль не может быть (баланс - капитал), как это определено в Orders.mqh
Я также не понимаю, почему AccountInfoDouble(ACCOUNT_PROFIT) возвращает 0 для реальной ТС.
Я ошибаюсь?
fxsaber,
Спасибо за быстрый ответ.
Ваше предложение решило проблему несоответствия общего количества сделок, я попробовал вызвать Stop(), используя определение VIRTUAL_CLOSEALL_BYEND в верхней части кода.
Я также добавил тест IsNewBar, чтобы иметь меньше сделок.
Но, по моему мнению, баланс должен быть (начальный депозит - прибыль), а прибыль должна быть (начальный депозит - убыток + прибыль), как мы можем видеть в результатах бэктестера для реальной ТС.
Таким образом, баланс правильный, но прибыль не может быть (баланс - эквити), как это определено в Orders.mqh
Я также не понимаю, почему AccountInfoDouble(ACCOUNT_PROFIT) возвращает 0 для реальной ТС.
Я ошибаюсь?
Так что не очень элегантный способ решения проблемы, все еще нужно исследовать для виртуального TS:
Но, по моему мнению, баланс должен составлять (начальный депозит - прибыль), а прибыль - (начальный депозит - убыток + прибыль), как мы можем видеть в результатах бэктестера для реальной ТС.
Таким образом, баланс правильный, но прибыль не может быть (баланс - эквити), как это определено в Orders.mqh
Я также не понимаю, почему AccountInfoDouble(ACCOUNT_PROFIT) возвращает 0 для реальной ТС.
Я ошибаюсь?
ACCOUNT_PROFIT равен сумме прибылей всех текущих открытых позиций.
Так что это не очень элегантный способ решения проблемы, но все равно придется исследовать его для Virtual TS:
fxsaber,
Еще раз спасибо за поддержку и реакцию.
Я немного обновил код и попытался разделить использование TS окружения.
Я понимаю результат, когда мы используем реальное или виртуальное окружение. Результаты соответствуют ожиданиям.
Я не понимаю результатов, когда мы пытаемся использовать оба окружения одновременно.
Возможно ли извлечь список заказов в виде CSV-файла?
С наилучшими пожеланиями,
och
Я не понимаю результатов, когда мы пытаемся использовать оба окружения одновременно.
У библиотеки много вариантов использования. Вы рассматриваете пример общего представления.
Возможно ли извлечь список ордеров в виде CSV-файла?
В примере ниже вы можете изменить торговую среду во входных параметрах: реальная или виртуальная.
Строки внизу создают HTML-отчет. Если вы включите DLL, то этот отчет будет автоматически появляться в браузере по окончании тестирования.
Virtual :
Author: fxsaber
Hi may I know the library work for mt4?
As while i importing the library, having some compilation error, thanks
Hi may I know the library work for mt4?
As while i importing the library, having some compilation error, thanks
It is MQL4-bug! Base thread is here.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
MT5 и скорость в боевом исполнении
fxsaber, 2021.03.01 12:19
Внедрение этого факта в Virtual способно ускорить его в реальном окружении.
Дорогой fxsaber,
Спасибо за вашу доброту. Этот инструмент очень полезен.
Существует ли версия MT4 этой программы?