![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
- зачем в MultiTick( void ) каждый раз создавать массив Ticks[], может где-то 1 раз его создать и потом использовать?
Он static. Надо будет сделать полем.
- в CalcOrders( void ) не очень понял что она делает... похоже что при изменении истории, коприрует все ордера по всем символам в один OrdersCounter[].
При изменении количества живых ордеров по одному из символов.
- в int CorrectTicksTime( MqlTick &Ticks[] ){
const int Amount = ::MathMin(this.Size, ::ArraySize(Ticks));
размер Ticks вроде бы такой же как this.Size, ниже есть ArrayResize(Ticks, this.Size)
Нужно для перегрузки у MultiTicks-метода.
- CorrectTicksTime нужен, чтобы всем инструментам присвоить самое последнее время. Если передаем тики с индикаторов, то можно только его одного пересчитывать (см выше) или его время присвоить всем инстр. Если работаем по тикам основного, то можно без поиска старшего присвоить время тика всем инструментам.
Первый вариант еще буду править.
По идее:
как я понял, для каждого символа делается свой new ORDERS и все расчеты идут в своих массивах. С одной стороны удобно смотреть баланс по конкретному инструменту.
Но обычно мультивалютник на одном балансе работает. Как потом сделать общий отчет, общий баланс? Видимо и итоговых отчетов через Report.mqh надо несколько делать?
Если исправят тестер MQ к одинаковому поведению, то будет точно совпадать со всеми инструментами.
Вроде, сейчас не должен совпадать, если, например, торговать AUDJPY на USD-счете. Т.к. Тестер на каждом тике пересчитывает TickValue.
Вроде, сейчас не должен совпадать, если, например, торговать AUDJPY на USD-счете. Т.к. Тестер на каждом тике пересчитывает TickValue.
Этот символ не пробовал, но в B4093 ситуация с свопами в конце теста по прежнему разная, в каких то добавляет, в каких то нет.
![](https://c.mql5.com/3/424/22__1.gif)
Вот по GBPCHF счет в EUR свопы добавились. Как видите общая сумма до их начисления абсолютно такая же и в MQ тестере и в вашем после пересчета в цену счета.
GIF-ка
В общем удалось подобрать алгоритмы перевода цен, комиссий, свопов в цену аккаунта. Но еще не все пары проверил, вчера на GBPUSD EUR появилась ошибка по комиссии, пришлось править код. Проверил все кобинации GBP CHF USD EUR к счетам GBP CHF USD EUR
По свопам - они всегда считаются по последним ценам до ролловера.
В коде https://www.mql5.com/ru/forum/282062/page51#comment_51013502 в вызов
заменил на
newSwap *= K_SWAP_TO_ACC ( this.Orders[i].GetType(), LastTickAsk_, LastTickBid_, Day, RolloverTime_ );
А он при смене дня считает цены до ролловера. Пока пользуюсь такой функцией https://www.mql5.com/ru/forum/455977/page30#comment_51050354 , надеюсь разработчики сделают запрос побыстрее и одной строкой.
Если будете делать себе пересчет в валюту аккаунта - пишите - скину. Запарка не несколько дней оказалась. Да и то, не все пары еще проверил. С вашим опытом может побыстрее сделаете или даже где-то есть готовый код. Мне пришлось тупо перебирать варианты... как видно со скриншота, пока что все точно.Реализация довольно простая. SymbolID не понадобился. Критика приветствуется.
Взялся дописывать, и вижу, что может быть несколько архитектур мультивалютника. Видимо, придется делать и другую архитектуру, а затем сравнивать между собой.
Поэтому нужен хороший мультивалютный советник для сравнения. Идеи такого советника приветствуются.
Выглядит, как самойбийство такая конструкция на каждом тике в мультивалютном советнике.
Такой MT4-style подход можно было оправдать в MT4-тестере, т.к. тот моновалютный. Но в MT5-тестере - ужас писать подобное.
Целесообразно так.
Но этого нет и не будет в MT4-style. Поэтому, чтобы не самоубиваться, видится правильным писать хотя бы так.
Взялся дописывать, и вижу, что может быть несколько архитектур мультивалютника. Видимо, придется делать и другую архитектуру, а затем сравнивать между собой.
Поэтому нужен хороший мультивалютный советник для сравнения. Идеи такого советника приветствуются.
Да наверное сюда же https://www.mql5.com/ru/forum/282062/page46#comment_50705106
можно 10 символов на Бай и 10 на Селл добавить по номерам от 1 до 10. Или расширить до всех 28 вариантов мажоров.
GIF-ка
Явная ошибка либо в Virtual, либо в Report.
Что касается,
Этот символ не пробовал
Точного совпадение быть не может. И пересчитывать TickValue - это еще одно самоубийство.
Явная ошибка либо в Virtual, либо в Report.
Ошибка в MQ тестере - это он добавил свопы в конце теста, а не должен.
И пересчитывать TickValue
Не считаю через него, не все пары совпали. Может у вас получится... Считаю по другому, но тоже долго.
Код подходит только для пересчета профита в валюту аккаунта (свопам и комиссиям не подойдет)
Строки ACC_PROFIT, PROFIT_ACC заранее собрал и пометил из bool-ами is_PROFIT_ACC, is_ACC_PROFIT, что они существуют.
Строки ACC_PROFIT, PROFIT_ACC заранее собрал и пометил из bool-ами is_PROFIT_ACC, is_ACC_PROFIT, что они существуют.
не все пары совпали.
Остальное дописать - рутина, т.к. архитектурно все решилось.
https://www.mql5.com/ru/blogs/post/755348