Сделка является отражением факта совершения торговой операции на основании ордера, содержащего торговый приказ. Каждая сделка описывается свойствами, позволяющими получить информацию о ней. Для чтения значений свойств используются функции вида Идентификатор позиции, в открытии, изменении или закрытии которой участвовала эта сделка. Каждая...
Aleksei Beliakov: Подключить библиотеку fxsibera mt4orders
это давно уже сделано и работает, пишу ж - осталось оценить скорость работы да разобраться с ордерной системой МТ5 - в тестере нужно. чтоб летало... хотя и так летает, но совершенству..
Lazar Buga:
знаю, видел и читал в справке, но этот вариант сложнее - нужно знать тикеты сделок и хранить время когда ЕА начал выставлять первые ордера - чтобы не перебирать всю историю
с магиками в тестере не работаю - опять же перебор всех позиций - зачем? использую тикет - код же для тестера
с тикетами позиции проще - на хэдже его можно получить получив тикет ордера открывшего позицию
нужен код для тестера... максимально быстро=работающий код, для хэдж-счетов
с открытием позиции (с помощью справки), разобрался - открывает и возвращает тикет позиции, с закрытием (как отложенных ордеров, так и позиции) - тоже проблем нет
одна не решенная проблема - первый пост
тогда может твой код сделать чуть наоборот, если нет частичных закрытий то это должно быть макс.быстро.
if(PositionSelectByTicket(pos_ticket)) // если позиция открыта
{
profit+=PositionGetDouble(POSITION_PROFIT);
}
elseif(HistorySelectByPosition(pos_id)) // если позиция закрыта ищет сделки в истории
{
for(int i = HistoryDealsTotal() - 1; i >= 0; i--)
{
ulong ticket = HistoryDealGetTicket(i);
if(HistoryDealGetInteger(ticket, DEAL_TYPE) == DEAL_ENTRY_OUT) profit += HistoryDealGetDouble(ticket, DEAL_PROFIT);
}
}
else { Print("Err : ", GetLastError());
return;}
торговых функций, по сути нет, только OrderProfit() и OrderCloseTime() с выбором ордера по тикету: OrderSelect() ,
с открытием ордеров проблем нет
нужен код для тестера для хэдж счетов
да! забыл, в МТ4-style совершенно не важно для OrderProfit(0 - рыночный или отложенный ордер, в МТ5-ордерной системе придется немного алгоритм изменить... но пока задача из первого сообщения - переписать 3 строки кода
Aleksey Mavrin:
тогда может твой код сделать чуть наоборот, если нет частичных закрытий то это должно быть макс.быстро.
я писал код после твоего сообщения - 2 пост в топике, написал исходя из знаний по справке MQL5 , пока ничего не могу сказать
Так вот проверь мой последний вариант, если не ошибаюсь и
возвращает false когда позиция уже закрыта, то все твои задачи из 1-го поста решены
спс
протестирую утром - тут еще нужно разобраться, что лучше работает выбор позиции по тикету или все таки перебором в цикле всех открытых позиций...может @fxsaber подскажет, с тестером он много тонкостей знает
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Подключить библиотеку fxsibera mt4orders
это давно уже сделано и работает, пишу ж - осталось оценить скорость работы да разобраться с ордерной системой МТ5 - в тестере нужно. чтоб летало... хотя и так летает, но совершенству..
знаю, видел и читал в справке, но этот вариант сложнее - нужно знать тикеты сделок и хранить время когда ЕА начал выставлять первые ордера - чтобы не перебирать всю историю
с магиками в тестере не работаю - опять же перебор всех позиций - зачем? использую тикет - код же для тестера
с тикетами позиции проще - на хэдже его можно получить получив тикет ордера открывшего позицию
Если имеется несколько позиций одновременно, то будут неизбежно тормоза, потому что такова архитектура Тестера.
Приведите MT4-style код тестового советника (не того, что окончательно нужно ускорить), который нужно ускорить.
нужен код для тестера... максимально быстро=работающий код, для хэдж-счетов
с открытием позиции (с помощью справки), разобрался - открывает и возвращает тикет позиции, с закрытием (как отложенных ордеров, так и позиции) - тоже проблем нет
одна не решенная проблема - первый пост
тогда может твой код сделать чуть наоборот, если нет частичных закрытий то это должно быть макс.быстро.
Если имеется несколько позиций одновременно, то будут неизбежно тормоза, потому что такова архитектура Тестера.
Приведите MT4-style код тестового советника (не того, что окончательно нужно ускорить), который нужно ускорить.
код выше приводил, вот еще раз
торговых функций, по сути нет, только OrderProfit() и OrderCloseTime() с выбором ордера по тикету: OrderSelect() ,
с открытием ордеров проблем нет
нужен код для тестера для хэдж счетов
да! забыл, в МТ4-style совершенно не важно для OrderProfit(0 - рыночный или отложенный ордер, в МТ5-ордерной системе придется немного алгоритм изменить... но пока задача из первого сообщения - переписать 3 строки кода
тогда может твой код сделать чуть наоборот, если нет частичных закрытий то это должно быть макс.быстро.
код выше приводил
Нужен код советника, а не функции.
Нужен код советника, а не функции.
брошу в ЛС, но код рабочий вариант, много правок было, хотя структуру кода должны понять
- тестирую возможности ордерных систем, пусть сетки ордеров, в целом закончил, следующий этап "Алгоритм Ванга — Ландау"
я писал код после твоего сообщения - 2 пост в топике, написал исходя из знаний по справке MQL5 , пока ничего не могу сказатьТак вот проверь мой последний вариант, если не ошибаюсь и
PositionSelectByTicketвозвращает false когда позиция уже закрыта, то все твои задачи из 1-го поста решены
Так вот проверь мой последний вариант, если не ошибаюсь и
возвращает false когда позиция уже закрыта, то все твои задачи из 1-го поста решены
спс
протестирую утром - тут еще нужно разобраться, что лучше работает выбор позиции по тикету или все таки перебором в цикле всех открытых позиций...может @fxsaber подскажет, с тестером он много тонкостей знает
собственно сабж:
если по шагам, то такие вопросы:
1. как узнать, что ранее открытая позиция уже закрылась?
2. как зная POSITION_TICKET или POSITION_IDENTIFIER максимально простым способом узнать прибыль позиции по закрытии?
PS: интересует реализация для тестера (максимально простой и быстрый код), варианты с OnTradeTransaction пока не хочу использовать
когда позиция открыта, все работает - вопросов, пока не возникло , только не решил только проблемы вопросов 1 и 2
UPD: нужна реализация (код) для хэдж-счета
ранее открытая...
я в 5-рке по тому же принципу как и в 4-рке обычным перебором анализирую и не парюсь никакими библиотЭками
for(pos=PositionsTotal()-1; pos>=0; pos--)
{
order_ticket=PositionGetTicket(pos); // тикет ордера
if(PositionGetString(POSITION_SYMBOL)==Symbol() && PositionGetInteger(POSITION_MAGIC)==MN)//
{
profitOr=PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_COMMISSION)+PositionGetDouble(POSITION_SWAP);
lotOr=NormalizeDouble(PositionGetDouble(POSITION_VOLUME),LS);
priceOr=NormalizeDouble(PositionGetDouble(POSITION_PRICE_OPEN),DGT);
tktOr=order_ticket;
myPipsPr=profitOr/(ltTV*lotOr);
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
{
....