написал функцию
int CheckResultOrder()
{
int nResult;
nResult = GetLastError();
if (nResult != 10008 && nResult && 10009 && nResult != 0 )
{
nResult = -1;
}
ResetLastError();
return(nResult);
}
теперь если функция вернет -1 то ордер не создался
кто нибудь подскажет я в правильном направлении иду?)
1) Объясните как в МТ5 проанализировать что позиция открыта?
2) Как по открытой позиции выбрать из истории относящиеся к ней ордера? С помощью
HistorySelectByPosition
Запрашивает историю сделок и ордеров, имеющих указанный идентификатор позиции.
???
написал функцию
int CheckResultOrder()
{
int nResult;
nResult = GetLastError();
if (nResult != 10008 && nResult && 10009 && nResult != 0 )
{
nResult = -1;
}
ResetLastError();
return(nResult);
}
теперь если функция вернет -1 то ордер не создался
кто нибудь подскажет я в правильном направлении иду?)
1) Объясните как в МТ5 проанализировать что позиция открыта?
2) Как по открытой позиции выбрать из истории относящиеся к ней ордера? С помощью
HistorySelectByPosition
Запрашивает историю сделок и ордеров, имеющих указанный идентификатор позиции.
???
Нет не в правильном, первый пример ваш был почти верный.
bBuy = m_trade.ResultRetcode(); if (bBuy != 10008 || bBuy != 10009) { //что то пошло не так ордер не размещен }На сколько я помню.
Анализировать код возврата нужно из поля retcode структуры MqlTradeResult , которую вы передаете вторым параметром в функцию OrderSend (без стандартной библиотеки классов).
Или получаете методом ResultRetcode() (стандартная библиотека классов). GetLastError() тут не при чем.
А ResultDeal() возвращает тикет сделки, тоесть ее уникальный номер. Смею предположить, что в случае ошибки значение либо не определено, либо ноль.
На счет ордеров, не помню, надо смотреть (пока некогда).
а если использую торговые классы
делаю так
m_trade.PositionOpen(_Symbol, ORDER_TYPE_SELL, locLot, Cur1, 0, 0);
Примечание
Успешное окончание работы метода PositionOpen(...) не всегда означает успешное совершение торговой операции. Необходимо проверять результат выполнения торгового запроса (код возврата торгового сервера) вызовом метода ResultRetcode(), а также значение, возвращаемое методом ResultDeal().
OrderCheck используется в PositionOpen PositionClose и PositionModify
Возвращаемое значение
В случае нехватки средств или ошибочно заполненных параметров функция возвращает false. В случае успешной базовой проверки структур (проверка указателей) возвращается true – это не является свидетельством того, что запрашиваемая торговая операция непременно выполнится успешно. Для получения подробного описания результата выполнения функции следует анализировать поля структуры result.
Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
делаю так
bSell = CheckResultOrder(); //теперь если функция вернет -1 то ордер не создался
int CheckResultOrder()
{
int nResult;
nResult = GetLastError();
if (nResult != 0 )
{
nResult = -1;
}
ResetLastError();
return(nResult);
}

- www.mql5.com
Вы путаете ошибку программы https://www.mql5.com/ru/docs/constants/errorswarnings/errorcodes (например деление на ноль, ошибка в функции и т.п.)
и код возврата сервера https://www.mql5.com/ru/docs/constants/errorswarnings/enum_trade_return_codes (нету денег, неправильная цена и т.п.)
Код возврата сервера получать нужно m_trade.ResultRetcode() .
Если позиция открылась m_trade.ResultRetcode() вернет 10009 (может еще 10008), если позиция не открылась, вернет другой код возврата сервера.
Если позиция не откроется вызов GetLastError() вернет "0", а если откроется, то вернет тоже "0", надеюсь так понятно?

- www.mql5.com
...А ResultDeal() возвращает тикет сделки, тоесть ее уникальный номер. Смею предположить, что в случае ошибки значение либо не определено, либо ноль
Ноль. И получить ничего кроме ноля так и не получилось.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
В МТ4 создавал примерно такие процедуры:
int CreateOrder(string pSymbol, double pLot, int pTipOrder, double pPrice)
{
int nTicket;
string locStr;
double TP;
if (CheckMoneyForOpen(pLot))
{
TP = makeTP(pTipOrder, pPrice, eTakeProfit);
nTicket = OrderSend(pSymbol, pTipOrder, pLot, pPrice, eSlippage, 0, TP, "", MN_ST, 0, CLR_NONE);
if (nTicket < 0)
{
locStr = "--------- Не удалось создать ордер ---------";
PrintLog(0, locStr);
PrintLog(1, "CreateOrder");
PrintLog(0, "locPrice ="+pPrice);
PrintLog(0, "pTipOrder ="+pTipOrder);
PrintLog(0, "SL = "+0);
PrintLog(0, "TP = "+TP);
PrintLog(0, "Digits = "+Digits);
}
}
return(nTicket);
}
Если все хорошо то nTicket содержал тикет созданного ордера все было отлично :) если тикет отрицательный то тоже замечательно я знаю что ордер не создался.
Теперь в МТ5
хочу использовать стандартные классы
PositionOpen
Открывает позицию с заданными параметрами по указанному символу.
Примечание
Успешное окончание работы метода PositionOpen(...) не всегда означает успешное совершение торговой операции. Необходимо проверять результат выполнения торгового запроса (код возврата торгового сервера) вызовом метода ResultRetcode(), а также значение, возвращаемое методом ResultDeal().
Теперь как поступать?
m_trade.PositionOpen(_Symbol, ORDER_TYPE_BUY, eLot, Cur1, 0, 0, "");
bBuy = m_trade.ResultRetcode();
if (nBuy != 10008 || nBuy != 10009 || nBuy != 0)
{что то пошло не так ордер не размещен}
а ResultDeal с ним что делать?
1) Объясните как в МТ5 проанализировать что позиция открыта?
2) Как по открытой позиции выбрать из истории относящиеся к ней ордера? С помощью
HistorySelectByPosition
Запрашивает историю сделок и ордеров, имеющих указанный идентификатор позиции.
???