В четверке есть функция выбора закрытого ордера из списка закрытых ордеров
Функция OrderSelect() в данном случае выбирает ордер не по тикету ордера, а по его порядковому номеру в списке закрытых ордеров.
ВОПРОС
А как в пятерке выбрать ордер для дальнейшей работы с ним , и выбрать не по тикету, а по его порядковому номеру с списке закрытых ордеров( как в примере выше)? В пятерке все функции в названии которых есть Select выбирают закрытый ордер из списка закрытых ордеров только по тикету, а не по его порядковому номеру. Может быть в пятерке для этих целей служит какая то другая функция???? Буду очень рад, если напишете вышеприведенный код языком mql5
В поиске тут статья Ордера, позиции и сделки - там в конце статьи есть данные по истории ордеров.
Пример подобного алгоритма:
#property script_show_inputsinputlongmy_magic=999;
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
// --- определение границ требуемой торговой историиdatetime end=TimeCurrent(); // текущее серверное времяdatetime start=end-PeriodSeconds(PERIOD_D1);// установим начало на сутки назад
//--- запросим в кэш программы нужный интервал торговой историиHistorySelect(start,end);
//--- получим количество ордеров в историиint history_orders=HistoryOrdersTotal();
//--- теперь пробежим по всем ордерамfor(int i=0;i<history_orders;i++)
{
//--- получим тикет ордера по его номеру в спискеulong order_ticket=HistoryOrderGetTicket(i);
if(order_ticket>0) // получили в кэш исторический ордер, работаем с ним
{
//--- время исполненияdatetime time_done=HistoryOrderGetInteger(order_ticket,ORDER_TIME_DONE);
long order_magic =HistoryOrderGetInteger(order_ticket,ORDER_MAGIC);
long pos_ID =HistoryOrderGetInteger(order_ticket,ORDER_POSITION_ID);
if(order_magic==my_magic)
{
// обработаем позицию с заданным ORDER_MAGIC
}
PrintFormat("Ордер #%d: ORDER_MAGIC=#%d, time_done %s, ORDER_POSITION_ID=%d",
order_ticket,order_magic,TimeToString(time_done),pos_ID);
}
else// неудачная попытка получения ордера из истории
{
PrintFormat("Не удалось выбрать ордер с индексом %d. Ошибка %d",
i,GetLastError());
}
}
}
В поиске тут статья Ордера, позиции и сделки - там в конце статьи есть данные по истории ордеров.
Пример подобного алгоритма:
Спасибо большое за помощь. Мне нужно что бы при переборе ордеров в списке выбирались только ордера закрытые по тейкпрофиту, для дальнейшей работы с этими ордерами(закрытыми по ТП) . Как сфорпмулировать данное условие? Условие - если ордер закрылся по ТП. Какая функция в моем случае должна вернуть результат закрытия сделки + n пунктов , или - n пунктов? Еще раз спасибо за помощь.
ANDREY #: Спасибо большое за помощь. Мне нужно что бы при переборе ордеров в списке выбирались только ордера закрытые по тейкпрофиту, для дальнейшей работы с этими ордерами(закрытыми по ТП) . Как сфорпмулировать данное условие? Условие - если ордер закрылся по ТП. Какая функция в моем случае должна вернуть результат закрытия сделки + n пунктов , или - n пунктов? Еще раз спасибо за помощь.
for (int i = totalDeals - 1; i >= 0; i--) {
ulong dealTicket = HistoryDealGetTicket(i);
if (dealTicket > 0) {
if (HistoryDealGetInteger(dealTicket, DEAL_MAGIC) == MagicNumber &&
HistoryDealGetInteger(dealTicket, DEAL_ENTRY) == DEAL_ENTRY_OUT &&
HistoryDealGetInteger(dealTicket, DEAL_REASON) == DEAL_REASON_TP) {
.....
break;
}
}
}
ANDREY #: Спасибо большое за помощь. Мне нужно что бы при переборе ордеров в списке выбирались только ордера закрытые по тейкпрофиту, для дальнейшей работы с этими ордерами(закрытыми по ТП) . Как сфорпмулировать данное условие? Условие - если ордер закрылся по ТП. Какая функция в моем случае должна вернуть результат закрытия сделки + n пунктов , или - n пунктов? Еще раз спасибо за помощь.
тут постановка вопроса страдает - тут уже будут не закрытые ордера как в МТ4 трактовались, но закрытые позиции. Ордера могут быть выставлены, сработаны и удалены. Позиции - открыты и закрыты.
тут постановка вопроса страдает - тут уже будут не закрытые ордера как в МТ4 трактовались, но закрытые позиции. Ордера могут быть выставлены, сработаны и удалены. Позиции - открыты и закрыты.
Спасибо за помощь. Но я сам придумал конструкцию и она у меня получилась проще и короче. И делает то что мне нужно.
int hour = (int)(TimeCurrent() / 3600) % 24;// час if (hour!=Z)
{
Z=hour;
datetime end=TimeCurrent(); // текущее серверное времяdatetime start=end-3600;// установим начало на 0 часовHistorySelect(start,end);//--- загрузим в кэш программы нужный интервал торговой историиint history_orders=HistoryOrdersTotal();//--- получим количество ордеров в историиfor(int i=0;i<history_orders;i++)//--- теперь пробежим по всем ордерам
{
if (HistoryDealGetDouble(HistoryDealGetTicket(i),DEAL_PROFIT)>0)// если сделка закрылась по ТП.
Print("-----------------------------------------------HistorySelect-----Ticket " ,HistoryDealGetTicket(i)," === ПРОФИТ == ",DoubleToString(HistoryDealGetDouble(HistoryDealGetTicket(i),DEAL_PROFIT),5)," === КОЛ.ОРД В ИСТОРИИ ====. ",history_orders);
}
}
И еще я не совсем понимаю , в моем случае , вот что.... при переборе сделок по порядковым номерам, то есть по порядку, для чего нужно вычислять тикет каждой сделки? Ведь если сделка в историческом списке есть, значит она не может быть без тикета.
int hour = (int)(TimeCurrent() / 3600) % 24;// часif (hour!=Z)
{
Z=hour;
datetime end=TimeCurrent(); // текущее серверное времяdatetime start=end-3600;// установим начало на 0 часовHistorySelect(start,end);//--- загрузим в кэш программы нужный интервал торговой истории//}int history_orders=HistoryOrdersTotal();//--- получим количество ордеров в историиfor(int i=0;i<history_orders;i++)//--- теперь пробежим по всем ордерам
{
if (HistoryDealGetDouble(HistoryDealGetTicket(i),DEAL_PROFIT)>0)
X = HistoryDealGetInteger(HistoryDealGetTicket(i),DEAL_TIME);// ВРЕМЯ ЗАКРЫТИЯ СДЕЛКИ ПО ТП
Y = ????????? // ВРЕМЯ ОТКРЫТИЯ СДЕЛКИ КОТОРАЯ ЗАКРЫЛАСЬ ПО ТПPrint("------== ВР.ЗАКР. СДЕЛКИ ПО ТП ====. ", TimeToString(X,DEAL_TIME),TIME_DATE|TIME_SECONDS));
}
}
В коде 1 раз в час в списке сделок (сделки только сделки БАЙ) в истории выбираются только те которые закрылись по ТП( то есть сделкой СЕЛ)
После выбора сделки при помощи функции HistoryDealGetInteger(HistoryDealGetTicket(i),DEAL_TIME) вычисляется и сохраняется в переменную время закрытия этой сделки БАЙ (или ,что то же самое. время открытия сделки СЕЛ) ВОПРОС
А при помощи какой функции можно вычислить время открытия сделки БАЙ , которую закрыла сделка СЕЛ? Как мне кажется при помощи той же функции HistoryDealGetInteger(). Но какой идентификатор свойства сделки нужно указывать в этом случае? Я почему то такого идентификатора не нашел ни в одном перечислении идентификаторов свойств сделки. Как мне кажется что это будет сложносоставная функция, или вообще конструкция из нескольких строк. Буду очень признателен если напишете полностью этот код вычисляющий время открытия позиции .
В общем, у вас коде такой-же бардак, какой происходил всегда и до сих пор происходит - дурилка!
Вы путаете ордера и позиции. Нужно понимать, что Buy/Sell это не ордера, а позиции. Ордер не может быть закрыт - он может быть только удалён или перемещён, ордер не бывает ни прибыльным, ни убыточным.
Позицию нельзя удалить или переместить - только закрыть с прибылью или убытком.
--
P.S. Когда ГУРУ путаются и пишут что у них один ордер прибыльный, а другой убыточный = всегда хочется ответить, чтобы убыточный перенесли в прибыльную зону и закрыли оба.
Но так как у них это совершенно не ордер а позиция, а эти ГУРУ и об этом не знают, то перенести нельзя.
Всем доброго времени суток. Вопрос по mql5
В четверке есть функция выбора закрытого ордера из списка закрытых ордеров
Функция OrderSelect() в данном случае выбирает ордер не по тикету ордера, а по его порядковому номеру в списке закрытых ордеров.
ВОПРОС
А как в пятерке выбрать ордер для дальнейшей работы с ним , и выбрать не по тикету, а по его порядковому номеру с списке закрытых ордеров( как в примере выше)? В пятерке все функции в названии которых есть Select выбирают закрытый ордер из списка закрытых ордеров только по тикету, а не по его порядковому номеру. Может быть в пятерке для этих целей служит какая то другая функция????
Буду очень рад, если напишете вышеприведенный код языком mql5
Всем спасибо за помощь.
Пример подобного алгоритма:
В конце этой статьи смотрите. https://www.mql5.com/ru/forum/2900
Пример подобного алгоритма:
Еще раз спасибо за помощь.
Спасибо большое за помощь. Мне нужно что бы при переборе ордеров в списке выбирались только ордера закрытые по тейкпрофиту, для дальнейшей работы с этими ордерами(закрытыми по ТП) . Как сфорпмулировать данное условие? Условие - если ордер закрылся по ТП. Какая функция в моем случае должна вернуть результат закрытия сделки + n пунктов , или - n пунктов?
Еще раз спасибо за помощь.
да. Виталий - спасибо за помощь.... сам еще раз перечитал - освежил данные...
Спасибо большое за помощь. Мне нужно что бы при переборе ордеров в списке выбирались только ордера закрытые по тейкпрофиту, для дальнейшей работы с этими ордерами(закрытыми по ТП) . Как сфорпмулировать данное условие? Условие - если ордер закрылся по ТП. Какая функция в моем случае должна вернуть результат закрытия сделки + n пунктов , или - n пунктов?
Еще раз спасибо за помощь.
тут постановка вопроса страдает - тут уже будут не закрытые ордера как в МТ4 трактовались, но закрытые позиции. Ордера могут быть выставлены, сработаны и удалены. Позиции - открыты и закрыты.
тут постановка вопроса страдает - тут уже будут не закрытые ордера как в МТ4 трактовались, но закрытые позиции. Ордера могут быть выставлены, сработаны и удалены. Позиции - открыты и закрыты.
Спасибо за ценную информацию
И еще я не совсем понимаю , в моем случае , вот что.... при переборе сделок по порядковым номерам, то есть по порядку, для чего нужно вычислять тикет каждой сделки? Ведь если сделка в историческом списке есть, значит она не может быть без тикета.
Всем доброго времени суток. Вопрос по mql5
В коде 1 раз в час в списке сделок (сделки только сделки БАЙ) в истории выбираются только те которые закрылись по ТП( то есть сделкой СЕЛ)
После выбора сделки при помощи функции HistoryDealGetInteger(HistoryDealGetTicket(i),DEAL_TIME) вычисляется и сохраняется в переменную время закрытия этой сделки БАЙ (или ,что то же самое. время открытия сделки СЕЛ)
ВОПРОС
А при помощи какой функции можно вычислить время открытия сделки БАЙ , которую закрыла сделка СЕЛ? Как мне кажется при помощи той же функции HistoryDealGetInteger(). Но какой идентификатор свойства сделки нужно указывать в этом случае? Я почему то такого идентификатора не нашел ни в одном перечислении идентификаторов свойств сделки. Как мне кажется что это будет сложносоставная функция, или вообще конструкция из нескольких строк. Буду очень признателен если напишете полностью этот код вычисляющий время открытия позиции .
Всем спасибо за помощь.
HistoryDealGetTicket
В общем, у вас коде такой-же бардак, какой происходил всегда и до сих пор происходит - дурилка!
Вы путаете ордера и позиции. Нужно понимать, что Buy/Sell это не ордера, а позиции. Ордер не может быть закрыт - он может быть только удалён или перемещён, ордер не бывает ни прибыльным, ни убыточным.
Позицию нельзя удалить или переместить - только закрыть с прибылью или убытком.
--
P.S. Когда ГУРУ путаются и пишут что у них один ордер прибыльный, а другой убыточный = всегда хочется ответить, чтобы убыточный перенесли в прибыльную зону и закрыли оба.
Но так как у них это совершенно не ордер а позиция, а эти ГУРУ и об этом не знают, то перенести нельзя.
--
НЕ путайте ордера и позиции.