- Проверка минимального стопа в советниках, публикуемых в маркете.
- Видеоуроки по программированию на MQL5
- Как проверить, выбран ли ордер
Не понятно, что Вам нужно. Для учета открытых ордеров есть функция 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+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования