Реквоты и MarketInfo()

 

подскажите пожалуйста, кто знает, в чем здесь может быть ошибка: получаю порой по 15 реквотов подряд, хотя цена не меняется (slippage равен нулю), текущую цену получаю с помощью MarketInfo(), вот кусок кода открытия позиции:

double price;
if (type == OP_SELL) {
price = MarketInfo(pair, MODE_BID);
} else if (type == OP_BUY) {
price = MarketInfo(pair, MODE_ASK);
}
int ticket = OrderSend(pair, type, lots, NormalizeDouble(price, digits), 0, 0, 0, NULL, unicum);

в приведенном далее логе MarketInfo() постоянно возвращает цену 1.0063 (и я пытаюсь по ней открыться), а реквот постоянно говорит, что цена текущая requote 1.0073 / 1.0076, есть ли способ получить именно ту цену, кот. дает реквот, чтобы открыться на следующем шаге по ней, а не по тормознутой, которую возвращает MarketInfo()?

далее приведены логи, из которых видно различие реквотных цен от тех, что возвращает MarketInfo():


15:00:34 '27544': instant order buy 0.01 USDCAD at 1.0063 sl: 0.0000 tp: 0.0000
15:00:35 '27544': request was accepted by server
15:00:35 '27544': requote 1.0073 / 1.0076 for open buy 0.01 USDCAD at 1.0063 sl: 0.0000 tp: 0.0000
15:00:35 '27544': instant order buy 0.01 USDCAD at 1.0063 sl: 0.0000 tp: 0.0000
15:00:35 '27544': request was accepted by server
15:00:36 '27544': requote 1.0073 / 1.0076 for open buy 0.01 USDCAD at 1.0063 sl: 0.0000 tp: 0.0000
15:00:36 '27544': instant order buy 0.01 USDCAD at 1.0063 sl: 0.0000 tp: 0.0000
15:00:50 '27544': request was accepted by server
15:00:51 '27544': requote 1.0073 / 1.0076 for open buy 0.01 USDCAD at 1.0063 sl: 0.0000 tp: 0.0000
15:00:51 '27544': instant order buy 0.01 USDCAD at 1.0063 sl: 0.0000 tp: 0.0000
15:00:52 '27544': request was accepted by server
15:00:52 '27544': requote 1.0073 / 1.0076 for open buy 0.01 USDCAD at 1.0063 sl: 0.0000 tp: 0.0000
15:00:52 '27544': instant order buy 0.01 USDCAD at 1.0063 sl: 0.0000 tp: 0.0000
15:00:52 '27544': request was accepted by server
15:00:53 '27544': requote 1.0073 / 1.0076 for open buy 0.01 USDCAD at 1.0063 sl: 0.0000 tp: 0.0000
15:00:53 '27544': instant order buy 0.01 USDCAD at 1.0063 sl: 0.0000 tp: 0.0000
15:00:53 '27544': request was accepted by server
15:00:54 '27544': requote 1.0073 / 1.0076 for open buy 0.01 USDCAD at 1.0063 sl: 0.0000 tp: 0.0000
15:00:54 '27544': instant order buy 0.01 USDCAD at 1.0063 sl: 0.0000 tp: 0.0000
15:00:54 '27544': request was accepted by server
15:00:55 '27544': requote 1.0073 / 1.0076 for open buy 0.01 USDCAD at 1.0063 sl: 0.0000 tp: 0.0000
15:00:55 '27544': instant order buy 0.01 USDCAD at 1.0076 sl: 0.0000 tp: 0.0000
15:00:55 '27544': request was accepted by server
15:00:56 '27544': requote 1.0076 / 1.0079 for open buy 0.01 USDCAD at 1.0076 sl: 0.0000 tp: 0.0000
15:00:56 '27544': instant order buy 0.01 USDCAD at 1.0076 sl: 0.0000 tp: 0.0000
15:00:56 '27544': request was accepted by server
15:00:57 '27544': requote 1.0074 / 1.0077 for open buy 0.01 USDCAD at 1.0076 sl: 0.0000 tp: 0.0000
15:00:57 '27544': instant order buy 0.01 USDCAD at 1.0066 sl: 0.0000 tp: 0.0000
15:01:00 '27544': request was accepted by server
15:01:01 '27544': requote 1.0081 / 1.0084 for open buy 0.01 USDCAD at 1.0066 sl: 0.0000 tp: 0.0000
15:01:01 '27544': instant order buy 0.01 USDCAD at 1.0082 sl: 0.0000 tp: 0.0000
15:01:01 '27544': request was accepted by server
15:01:02 '27544': requote 1.0081 / 1.0084 for open buy 0.01 USDCAD at 1.0082 sl: 0.0000 tp: 0.0000
15:01:02 '27544': instant order buy 0.01 USDCAD at 1.0084 sl: 0.0000 tp: 0.0000
15:01:02 '27544': request was accepted by server
15:01:03 '17544': order was opened : #1233441 buy 0.01 USDCAD at 1.0084 sl: 0.0000 tp: 0.0000

 

Поробуйте добавить в код RefreshRates(), и слипаж лучше не нулевой...

 
Figar0:

Поробуйте добавить в код RefreshRates(), и слипаж лучше не нулевой...



RefreshRates() на сколько мне известно к MarketInfo() не относится, т. к. MarketInfo() всегда возвращает обновленные данные, а рефреш нужен лишь для Bid, Pont, т. е. переменных на текущем графике, слиппейдж тут тоже не причем, т. к. дело в разных ценах между тем что возвращает маркет инфо и ценами которые пишутся в логи терминала при реквотах
 
Michael:
Figar0:

Поробуйте добавить в код RefreshRates(), и слипаж лучше не нулевой...


RefreshRates() на сколько мне известно к MarketInfo() не относится, т. к. MarketInfo() всегда возвращает обновленные данные, а рефреш нужен лишь для Bid, Pont, т. е. переменных на текущем графике, слиппейдж тут тоже не причем, т. к. дело в разных ценах между тем что возвращает маркет инфо и ценами которые пишутся в логи терминала при реквотах
Относиться и еще как.

Справочник MQL4 - Операции с графиками - RefreshRates

bool RefreshRates( )
Обновление данных в предопределенных переменных и массивах-таймсериях. Эта функция используется, когда эксперт или скрипт производит вычисления в течение долгого времени и нуждается в обновленных данных. Возвращается TRUE, если данные обновлены, иначе FALSE. Данные могут не обновиться только по той причине, что они соответствуют текущему состоянию клиентского терминала. Эксперты и скрипты работают с собственной копией исторических данных. Копия данных по текущему инструменту создается при первоначальном запуске эксперта или скрипта. При каждом следующем запуске эксперта (напомним, что скрипт выполняется однократно и не зависит от приходящих тиков) первоначально созданная копия обновляется. За то время, пока эксперт или скрипт работает, может прийти один или несколько новых тиков, поэтому данные могут устареть.
 
Наверно проблема в том, что котироваки не поступали. Связь с брокером есть, а котирвки не поступают, поэтому кажется, что цена стоит на месте, а ответ сервера показывает, что цена менялась - реквоте 73, 76, 71. Как-то было у меня такое, с чем было свзано не помню, кажется с прокси-сервером.

RefresheRates() здесь не помог бы и при использовании Bid/Ask

 
А у меня причина реквотов Каспесркий 6.0.
Что интересно, все его интернет-проверки отключены, но нужно выключить сам kav, чтобы без реквотов.
 
Korey:
А у меня причина реквотов Каспесркий 6.0.
Что интересно, все его интернет-проверки отключены, но нужно выключить сам kav, чтобы без реквотов.
Во-о-от... кхе-кхе.. гы-ы... юзайте НОД32... Я торгую советниками уже третий год. И когда читаю посты про реквоты, усегда удивляюся, ну хде же льюди умудряюцо их найти. У меня, конечно, они тоже бывают. Но очень редко. Последний раз может месяц назад... Объёмы у меня правда пока небольшие. Может в этом причина?
 
Но в деле отладки советников Касперсикй очень даже помогает...
и обратно - NOD32 корректен до противного советник на нем не отладишь.)))
 
Talex писал (а):

Относиться и еще как.

Справочник MQL4 - Операции с графиками - RefreshRates

дело в том, что у меня работает и торгует именно скрипт (зацикленный), а не советник, RefreshRates() не использую именно потому, что текущие цены получаю с помощью MarketInfo(), вы считаете, что рефреш нужно использовать даже в этом случае? но ведь MarketInfo() должен возвращать именно самые свежие котировки без рефреша, или я не прав?

антивирусы на данном компьютере у меня не стоят. реквоты у меня конечно не постоянно, но иногда просто как дятлы долбят, причем в том и проблема что в логах одни цены по реквотам, а у меня другие (см. лог в первом посте)... может это у брокера есть два потока цен, по одним они торгуют сами и дают мне по ним реквоты, а второй поток который левый и неверный пускают в обзор рынка? :)

 
Michael:
Talex писал (а):

Относиться и еще как.

Справочник MQL4 - Операции с графиками - RefreshRates

дело в том, что у меня работает и торгует именно скрипт (зацикленный), а не советник, RefreshRates() не использую именно потому, что текущие цены получаю с помощью MarketInfo(), вы считаете, что рефреш нужно использовать даже в этом случае? но ведь MarketInfo() должен возвращать именно самые свежие котировки без рефреша, или я не прав?

антивирусы на данном компьютере у меня не стоят. реквоты у меня конечно не постоянно, но иногда просто как дятлы долбят, причем в том и проблема что в логах одни цены по реквотам, а у меня другие (см. лог в первом посте)... может это у брокера есть два потока цен, по одним они торгуют сами и дают мне по ним реквоты, а второй поток который левый и неверный пускают в обзор рынка? :)

Чтож Вы такой упертый, внимательно почитайте, то что я уже написал, особено выделенное. Только добавлю, что рефреш ПРОСТО НЕОБХОДИМ зацикленному скрипту.
 
Talex:
Michael:
Talex писал (а):

Относиться и еще как.

Справочник MQL4 - Операции с графиками - RefreshRates

дело в том, что у меня работает и торгует именно скрипт (зацикленный), а не советник, RefreshRates() не использую именно потому, что текущие цены получаю с помощью MarketInfo(), вы считаете, что рефреш нужно использовать даже в этом случае? но ведь MarketInfo() должен возвращать именно самые свежие котировки без рефреша, или я не прав?

антивирусы на данном компьютере у меня не стоят. реквоты у меня конечно не постоянно, но иногда просто как дятлы долбят, причем в том и проблема что в логах одни цены по реквотам, а у меня другие (см. лог в первом посте)... может это у брокера есть два потока цен, по одним они торгуют сами и дают мне по ним реквоты, а второй поток который левый и неверный пускают в обзор рынка? :)

Чтож Вы такой упертый, внимательно почитайте, то что я уже написал, особено выделенное. Только добавлю, что рефреш ПРОСТО НЕОБХОДИМ зацикленному скрипту.


согласно справке:


bool RefreshRates( )

Обновление данных в предопределенных переменных и массивах-таймсериях.


я для получения цен использую MarketInfo(), где здесь предопределенные переменные или массивы-таймсерии? приведу пример скрипта:

while (true) {
Comment(Bid);
}
в результате после запуска этого скрипта в комменте будет всегда одна и та же цена (т. к. тут не используется RefreshRates()) - все верно

следующий скрипт:

while (true) {
Comment(MarketInfo("EURUSD", MODE_BID));
}
не смотря на то, что здесь не используется RefreshRates() цены в комменте будут меняться также как они меняются в обзоре рынка и следовательно RefreshRates() в данном случае не нужен

прошу ответить разработчиков: действительно ли во втором случае не требуется RefreshRates() или же существуют ситуации при которых даже при получении цены с помощью MarketInfo() (сразу перед открытием позиции) необходимо вызывать RefreshRates()?

Причина обращения: