Форум трейдеров » Торговые роботы, советники, индикаторы » Странная установка ордера
+ Подписаться
  1. 42
    Комментарии
    1
    Темы
    42
    Репутация Pro
     
    Новичок

    2 Медалей

    Странная установка ордера

    Добрый день.

    Подскажите, пожалуйста, почему ордер по команде
    OrderSend(EURUSD,OP_BUY,Lots,MarketInfo("EURUSD", MODE_ASK),0,0,0,"Buy EUSD",0,0,0)
    срабатывает на неспокойном рынке, т.е. присутствует проскальзывание.
    Насколько я понимаю, советник работает c котировками, полученными при вызове start() и функция MarketInfo() не обновляет котировки в копии данных советника?
    Функция OrderSend должна возвратить ошибку?
    Недоступно! Pro 0
    Поделиться
    Просмотров: 3,075
  2. 174
    Комментарии
    1
    Темы
    175
    Репутация Pro
    Аватар для Aalex  
    В начале пути

    2 Медалей
    Цитата Сообщение от funky_boy Посмотреть сообщение
    срабатывает на неспокойном рынке.... функция MarketInfo() не обновляет котировки в копии данных советника?
    что-то вы сильно хитро намудрили, как мне кажется...
    из описания функции MarketInfo:
    Код:
    Возвращает различную информацию о финансовых инструментах, перечисленных в окне "Обзор рынка"
    то есть этой функции по барабану, с какими котировками в данный момент работает советник, она берет инфу из другого источника. попробуйте сделать элементарную проверку

    Код:
    double myAsk=MarketInfo("EURUSD", MODE_ASK);
    string myAsk2=DoubleToStr( Ask, Digits)+":"+DoubleToStr( myAsk, Digits); 
    OrderSend("EURUSD",OP_BUY,Lots,myAsk,0,0,0,myAsk2,0,0,0);
    ТАким образом, для начала, вы будете видеть, какую цену обрабатывал советник, по какой цене посылали запрос, а по какой он сработал.
  3. 42
    Комментарии
    1
    Темы
    42
    Репутация Pro
     
    Новичок

    2 Медалей
    Спасибо за ответ. У меня аналогичные подозрения закрадывались. Но в документации не сказано явно, что данные берутся из места, отличного от копии данных советника.
    Попробую протестировать.
  4. 174
    Комментарии
    1
    Темы
    175
    Репутация Pro
    Аватар для Aalex  
    В начале пути

    2 Медалей
    в документации не сказано явно, что данные берутся из места, отличного от копии данных советника
    если вы имеете в виду процесс тетсирования на истории, то получается примерно следующая ситуация: тестер имитирует поток тиков, советник на каком-то из тиков начинает напряженно думать, а тестер в это время продолжает имитировать поступление свежих тиков... в какой-то момент времени (продолжая обрабатывать все тот же самый тик) советник обращается к маркетинфо и функция честно сообщает последнюю имеющуюся информацию, то есть данные с того тика, до которого добрался тестер в то время как советник размышлял. В хелпе едитора где-то есть пояснение этого момента и рассмотрена ситуация, когда медленно и напряженно думающий советник пропускает тики.
  5. 42
    Комментарии
    1
    Темы
    42
    Репутация Pro
     
    Новичок

    2 Медалей
    А вот пример из реальной жизни советника с вышеприведенной функцией OrderSend:


    Spot:1.5691 <- Цена получена посредством MarketInfo()
    open #xxxxx buy 1.00 EURUSD at 1.5693 ok
    BUY spot order opened : 1.5693

    Параметр проскальзывания для OrderSend равен 0.
    Последовательность команд такова:
    1. выполняется MarketInfo() с необходимыми параметрами и результат кладется в переменную
    2. Печать строки Spot:1.5691
    3. Условие с обращением к extern переменной
    4. собственно OrderSend

    Вопрос - почему так происходит?

    Можно ссылку на параграф хелпа про пропуск тиков?
  6. 42
    Комментарии
    1
    Темы
    42
    Репутация Pro
     
    Новичок

    2 Медалей
    А почему молчит администрация?
    Вопрос достаточно определенный, функция OrderSend явно работает не так, как положено.
  7. 531
    Комментарии
    10
    Темы
    531
    Репутация Pro
     
    В начале пути

    4 Медалей
    при типе исполнения Market Watch, принятом в WHC, параметр проскальзывания игнорируется. Ордер исполняют по текущей на момент обработки ордера рыночной цене, какой бы она ни была. Я рекомендовал бы вам проанализировать статистику по проскальзываниям - она должна быть иметь нулевое матожидание, т.е. в половине случаев вас должны исполнять хуже последней котировки, а в половине - лучше. Т.е. "в среднем" все должно быть нормально.
  8. 42
    Комментарии
    1
    Темы
    42
    Репутация Pro
     
    Новичок

    2 Медалей
    Спасибо за ответ
  9. 174
    Комментарии
    1
    Темы
    175
    Репутация Pro
    Аватар для Aalex  
    В начале пути

    2 Медалей
    Цитата Сообщение от funky_boy Посмотреть сообщение
    Можно ссылку на параграф хелпа про пропуск тиков?
    продолжаю придерживаться мнения, что топикстартер пытается сделать нечто странное, типа удаления гландов через задний проход :)
    Если вас действительно так напрягает возникшая проблема, то будет больше шансов что кто-то поможет ее решить, если проблему четко описать, типа "на таком-то инструменте, на таком-то ТФ, на таком-то временном отрезке, вот такой-то код работает не так как от него ожидается." и прикладываете этот кусок кода, который находится между получением последней котировки и посылкой ордера. а то фраза
    Условие с обращением к extern переменной
    может означать что угодно, может вы там факториал сотни вычислять пытаетесь или получаете данные с удаленного компьютера? чем точнее вы опишете условия в которых ухитряетесь получать эту ошибку, тем быстрее кто-нибудь вам поможет.

    а насчет ссылки хелпа, я немножко не точно в прошлый раз выразился. есть предупреждение, что не все тики могут обрабатываться советником, и совет этот факт учитывать. это есть например в самом начале "выполнение программ-выполнение программ", в описании функции IndicatorCounted и еще в нескольких местах.
  10. 42
    Комментарии
    1
    Темы
    42
    Репутация Pro
     
    Новичок

    2 Медалей
    Всем спасибо. Господин Quod Licet прояснил ситуацию.

    AAlex, я всего лишь пытался прояснить тему работы функции OrderSend.

Вверх
РегистрацияX

чтобы писать, читать, комментировать