Help--SOS! - страница 2

 
Уважаемые разработчики !

1) Если закрываем ордер таким образом:

OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);

и получаем ошибку исполнения 135 или 138, необходимо обновить данные при помощи функции RefreshRates () и повторить попытку.

Если закрываем ордер таким образом:

OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),3,Red);

и получаем ошибку исполнения 135 или 138, повторяем попытку без обновления RefreshRates (). Цены Bid и Ask кэшируются, а MarketInfo(OrderSymbol(),MODE_BID) нет ? Права я или нет ?

2) Значения MarketInfo(OrderSymbol(),MODE_BID) и MarketInfo(OrderSymbol(),MODE_ASK) требуют дополнительного округления с использованием NormalizeDouble(...) ?

Спасибо за ответ.
 
То в тестере или в он-лайне?
 
В он-лайне, на реале.
 
Может делать refresh перед посылкой торгового приказа? Всегда.
 
Renat 27.03.05 18:25


Если я использую для открытия

double ask = MarketInfo( Symbol(), MODE_ASK );
, то при Рефреше переменная ask обновится?


Конечно нет.

Ренат, а как поступать? Я не совсем понимаю....

А что тут сложного? Я вот тоже не могу понять - почему Вы не понимаете?
Многократно повторено - обновляются закешированные графики + предопределенные (тоже закешированные) переменные Bid/Ask. И ничего более.


Если обновляются Ask и Bid ( кстати, по всем инструментам? ), значит ли это что обновляются значения MarketInfo( Symbol(), MODE_ASK ) и MarketInfo( Symbol(), MODE_BID ) ?

MarketInfo - это _функция_, которая выдаст текущее точные незакешированные данные из окна MarketWatch.


Помните ситуацию, которая случилась пару дней назад ( в ветке 159 билда обсуждали ), когда при установке ордера инвалид стоп получился? Можно ли избежать подобного поставив перед проверками RefreshRates() для "освежения" цены?

Еще раз повторю - если Ваш эксперт тратит время (а закешированные данные замораживаются!), а потом как ни в чем не бывало пытается (секунд через 3, 5, 10) использовать старые данные, то кто тут виноват? Похоже что программист, который вообще упустил из виду то, что после задержки _рыночная_ситуация_поменялась_ и требуется _переоценка_. То есть, надо бы вызвать RefreshRates и подумать - надо ли дальше пытаться совершить сделку?

Кеширование состояние текущего графика и рыночных цен при входе в эксперта является "остановкой времени" для эксперта. Это сделано для того, чтобы эксперт работал с зафиксированным срезом состояния рынка, а не постоянно изменяющейся моделью, когда может сработать такое условие: Ask != Ask.
Именно для обновления состояния рынка используется Refresh.
 
Я пользуюсь стандртной конструкцией

RefreshRates();
OrderSend(Symbol_for_work,OP_SELL,v,Bid,5,stop_loss_level,tp_level,"SELL",MagicNumber_sell,0);

При установке проскальзывания в 5 пунктов для EURUSD ещё НИ РАЗУ не удалось отловить ситуацию когда бы ордер не смог открыться. Честно говоря я даже не делаю проверки открылся ли ордер или нет на текущем старте эксперта. Эта проверка выполняется стандартно в следующий старт эксперта через полчаса. Правда я экстримом на новостях не занимаюсь. Возможно у Вас в этом проблема? В работе по быстрому рынку? Тогда просто поставьте проскальзывание побольше, если Вам требуется войти во чтобы то ни стало именно сейчас, а не часом раньше или часом позже когда новостей не было (или уже не будет).
 
Olga_trader 16.08.06 10:27
Если закрываем ордер таким образом:

OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),3,Red);

и получаем ошибку исполнения 135 или 138, повторяем попытку без обновления RefreshRates (). Цены Bid и Ask кэшируются, а MarketInfo(OrderSymbol(),MODE_BID) нет ? Права я или нет ?
Да, всё правильно.
Вы цитировали, если не ошибаюсь, мой разговор с Ренатом =)
И он однозначно ответил - MarketInfo всегда даёт свежую информацию.

2) Значения MarketInfo(OrderSymbol(),MODE_BID) и MarketInfo(OrderSymbol(),MODE_ASK) требуют дополнительного округления с использованием NormalizeDouble(...) ?
Когда-то давно (билдов 20 назад=) я наткнулся на нермализованный OrderStopLoss() (или OrderLot(), не помню). Спросил у разработчиков. Они сказали, что проверят - по идее, всё должно быть нормализовано.
Но с тех пор у меня в коде нормализуется все, что касается торговли. И ни каких проблем ;)
 
На быстром рынке действительно возникают проблемы, особенно по самой стремительной паре GBPUSD. Маленькие значения slippage иногда не срабатывают.

Правильность используемой Вами конструкции не вызывает никаких сомнений, она описана в документации.

Полагаю, использование альтернативного варианта MarketInfo( Symbol(), MODE_ASK ) и MarketInfo( Symbol(), MODE_BID ) может дать небольшой выигрыш по времени.

Последнее слово за разработчиками, только они знают все нюансы. Прошу, жду, но нет мне ответа ...
 
Сделайте самостоятельную проверку, я так делал , когда попал на проскальзывание. И учел в дальнейшем
 
Olga_trader, прочитайте мой предыдущий пост.
Я его писал специально для вас ;)