Вот такая ошибка выскакивает по нижеприведенному коду:
- [Архив!] Напишу советник БЕСПЛАТНО
- Помогите декодировать советника в MQL4
- Фича в эмуляции развития бара при тестировании эксперта.
Это - ошибочное описание ошибки. На самом деле - это requote
На самом деле - это requote
Как позицию-то закрыть, что я сделал не так? Она (ошибка) вылазит в 100% случаев, даже если рынок не движется.
Я не уверен, что для символа в режиме Instant Execution необходимо запрашивать цены. Используйте текущие потоковые цены.
Кстати, вот нашёл описание MtGetPrices и замечание к этой функции
===
Необходимое замечание. Если инструмент, по которому запрашиваются цены,
находится в режиме Instant Execution, то необходимо просто брать последние
котировки по запрашиваемому инструменту.
===
Кстати, вот нашёл описание MtGetPrices и замечание к этой функции
===
Необходимое замечание. Если инструмент, по которому запрашиваются цены,
находится в режиме Instant Execution, то необходимо просто брать последние
котировки по запрашиваемому инструменту.
===
Я не уверен, что для символа в режиме Instant Execution необходимо запрашивать цены. Используйте текущие потоковые цены.
Да, я читал замечание про Instant Execution, но так и не врубился, откуда брать текущие цены? Они есть в какой-то предопределенной МТ3 структуре или мне самому нужно апдейтить их по приходу каждого тика по каждой паре.
Что касается ф-ции GetPrices, то я ее присобачил по примеру, приложенному к API библиотеке.
procedure TfrmClosePosition.btnRequestClick(Sender: TObject); var error:integer; begin error:=MTAPI.GetPrices(HSocket,pchar(symbol),round(100*lots),@bid,@ask); if error<>RET_OK then lblBidAsk.Caption:=MTApi.GetErrorDescription(error) else lblBidAsk.Caption:=FloatToStrF(bid,fffixed,10,4)+'/'+FloatToStrF(ask,fffixed,10,4); btnRequest.Enabled:=false; btnClose.Enabled:=true; t:=5; Timer1.Enabled:=true; end; procedure TfrmClosePosition.btnCloseClick(Sender: TObject); var error:integer; begin if isBuyPosition then error:=MTApi.CloseOrder(HSocket,order,bid,round(100*lots)) else error:=MTApi.CloseOrder(HSocket,order,ask,round(100*lots)); donShowLiveQuotes2:=true; if error<>RET_OK then lblBidAsk.Caption:=MTApi.GetErrorDescription(error) else close; end;
Текущие цены берутся из пампинга
===
int MtSetPumpingMode( const int handle, const HWND destwnd, const UINT eventmsg );
Запрос серверу на перевод клиента в режим подкачки данных (пассивный режим).
Этот режим предполагает уменьшение трафика, так как сервер без дополнительного
запроса клиента будет посылать новые данные, относящиеся к клиенту. Этот режим
предполагает более оперативное получение данных - котировок, новостей, изменения
состояния открытых позиций, изменения состояния счёта.
Важно! После перевода объекта сокета в режим подкачки данных недопустимо обращаться
к серверу через данный сокет с запросами, кроме запроса на разрыв связи MtDisconnect.
Можно вызывать следующие функции: MtGetTradeRecords, MtGetSecurities, MtAddSymbol,
MtHideSymbol, MtGetUpdatedTickInfo, MtGetLastNews, MtGetLastMail.
handle - хэндл сокета, через который уже произведён вход в систему в качестве авторизованного клиента;
destwnd - хэндл окна, которому будут приходить сообщения о поступлении новых данных от сервера;
eventmsg - идентификатор сообщения, которое будет посылаться окну.
В качестве параметра WPARAM может быть передано одно из значений:
UPDATE_BIDASK, UPDATE_NEWS, UPDATE_TRADES, UPDATE_MAIL или END_PUMPING (описаны в файле MetaTraderAPI.h).
В качестве параметра LPARAM передаётся хэндл объекта сокета, пославшего сообщение.
Возвращает код возврата.
===
Обрабатывайте сообщение UPDATE_BIDASK
===
int MtSetPumpingMode( const int handle, const HWND destwnd, const UINT eventmsg );
Запрос серверу на перевод клиента в режим подкачки данных (пассивный режим).
Этот режим предполагает уменьшение трафика, так как сервер без дополнительного
запроса клиента будет посылать новые данные, относящиеся к клиенту. Этот режим
предполагает более оперативное получение данных - котировок, новостей, изменения
состояния открытых позиций, изменения состояния счёта.
Важно! После перевода объекта сокета в режим подкачки данных недопустимо обращаться
к серверу через данный сокет с запросами, кроме запроса на разрыв связи MtDisconnect.
Можно вызывать следующие функции: MtGetTradeRecords, MtGetSecurities, MtAddSymbol,
MtHideSymbol, MtGetUpdatedTickInfo, MtGetLastNews, MtGetLastMail.
handle - хэндл сокета, через который уже произведён вход в систему в качестве авторизованного клиента;
destwnd - хэндл окна, которому будут приходить сообщения о поступлении новых данных от сервера;
eventmsg - идентификатор сообщения, которое будет посылаться окну.
В качестве параметра WPARAM может быть передано одно из значений:
UPDATE_BIDASK, UPDATE_NEWS, UPDATE_TRADES, UPDATE_MAIL или END_PUMPING (описаны в файле MetaTraderAPI.h).
В качестве параметра LPARAM передаётся хэндл объекта сокета, пославшего сообщение.
Возвращает код возврата.
===
Обрабатывайте сообщение UPDATE_BIDASK
Текущие цены берутся из пампинга
Есть у меня такой и pti:= MTAPI.GetUpdatedTickInfo(handle, @cnt) вызывается.
Спасибо, попробую закрывать по заведомо допустимой цене, посмотрю что получится.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь