- Торговая платформа MetaTrader 5 для брокеров и банков
- Возможности веб-версии - MetaTrader 5
- Скачайте мобильное приложение MetaTrader 5 для Android
Не понятно, что Вам нужно. Для учета открытых ордеров есть функция OrdersTotal().
Что за тип счета - Net?
PS: Наиболее надежный метод учета ордеров (их параметров) - это полный перебор ордеров. Вопрос в том, как часто Вам это требуется? Если на каждом тике и количество ордеров будет большим, то это будет накладно для всего алгоритма. Нужно более четкая постановка задачи.
Функции OrdersTotal, в данном вопросе, к сожалению, не подразумевается. Ее банально нет. Есть сервер и приходящие события от него.
Net = неттинговый, а-ля МТ5.
Полный преребор, думаю, не подойдет по причине того, что хранить в переменной все-же быстрее. Т.к. при наступлении события в "статусе ордеров" можно моментально изменить ее значение и моментально выполнить следующее действие.
Подразумевается высокочастотный алгоритм.
Еще один нюанс - времнной лаг. Т.е. наступает событие отправки ордера. Ордер отправлен - это нужно где-то фиксировать (опять же, на помощь приходит все та-же переменная). Иначе, т.к. до прихода события в "статусе ордеров - new" от сервера проходит достаточное время (несколько мс (иногда, десятков)), что-бы алгоритм отправил зацикленное кол-во ордеров.
... Вопрос в том, как часто Вам это требуется? ....
Полный преребор, думаю, не подойдет по причине того, что хранить в переменной все-же быстрее. Т.к. при наступлении события в "статусе ордеров" можно моментально изменить ее значение и моментально выполнить следующее действие.
Подразумевается высокочастотный алгоритм.
Пока нет статистики работы с контейнером говорить не о чем.
Надо процентное соотношение операций -- вставка\удаление, поиск.
Пока нет статистики работы с контейнером говорить не о чем.
Надо процентное соотношение операций -- вставка\удаление, поиск.
Алгритм простой в плане ММ. Работа ведется с одним ордером, т.е. по инструменту может быть только один ордер (позиция).
Поэтому, требуется работа только с крайним ордером в инструменте.
Что значит "состояние" ордера? Что значит "calculated"?
И далее:
...
Алгритм простой в плане ММ. Работа ведется с одним ордером, т.е. по инструменту может быть только один ордер (позиция).
...
Учет чего? Списка ордеров? Но ордер в вашей системе только один: это некий ордер-позиция. Может быть учет состояния ордера? Но это другая задача.
Извините, но формулировки очень сырые и плохо проработаны. Попробуйте сформулировать более конкретно и доступно.
Спасибо за уточняющие вопросы. Действительно, несколько размыто изложил.
Что значит "состояние" ордера? Что значит "calculated"?
Ни для кого не секрет, что отправленный ордер не обязательно будет исполнен. У него есть свой путь жизни, который выражается в состояниях. Допустим new-->calculated-->filled
Достаточно подробно изложено на этой схеме:
И далее:
Учет чего? Списка ордеров? Но ордер в вашей системе только один: это некий ордер-позиция. Может быть учет состояния ордера? Но это другая задача.
Извините, но формулировки очень сырые и плохо проработаны. Попробуйте сформулировать более конкретно и доступно.
Да, ордер при filled превращается (либо добавляется) в позицию.
Вначале я писал "учет открытых ордеров" - это несколько размыто. Задача, в конечном приближении, состоит в том, что-бы отследить весь путь жизни ордера по, допустим, одной паре до состояния filled включительно.
Понятнее ли так?
Вначале я писал "учет открытых ордеров" - это несколько размыто. Задача, в конечном приближении, состоит в том, что-бы отследить весь путь жизни ордера по, допустим, одной паре до состояния filled включительно.
Понятнее ли так?
Да, так понятнее. Но специфика от конкретной площадки зависит ну и конечно от конкретного терминала/библиотеки. Рассуждать об абстрактном интерфейсе взаимодействия с абстрактной торговой площадкой непродуктивно.
У меня сделан класс по учету ордеров, делал, в первую очередь, для разработки стратегий на матлабе. Написан на C#, для хранения ордеров использую класс, приведенный ниже. Экземпляры класса управляются другим классом, который хранит эти экземпляры (по сути ордера) в Hashtable, ключ таблицы - номер ордер. Можно вообще было обойтись структурой, это я с запасом на будущее сделал. Сделано по простому, для себя.
Hashtable удобны в обращении и работают шустро, у меня при тестировании образуются десятки тысяч ордеров. Пробовал заводить вторую таблицу для закрытых ордеров, чтобы уменьшить количество в рабочей таблице - ноль эффекта. Хеши рулят ))
namespace MatlabLibrary { public class AvMatlabOrder { public int Ticket; public string OrdSymbol; public int Magic; public int Cmd; public double OpenTime; public double OpenPrice; public double Lot; public double Stoploss; public double TakeProfit; public double CloseTime; public double ClosePrice; public double ProfitPoint; // в пунктах public double Profit; // в валюте депо public double ProfitFinal; // Profit - Swap - Comission public double Swap; public double Comission; public double Expiration; public string Comment; public uint Color; public AvMatlabOrder() { } public AvMatlabOrder(int ticket, string symbol, int cmd, double volume, double price, double openTime, int magic, double stoploss, double takeprofit, double expiration, string comment) { SetParameters(ticket, symbol, cmd, volume, price, openTime, magic, stoploss, takeprofit, expiration, comment); } void SetParameters(int ticket, string symbol, int cmd, double volume, double price, double openTime, int magic, double stoploss, double takeprofit, double expiration, string comment) { Ticket = ticket; OrdSymbol = symbol; Cmd = cmd; Lot = volume; OpenPrice = price; OpenTime = openTime; Magic = magic; Stoploss = stoploss; TakeProfit = takeprofit; Comment = comment; Expiration = expiration; //Color = arrow_uint; } } }
Да, так понятнее. Но специфика от конкретной площадки зависит ну и конечно от конкретного терминала/библиотеки. Рассуждать об абстрактном интерфейсе взаимодействия с абстрактной торговой площадкой непродуктивно.
Отчего же? Имея свой интерфейс зачастую проще построить мост к открытому (допустим, FIX) серверу, чем писать заново.
У меня сделан класс по учету ордеров, делал, в первую очередь, для разработки стратегий на матлабе. Написан на C#, для хранения ордеров использую класс, приведенный ниже. Экземпляры класса управляются другим классом, который хранит эти экземпляры (по сути ордера) в Hashtable, ключ таблицы - номер ордер. Можно вообще было обойтись структурой, это я с запасом на будущее сделал. Сделано по простому, для себя.
Hashtable удобны в обращении и работают шустро, у меня при тестировании образуются десятки тысяч ордеров. Пробовал заводить вторую таблицу для закрытых ордеров, чтобы уменьшить количество в рабочей таблице - ноль эффекта. Хеши рулят ))
Для ваших целей годно. В скорости и сложности реализации это не будет близко к идеалу для более простых задач.
Пока остаюсь при своем - записываю "на лету" в переменную.
Я думал надо много ордеров хранить.
Короче. Думаю без кода и конкретного описания никто кроме тебя здесь ничего путного не родит

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования