Как получить данные о цене закрытия последней позиции по одному инструменту?
В МТ4 все просто было. Посмотрел по какой цене последний ордер закрылся, сравнил со стоплоссом. Если цена закрытия равна стопу или цена хуже стоплосса, то принимаем решение. А как это реализовать в МТ5?
- www.mql5.com
- www.mql5.com
да почитал, но там нашел только цену сделки, и не совсем понятно, как отследить последнюю сделку по заданному инструменту и сравнить ее цену со стоплоссом ?
Есть несколько способов как отследить сделку, по ее тикету или по индексу в списке сделок, для этого нужно запросить историю сделок с помощью функции HistorySelect, ну а дальше уже запрашивать соответствуещее свойство сделки.
в том то и дело, что у сделки нету стоплосса. Как узнать, закрылась позиция по стоплоссу (или хуже) или просто в минус ?
Выложите кусок кода плиз...
в том то и дело, что у сделки нету стоплосса. Как узнать, закрылась позиция по стоплоссу (или хуже) или просто в минус ?
Выложите кусок кода плиз...
Посмотрите комментарий к сделке, если указан стоплосс ( if (StringFind(str_comment,"sl")!=-1) ), значит закрылась по стоплоссу.
Вроде везде так.
bool b=0, s=0;
вот набросал, вообщем, если s=0 то запрет на продажу, если b=0 - запрет на покупку
но что-то не так, не срабатывает... Поправьте плииз , где ошибка ?
bool b=0, s=0;
вот набросал, вообщем, если s=0 то запрет на продажу, если b=0 - запрет на покупку
но что-то не так, не срабатывает... Поправьте плииз , где ошибка ?
Вы же анализируете закрытие позиции, а сами ее пропускаете в цикле и соответсвенно ищете в коменте входов ( DEAL_ENTRY_IN) " sl " :)) которого там и быть не может, если конечно сами при открытии не поставили такой комент!
if (HistoryDealGetInteger(ticket,DEAL_ENTRY)==DEAL_ENTRY_IN) continue;
Если Вас интересует закрытие только последней позиции, то и искать надо не с самого начала истории, а с конца, зачем же так удлинять цикл.
Вы же анализируете закрытие позиции, а сами ее пропускаете в цикле и соответсвенно ищете в коменте входов ( DEAL_ENTRY_IN) " sl " :)) которого там и быть не может, если конечно сами при открытии не поставили такой комент!
if (HistoryDealGetInteger(ticket,DEAL_ENTRY)==DEAL_ENTRY_IN) continue;
Если Вас интересует закрытие только последней позиции, то и искать надо не с самого начала истории, а с конца, зачем же так удлинять цикл.
1. На счет с конца это верно подмечено. Но тут как кому проще, да и все от алгоритма зависит.
В мультах, придется к примеру искать придется последнюю по определенному символу. Также неплохо найти последнюю по sl и tp.
2. На счет комментария "sl" - так если позиция (ордер) закрывается по sl или tp сервер сам прописывет следующее [tp/sl и цену].
Отсюда вывод:
а. чтобы отследить закрытие по sl нужно по необходимой паре найти последнюю сделку с комментарием [sl (а не sl) в левой части комментария. Цену в зависимости от алгоритма получаем по цене сделке либо из правой части комментария.
б. чтобы отследить закрытие по tp нужно по необходимой паре найти последнюю сделку с комментарием [tp (а не tp) в левой части комментария. Цену в зависимости от алгоритма получаем по цене сделке либо из правой части комментария.
3. На сколько я понимаю нужно так
//Вариант 1. проверяем тип сделки (вход или выход) if (HistoryDealGetInteger(ticket,DEAL_ENTRY)!=DEAL_ENTRY_OUT) continue; //Вариант 2. проверяем тип сделки (вход или выход) if (HistoryDealGetInteger(ticket,DEAL_ENTRY)!=DEAL_ENTRY_IN) continue;
4. А что должно возвращаться тут?
Print ("b=", b," s=",s); return;
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Как получить данные о цене закрытия последней позиции по одному инструменту?
В МТ4 все просто было. Посмотрел по какой цене последний ордер закрылся, сравнил со стоплоссом. Если цена закрытия равна стопу или цена хуже стоплосса, то принимаем решение. А как это реализовать в МТ5?