Дело в том, что нужно текущий спред для тестинга по OHLC сделать таким, каким он и должен быть, причем, независимо от "рабочего" ТФ. Пока думаю, что проще всего не заморачиваться с тиками, а скопировать рейты и по очереди в них пересчитать макс спред перебором входящих в них тиков...
Именно такая функция мне и нужна была, собственно, и больше ничего.
В исходниках, что по ссылкам, на вход подаются только тики, а на выходе имеете кастомный символ, у которого правильно сформированы бары из этих тиков и сама тиковая история.
ТФ в MT5 только один - M1. Так что никакой там зависимости от ТФ быть не может.
На Netting позиция всегда имеет только один TP. Поэтому, в частности, сеточные ТС, у которых каждой ордер в сетке имеет свой TP не будет работать, как задумывалось.
Ниже пример, как это обходится
// Пример Netting с поддержкой множества однонаправленных позиций (у каждой могут быть свои Magic, SL/TP, Comment, OpenTime и т.д.).// Запустите этот пример на Netting-счете в Тестере с влюченной Визуализацией.#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006#define VIRTUAL_LIMITS_TP_SLIPPAGE // Лимитники и TP исполняются по первой цене акцепта - положительные проскальзывания#include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/ru/code/22577#include <fxsaber\Virtual\Sync.mqh> // Синхронизатор#define AskSymbolInfoDouble(_Symbol, SYMBOL_ASK)
inputint iAmount = 5; // Количество ордеров в сеткеinputint iOffset = 120; // На каком расстоянии (в пипсах) ставить ордера сеткиinputint iTP = 120; // TakeProfit каждого ордера сетки// Выставляем один раз сетку из Amount ордеров на Offset-расстоянии друг от друга с заданным TP.void System( constint Amount, constint Offset, constint TP )
{
staticbool FirstRun = true;
if (FirstRun)
{
for (int i = 1; i <= Amount; i++)
{
constdouble PriceOpen = Ask - i * Offset * _Point;
constdouble PriceTP = PriceOpen + TP * _Point;
OrderSend(_Symbol, OP_BUYLIMIT, 1, PriceOpen, 0, 0, PriceTP, (string)i); // Выставляем каждый ордер сетки
}
FirstRun = false;
}
}
voidOnTick()
{
staticconstbool Init = VIRTUAL::Select(VIRTUAL::Create()); // Система будет работать в этом виртуальном окруженииstaticconstbool IsVisual = MQLInfoInteger(MQL_VISUAL_MODE);
staticbool FirstRun = true;
VIRTUAL::NewTick(); // Добавили тик в виртуальное торговое окружение
System(iAmount, iOffset, iTP); // Запустили ТС на выбранном торговом окружении (виртуальное)
SYNC::Positions<ISTIME>(); // Синхронизировли реальное торговое окружение с виртуальнымif (IsVisual)
Comment(VIRTUAL::ToString(true)); // Вывели на чарт состояние виртуального торгового окружения (true - вместе с историей торгов)
}
Идея простейшая. Запустили ТС в виртуальном, а в реальном просто синхронизируем. Исходник ТС менять не нужно (функция System в примере).
ЗЫ Точно так же на той же Бирже можно уменьшить количество реальных торговых приказов, чтобы не превышать лимит на них.
Только сейчас понял, что имелось в виду в этом предложении. Нужно было, чтобы на неттинг-счете работала хеджевая ТС.
Это, конечно, работает без проблем.
На Netting позиция всегда имеет только один TP. Поэтому, в частности, сеточные ТС, у которых каждой ордер в сетке имеет свой TP не будет работать, как задумывалось.
Вы очень близки к правильному решению.
Но пробовать скачивать и запускать пример второй раз не хочется.
Не люблю размазывать простого советника по всему компьютеру с кучей непонятных инклудов.
По моему одного инклуда достаточно, чтобы оставаться в рамках вашей МТ4 логики и работать на МТ5.
Про индикаторы вообще уже не говорю, знаю вы их не любите.
Дело не в кастомных, они - лишь инструмент
Дело в том, что нужно текущий спред для тестинга по OHLC сделать таким, каким он и должен быть, причем, независимо от "рабочего" ТФ. Пока думаю, что проще всего не заморачиваться с тиками, а скопировать рейты и по очереди в них пересчитать макс спред перебором входящих в них тиков...
Именно такая функция мне и нужна была, собственно, и больше ничего.В исходниках, что по ссылкам, на вход подаются только тики, а на выходе имеете кастомный символ, у которого правильно сформированы бары из этих тиков и сама тиковая история.
ТФ в MT5 только один - M1. Так что никакой там зависимости от ТФ быть не может.
В общем как-то вот так (вроде работает, и быстро. Хотя не отлаживал - подустал уже ))
Из-за того, что в Тестере в большинстве режимов цены могут быть ненормализованы, результаты Virtual могут отличаться от Тестера.
В Virtual идет расчет на то, что цена символа нормализована, отсюда удается избежать замедления, которое прописано в Тестере.
Кому нужен в MT5 Тестер ручной торговли, простая идея.
Создаете панельку скорости, как у Визуализатора. Эта панелька вначале создает кастомный символ, куда пробрасывает тики для Теста.
Это и есть Визуализатор! На него, как и в MT4, можете вешать индикаторы и.. "торговать" вручную.
Единственное, что торовля будет видна не во вкладках Терминала, а в своей кастомной вкладке.
Virtual все это умеет изначально, только визуализация не сделана.
Реализация этой идеи выложена в КБ.
Реализация этой идеи выложена в КБ.
А картинку с анимацией приложить? ;-)
А картинку с анимацией приложить? ;-)
Тоже ужаснулся, когда увидел их размер.
Тоже ужаснулся, когда увидел их размер.
Что-то не увидел ручной торговли.
Размер зависит от софта, попробуйте LiceCap.
Что-то не увидел ручной торговли.
В КБ анимашка.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: Virtual
Sergey Chalyshev, 2018.10.07 00:21
Ваша MT4-Style логика на нетто счетах не работает.
Только сейчас понял, что имелось в виду в этом предложении. Нужно было, чтобы на неттинг-счете работала хеджевая ТС.
Это, конечно, работает без проблем.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: Virtual
fxsaber, 2018.11.15 17:16
На Netting позиция всегда имеет только один TP. Поэтому, в частности, сеточные ТС, у которых каждой ордер в сетке имеет свой TP не будет работать, как задумывалось.
Ниже пример, как это обходится
Идея простейшая. Запустили ТС в виртуальном, а в реальном просто синхронизируем. Исходник ТС менять не нужно (функция System в примере).
ЗЫ Точно так же на той же Бирже можно уменьшить количество реальных торговых приказов, чтобы не превышать лимит на них.
Только сейчас понял, что имелось в виду в этом предложении. Нужно было, чтобы на неттинг-счете работала хеджевая ТС.
Это, конечно, работает без проблем.
Вы очень близки к правильному решению.
Но пробовать скачивать и запускать пример второй раз не хочется.
Не люблю размазывать простого советника по всему компьютеру с кучей непонятных инклудов.
По моему одного инклуда достаточно, чтобы оставаться в рамках вашей МТ4 логики и работать на МТ5.
Про индикаторы вообще уже не говорю, знаю вы их не любите.