Важно для тех, кто использует снепшоты и другие очень специфические техники торговли.
Советники обычно работают с каким-то своим мэджиком. Механизм определения свой-чужой постоянно задействован. В логике идет подсчет своих ордеров и т.д.
Ниже на примере покажу одно из преимуществ работы через снепшоты.
// Демонстрация РЕШЕНИЯ открытия дубля позиции в MT5.// https://www.mql5.com/ru/forum/368178/page13#comment_22171524#property script_show_inputsinputint inMagic = 6723; // С каким мэджиком работаем#define MT4ORDERS_BYPASS_MAXTIME 1000000// Максимальное время (в мкс.) на ожидание синхронизации торгового окружения#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006#define VIRTUAL_SNAPSHOT_REFRESHTIME 1000// Время жизни снепшота для обновления. В MT5 требует подключенной MT4Orders.mqh#define VIRTUAL_SNAPSHOT_WITHOUT_HISTORY // Отказ от снепшота истории для повышения производительности#include <fxsaber\Virtual\Virtual.mqh>
#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)
#define MinLot SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN)
voidOnStart()
{
MT4ORDERS::OrderSend_MaxPause = 0; // Отказываемся от встроенной коррекции результата MT5-OrderSend.
VIRTUAL::Snapshot(VIRTUAL_SNAPSHOT_REFRESHTIME, inMagic);// В снепшот попадут только данные с inMagic-мэджиком.while (!IsStopped() && OrdersTotal() <= 1)
{
if (!OrdersTotal())
OrderSend(_Symbol, OP_BUY, MinLot, Ask, 0, 0, 0, NULL, inMagic);
elseif (OrderSelect(0, SELECT_BY_POS))
OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0);
VIRTUAL::Snapshot(VIRTUAL_SNAPSHOT_REFRESHTIME, inMagic); // В снепшот попадут только данные с inMagic-мэджиком.
}
Print(MT4ORDERS::ByPass.ToString()); // Распечатываем статистику синхронизаций.
}
Вся торговая логика - это пять строк while-цикла. Как видите, в нем нет никаких проверок на свой-чужой. Однако, все будет работать правильно даже при наличии ордеров с другими мэджиками.
Такой механизм позволяет писать советники со значительно более простым кодом. Более того, производительность кода не будет падать при параллельном навешивании нескольких торговых советников.
Например, навесил вышеприведенный скрипт на два EURAUD-чарта с разными мэджиками.
думаю, что нужен еще вариант сохранения по хэндлу открытого файла, тогда появится возможность в один файл сохранить и настройки и время и ... и Virtual, думаю это полезно
думаю, что нужен еще вариант сохранения по хэндлу открытого файла, тогда появится возможность в один файл сохранить и настройки и время и ... и Virtual, думаю это полезно
спасибо!
Выше написал, что можно в массив сохранить или загрузиться из него. А его уже любым способом использовать.
Там есть некоторая проблема в виде того, что MqlTick имеет разный sizeof для MT4/5. Поэтому при сохранении в файл тик приходится писать в самый его конец.
Там есть некоторая проблема в виде того, что MqlTick имеет разный sizeof для MT4/5. Поэтому при сохранении в файл тик приходится писать в самый его конец.
но ведь у открытого файла по его хендлу доступно положение файлового указателя? - пиши что хочешь в любой последовательности
хотя не суть, меня устраивает, сохранения состояния виртуального окружения мне не хватало, теперь очень круто!
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: MT4Orders
fxsaber, 2021.05.14 22:10
Важно для тех, кто использует снепшоты и другие очень специфические техники торговли.
Советники обычно работают с каким-то своим мэджиком. Механизм определения свой-чужой постоянно задействован. В логике идет подсчет своих ордеров и т.д.
Ниже на примере покажу одно из преимуществ работы через снепшоты.
Вся торговая логика - это пять строк while-цикла. Как видите, в нем нет никаких проверок на свой-чужой. Однако, все будет работать правильно даже при наличии ордеров с другими мэджиками.
Такой механизм позволяет писать советники со значительно более простым кодом. Более того, производительность кода не будет падать при параллельном навешивании нескольких торговых советников.
Например, навесил вышеприведенный скрипт на два EURAUD-чарта с разными мэджиками.
Никто никому не мешал, отработка идеальная.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: Virtual
fxsaber, 2021.09.30 15:03
Автоматически не сохраняются, конечно. Но и для ручных манипуляций пока не написаны VIRTUAL::Save/Load.
Пример использования.
Сохранение.
Загрузка.
По аналогии сделано сохранение/загрузка виртуального окружения в массив, чтобы его можно было передавать. Например, через ресурсы.
ЗЫ SELECT_BY_TICKET подправил.
думаю, что нужен еще вариант сохранения по хэндлу открытого файла, тогда появится возможность в один файл сохранить и настройки и время и ... и Virtual, думаю это полезно
спасибо!
думаю, что нужен еще вариант сохранения по хэндлу открытого файла, тогда появится возможность в один файл сохранить и настройки и время и ... и Virtual, думаю это полезно
спасибо!
Выше написал, что можно в массив сохранить или загрузиться из него. А его уже любым способом использовать.
Там есть некоторая проблема в виде того, что MqlTick имеет разный sizeof для MT4/5. Поэтому при сохранении в файл тик приходится писать в самый его конец.
Для массива - аналогично.
Там есть некоторая проблема в виде того, что MqlTick имеет разный sizeof для MT4/5. Поэтому при сохранении в файл тик приходится писать в самый его конец.
но ведь у открытого файла по его хендлу доступно положение файлового указателя? - пиши что хочешь в любой последовательности
хотя не суть, меня устраивает, сохранения состояния виртуального окружения мне не хватало, теперь очень круто!
сохранения состояния виртуального окружения мне не хватало
До сих пор ни разу не столкнулся с такой необходимостью. Видимо, сценарии использования иные.
А вот со свопами была необходимость исследований, поэтому есть такое.
VIRTUAL::CalcSwaps(); // Расчет свопов.VIRTUAL::Create("Virtual.bin")Когда стартуем первый раз этого файла нету, Load возвращает false. Create возвращает -1 и в памяти остается объект ORDERS
Может лучше не проверять Load , а просто есть файл - загрузили, нету - работаем с нуля?
но ведь у открытого файла по его хендлу доступно положение файлового указателя? - пиши что хочешь в любой последовательности
Добавлена работа с файловыми хендлами. MqlTick-несоответствие обошел.
Когда стартуем первый раз этого файла нету, Load возвращает false. Create возвращает -1 и в памяти остается объект ORDERS
Спасибо, исправил.
Может лучше не проверять Load , а просто есть файл - загрузили, нету - работаем с нуля?
VIRTUAL::Load, вроде, так и работает.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: TypeToBytes
fxsaber, 2021.10.31 19:34
Обновлен. Обходит найденную особенность. Ранее могло негативно сказываться на _ArrayCopy и CONTAINER.
Рекомендую обновить TypeToBytes.mqh, если в Virtual идет работа с сохранением окружения в массив.
Благодарю @Andrey Khatimlianskii за баг-репорт.