Ошибки, баги, вопросы - страница 3213

 
PapaYozh #:

У Вас очень странный код. Вы пытаетесь совершить покупку по цене, которая была у тика попавшего на

Но дело в том, что текущая (на момент отправки торгового приказа) цена Ask может отличаться от той, которая была в обрабатываемом тике.

Я не говорил, что это правильный код. Надо еще каким то образом установить "текущее время", т.е. время открытия ордера.

 
Petros Shatakhtsyan #:

Я не говорил, что это правильный код. Надо еще каким то образом установить "текущее время", т.е. время открытия ордера.

Если цена, по которой Вы пытаетесь купить, отличается от текущей цены Ask, то покупка не состоится. А цена, которую Вы извлекаете из прошлых тиков не обязана совпадать с текущей ценой.

Именно это я пытался сообщить Вам.

 
PapaYozh #:

Если цена, по которой Вы пытаетесь купить, отличается от текущей цены Ask, то покупка не состоится. А цена, которую Вы извлекаете из прошлых тиков не обязана совпадать с текущей ценой.

Именно это я пытался сообщить Вам.

У нас же текущей цены и времени нету. Они берутся из структуры тика MqlTick.

 
Petros Shatakhtsyan #:

У нас же текущей цены и времени нету. Они берутся из структуры тика MqlTick.

Только та структура из которой берутся данные в Вашем коде, содержит устаревшие данные.
 
Используйте SymbolInfoTick(...) для получения актуальных данных.
 
Petros Shatakhtsyan #:

Надеюсь понятно что я хочу делать:  вместо OnTick(), использовать массив тиков от CopyTicks()

Я так понял такое решение  ошибочно, из-за текущей цены, также из-за текущей времени. Получается функция Buy() без OnTick() не сможет работать ?

У Вас же исполнение по рынку, пока ордер дошёл до исполнения - цена "убежала"

 
Ilyas #:

У Вас же исполнение по рынку, пока ордер дошёл до исполнения - цена "убежала"

Вот именно.

Получается что тиковые данные которые получены через CopyTicks, невозможно использовать в торговых функциях(открытие/закрытие).

Надо было также сделать синхронизацию потоков, как например семафор.

 
Petros Shatakhtsyan #:


Получается что тиковые данные которые получены через CopyTicks, невозможно использовать в торговых функциях(открытие/закрытие).


Конечно. Это же прошлые тики.

 

Во фрилансе при попытке перейти в раздел "мои работы" (https://www.mql5.com/ru/job/works), если там ничего нет (текущих заявок на исполнение заказа), то браузер выдает ошибку: "Циклическое перенаправление на странице" (на скрине). Если заявку на исполнение работы отправить, то ошибка исчезает. И хотя заявка на исполнение одна, во вкладке показывает, что их две (второй скрин) - какая-то работа где-то затерялось...)  Либо счетчик сбился.


 

Если робот тиковый, то при работе с тиками возникает некоторые проблемы.

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

Первые 10-12 сделки обычного тестирования (через OnTick()) и виртуального  тестирования (через массив  MqlTick ) точно совпадают, но потом начинается расхождение .

Это понятно почему так. В документации читаем:

NewTick #

Событие NewTick генерируется при поступлении новых котировок и обрабатывается функцией OnTick() у присоединенных советников. Если при поступлении новой котировки выполнялась функция OnTick, запущенная на предыдущей котировке, то пришедшая котировка будет проигнорирована советником, так как соответствующее событие не будет поставлено в очередь событий эксперта.

Все пришедшие во время выполнения программы новые котировки программой игнорируются до тех пор, пока не завершится очередное выполнение функции OnTick(). После этого функция будет запущена только после прихода очередной новой котировки.

. . .


Возникает вопрос:

Как приостановить приход новых тиков, пока выполняется OnTick() ?