int start()
{
//----
int total=OrdersTotal();
bool buy=false;
bool sell=false;
//ВОТ ЧАСТЬ КОДА которой надо приклеить тот ордер который будет открыт что бы его закрыть в случае если сделка которая открывается одновремено с ним закрылать по ТП
for(int i = OrdersTotal()-1;i>=0; i--)}
Мне просто нужен флаг на то что сделка закрылась с прибылью
Вы показали не то, что я попросил. Жаль. Я хотел, чтоб Вы осознали алгоритм для осуществления своей затеи. Ваша проблема в том, что у Вас ни в голове, ни на бумаге такого алгоритма нет. Вот поэтому Вы и не знаете, какой нужно делать код. Я могу сформулировать этот алгоритм вместо Вас, но проку от этого будет не много. Если бы Вы попытались рассуждать тут вместе со мной, то пользы было бы гораздо больше. Давайте попробуем, скажем, вот так:
Итак, раз ордер закрыт в профите, то значит он уже в истории ордеров. Поэтому, чтоб понять, закрылся ли на самом деле последний ордер с профитом, или с убытком, мы должна найти последний закрытый ордер типа Buy или Sell и посмотреть его профит. Разумеется, раз это ПОСЛЕДНИЙ закрытый ордер, то время закрытия у него будет самое большое - все остальные ордера истории имеют время закрытия меньше, чем у последнего. Значит, время закрытия ордера - это признак, по которому мы можем найти последний закрытый ордер. Итак, мы его нашли. Функция языка OrderProfit() позволяет узнать, какой именно профит был у нашего ордера. Далее перед нами 3 сценария:
- Ордер закрыт с убытком
- Ордер закрыт по нулям
- Ордер закрыт с прибылью.
Первую часть алгоритма я Вам рассказал, попробуйте самостоятельно сформулировать вторую - как будете обрабатывать реакцию советника на эти три события?
Там неважно с убытком или в ноль...только ТП
Выбрать последний ордер в истории
OrderSelect (0, SELECT_BY_POS, MODE_HITSTORY)
Взять оттуда тейк профит
ordertakeprofit()
Взять цену закрытия
ordercloseprice()
Сравнить
If ( ordertakeprofit()=ordercloseprice())
Тогда запускаем шарманку
и перебираем все ордера
for(int i = OrdersTotal()-1;i>=0; i--)
if (OrderType()>1)
OrderDelete(OrderTicket());
}
Время открытия у этого ордера будет самым большим среди прочих отложенных ордеров.
P.S.
Это ответ на вопрос, который Вы только что стёрли - как узнать тикет последней отложки.
а смысл я стер потому что понял что итерация сама там все узнает
Не получается чтото я не то написал...как указать последний ордер из истории ? по позиции не получается всеравно if не запускает for значит вот ета борода
OrderSelect (0, SELECT_BY_POS, MODE_HISTORY) ;
if ( OrderTakeProfit()==OrderClosePrice())
не правильная
В цикле тут должен стоять номер ордера в списке ордеров - он содержится в переменной счётчика цикла. В Вашем же случае Вы всегда обращаетесь только к одному номеру (который стоит на нулевой строке списка) и игнорируете все прочие ордера.
Блин я так и не могу понять в mql все начинается с 0 или 1...в истории идет я так понял с 1 а если чтото только формируется то 0 типо нулевой бар да?
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Нужно както по условию что получили тейк профит закрыть отложки
ДОПУСТИМ:
Открыл BUY ;
Получил профит;
Закрыть все отложенные ордера;