Это очень интересная по содержанию лекция. Я обязательно буду следить за всей серией.
К сожалению, могут быть даже специально допущены небольшие ошибки - содержание очень сложное и, возможно, стоит не отвлекаться.
В примере "
CMarketCollection::Refresh
" поле total_market не найдено - такое уже случалось ранее с ORDER_STATUS_MARKET. Переход от простого к сложному очень впечатляет.
В точке обновления я не смог пойти дальше, так как следующий объект тоже не хотел запускаться сразу. Поэтому я с удовольствием воспользовался загрузкой.
Странно, простейшую логику не могу реализовать с вашими методами...
Вот надо получить время закрытия последнего трейда. Вроде как, в библиотеке реализован механизм работы с абстрактными ордерами а-ля МТ4, но методов работы с ними не вижу.
Запрашиваю Deals, но ORDER_PROP_TIME_CLOSE not supported:
bool last_trade_time_filter=true;
CArrayObj *all_trades=engine.GetListDeals();
if(all_trades!=NULL && all_trades.Total()>0)
{
CArrayObj *sym_all_trades=CSelect::ByOrderProperty(all_trades,ORDER_PROP_SYMBOL,Symbol(),EQUAL);
if(sym_all_trades!=NULL && sym_all_trades.Total()>0)
{
CArrayObj *sym_all_trades_recent=CSelect::ByOrderProperty(sym_all_trades,ORDER_PROP_TIME_CLOSE,iTime(NULL,PERIOD_CURRENT,1),EQUAL_OR_MORE);
if(sym_all_trades_recent.Total()>0)
{
// сюда не приходит
last_trade_time_filter=false;
}
}
}
Странно, простейшую логику не могу реализовать с вашими методами...
Вот надо получить время закрытия последнего трейда. Вроде как, в библиотеке реализован механизм работы с абстрактными ордерами а-ля МТ4, но методов работы с ними не вижу.
Запрашиваю Deals, но ORDER_PROP_TIME_CLOSE not supported:
ок, время закрытия для сделки как-то некорректно запрашивать. Но не работает и с GetListHistoryOrders()...
Странно, простейшую логику не могу реализовать с вашими методами...
Вот надо получить время закрытия последнего трейда. Вроде как, в библиотеке реализован механизм работы с абстрактными ордерами а-ля МТ4, но методов работы с ними не вижу.
Запрашиваю Deals, но ORDER_PROP_TIME_CLOSE not supported:
В тестовом советнике, в обработчике нажатий кнопок
(а это как раз пример того, как обрабатывать события и получать данные).
Там есть блоки кода, отвечающие за закрытие позиций. Вы можете посмотреть как там всё реализовано. Например, блок кода для закрытия покупки по текущему символу с максимальным профитом:
//--- Если нажата кнопка BUTT_CLOSE_BUY: Закрыть Buy с максимальной прибыльюelseif(button==EnumToString(BUTT_CLOSE_BUY))
{
//--- Получаем список всех открытых позиций
CArrayObj* list=engine.GetListMarketPosition();
//--- Выбираем из списка только позиции Buy и только по текущему символу
list=CSelect::ByOrderProperty(list,ORDER_PROP_SYMBOL,Symbol(),EQUAL);
list=CSelect::ByOrderProperty(list,ORDER_PROP_TYPE,POSITION_TYPE_BUY,EQUAL);
//--- Сортируем список по прибыли с учётом комиссии и свопа
list.Sort(SORT_BY_ORDER_PROFIT_FULL);
//--- Получаем индекс позиции Buy с наибольшей прибыльюint index=CSelect::FindOrderMax(list,ORDER_PROP_PROFIT_FULL);
if(index>WRONG_VALUE)
{
//--- Получаем объект-позицию Buy и закрываем позицию по тикету
COrder* position=list.At(index);
if(position!=NULL)
{
//--- Если не нажаты кнопки создания отложенного запроса - закрываем позициюif(!pressed_pending_close_buy)
engine.ClosePosition((ulong)position.Ticket());
//--- Иначе - создаём отложенный запрос на закрытие позиции по тикету//--- и задаём условия в зависимости от активных кнопокelse
{
int id=engine.ClosePositionPending(position.Ticket());
if(id>0)
{
//--- устанавливаем цену и время активации отложенного запроса и устанавливаем параметры активацииdouble bid=SymbolInfoDouble(NULL,SYMBOL_BID);
double price_activation=NormalizeDouble(bid+distance_pending_request*g_point,g_digits);
ulong time_activation=TimeCurrent()+bars_delay_pending_request*PeriodSeconds();
SetPReqCriterion((uchar)id,price_activation,time_activation,BUTT_CLOSE_BUY,EQUAL_OR_MORE,bid,TimeCurrent());
}
}
}
}
}
Насчёт закрытых позиций - давно делал, сейчас "с наскоку" не могу сразу сказать как получать требуемое Вам. Чуть позже погляжу и напишу - сильно занят на данный момент.
В тестовом советнике, в обработчике нажатий кнопок
(а это как раз пример того, как обрабатывать события и получать данные).
Там есть блоки кода, отвечающие за закрытие позиций. Вы можете посмотреть как там всё реализовано. Например, блок кода для закрытия покупки по текущему символу с максимальным профитом:
Насчёт закрытых позиций - давно делал, сейчас "с наскоку" не могу сразу сказать как получать требуемое Вам. Чуть позже погляжу и напишу - сильно занят на данный момент.
ORDER_STATUS_MARKET_ORDER выдает ошибку : undeclared identifier. Похоже, что в последних версиях для MQL 5 все изменилось, это проявляется и в COrder::OrderMagicNumber, и в конструкторе CMarketOrder!
theonementor # : ORDER_STATUS_MARKET_ORDER выдает ошибку : undeclared identifier. Похоже, что в последних версиях MQL 5 все изменилось, она проявляется и в COrder::OrderMagicNumber, и в конструкторе CMarketOrder!
Я скачал приложенный к статье архивный файл MQL5.zip - каждый файл в отдельности и все вместе (при компиляции Engine.mqh или TestDoEasyPart04.mq5) компилируются без ошибок.
Что именно вы делаете, чтобы получить ошибку компиляции?
Я скачал приложенный к статье архивный файл MQL5.zip - каждый файл в отдельности и все вместе (при компиляции Engine.mqh или TestDoEasyPart04.mq5) компилируются без ошибок.
Что именно вы делаете, чтобы получить ошибку компиляции?
Разобрался, не хватает одной записи в define enum. Почему-то не хватает (хотя я копирую-вставляю код из учебника в редактор)
theonementor # : Разобрался, в define enum не хватает одной записи. Почему-то не хватает (хотя я копирую-вставляю код из учебника в редактор).
Коды в статье не всегда совпадают с кодами в приложенных файлах. Иногда я могу что-то упустить во время описания, а иногда что-то добавляется уже после написания статьи. Статья - это не пошаговое руководство в стиле "читай-копируй-пользуйся", а лишь подробное объяснение в виде учебного материала. А мелкие ошибки и упущения заставляют задуматься, и это хорошо)
Это очень интересная по содержанию лекция. Я обязательно буду следить за всей серией.
К сожалению, могут быть даже специально допущены небольшие ошибки - содержание очень сложное и, возможно, стоит не отвлекаться.
В примере "
" поле total_market не найдено - такое уже случалось ранее с ORDER_STATUS_MARKET. Переход от простого к сложному очень впечатляет.
В точке обновления я не смог пойти дальше, так как следующий объект тоже не хотел запускаться сразу. Поэтому я с удовольствием воспользовался загрузкой.
mfG
Марк Толкмитт
Странно, простейшую логику не могу реализовать с вашими методами...
Вот надо получить время закрытия последнего трейда. Вроде как, в библиотеке реализован механизм работы с абстрактными ордерами а-ля МТ4, но методов работы с ними не вижу.
Запрашиваю Deals, но ORDER_PROP_TIME_CLOSE not supported:
Странно, простейшую логику не могу реализовать с вашими методами...
Вот надо получить время закрытия последнего трейда. Вроде как, в библиотеке реализован механизм работы с абстрактными ордерами а-ля МТ4, но методов работы с ними не вижу.
Запрашиваю Deals, но ORDER_PROP_TIME_CLOSE not supported:
ок, время закрытия для сделки как-то некорректно запрашивать. Но не работает и с GetListHistoryOrders()...
Странно, простейшую логику не могу реализовать с вашими методами...
Вот надо получить время закрытия последнего трейда. Вроде как, в библиотеке реализован механизм работы с абстрактными ордерами а-ля МТ4, но методов работы с ними не вижу.
Запрашиваю Deals, но ORDER_PROP_TIME_CLOSE not supported:
В тестовом советнике, в обработчике нажатий кнопок
(а это как раз пример того, как обрабатывать события и получать данные).
Там есть блоки кода, отвечающие за закрытие позиций. Вы можете посмотреть как там всё реализовано. Например, блок кода для закрытия покупки по текущему символу с максимальным профитом:
Насчёт закрытых позиций - давно делал, сейчас "с наскоку" не могу сразу сказать как получать требуемое Вам. Чуть позже погляжу и напишу - сильно занят на данный момент.
В тестовом советнике, в обработчике нажатий кнопок
(а это как раз пример того, как обрабатывать события и получать данные).
Там есть блоки кода, отвечающие за закрытие позиций. Вы можете посмотреть как там всё реализовано. Например, блок кода для закрытия покупки по текущему символу с максимальным профитом:
Насчёт закрытых позиций - давно делал, сейчас "с наскоку" не могу сразу сказать как получать требуемое Вам. Чуть позже погляжу и напишу - сильно занят на данный момент.
Спасибо, но эвент отлавливать не нужно.
ORDER_STATUS_MARKET_ORDER выдает ошибку : undeclared identifier. Похоже, что в последних версиях MQL 5 все изменилось, она проявляется и в COrder::OrderMagicNumber, и в конструкторе CMarketOrder!
Я скачал приложенный к статье архивный файл MQL5.zip - каждый файл в отдельности и все вместе (при компиляции Engine.mqh или TestDoEasyPart04.mq5) компилируются без ошибок.
Что именно вы делаете, чтобы получить ошибку компиляции?
Я скачал приложенный к статье архивный файл MQL5.zip - каждый файл в отдельности и все вместе (при компиляции Engine.mqh или TestDoEasyPart04.mq5) компилируются без ошибок.
Что именно вы делаете, чтобы получить ошибку компиляции?
Разобрался, в define enum не хватает одной записи. Почему-то не хватает (хотя я копирую-вставляю код из учебника в редактор).
Коды в статье не всегда совпадают с кодами в приложенных файлах. Иногда я могу что-то упустить во время описания, а иногда что-то добавляется уже после написания статьи. Статья - это не пошаговое руководство в стиле "читай-копируй-пользуйся", а лишь подробное объяснение в виде учебного материала. А мелкие ошибки и упущения заставляют задуматься, и это хорошо)