Мой эксперт выполняет двойную запись - страница 10

 
angevoyageur: Не уверен, что понимаю, что вы имеете в виду. Проблема, о которой мы говорим в этой теме, вызвана не плохим кодированием, а плохим дизайном в mql5 (это мое мнение, а может это просто ошибка?). Что вы имеете в виду под "множественным торговым потоком"?

Я вернулся и перечитал то, что вы считаете плохим дизайном.

В старом mt4 такого класса не существует. Обычный метод проверки Successful_Orders внутри - Ticket#==(-1) && GetLastError(). Я никогда не видел случая, когда ваш ордер возвращает правильный тикет# и GLE=0. Но при следующем тике, ваш OrdersTotal() все еще возвращает 0.

Имейте в виду, что я не изучил всю документацию по mql5. Однако, если там сказано, что информация PositionSelect_Information не обновляется до более позднего времени. И кто-то использует PositionSelect для оценки своей логики входа. Тогда этот человек должен дождаться обновления информации PositionSelect_Information перед выходом из логики отправки ордеров.

Что касается потоков... Я говорил о нескольких потоках по сравнению с одним потоком для отправки ордеров. В смысле одновременного открытия ордеров в одно и то же время. Это может быть или не быть уместным здесь.

 
Ubzen:

Я вернулся и перечитал то, что вы считаете плохим дизайном.

В old-mt4 эти классы не существуют. Обычный метод проверки Successful_Orders внутри - Ticket#==(-1) && GetLastError(). Я никогда не видел случая, когда ваш ордер возвращает правильный ticket# и GLE=0. Но при следующем тике, ваш OrdersTotal() все еще возвращает 0.

Имейте в виду, что я не изучил всю документацию по mql5. Однако, если там сказано, что информация PositionSelect_Information не обновляется до более позднего времени. И кто-то использует PositionSelect для оценки своей логики входа. Тогда этот человек должен дождаться обновления информации PositionSelect_Information перед выходом из логики отправки ордеров.

Что касается потоков... Я говорил о нескольких потоках по сравнению с одним потоком для отправки ордеров. В смысле одновременного открытия ордеров в одно и то же время. Здесь это может быть уместно или нет.

В документации о PositionSelect ничего не сказано о "не обновляется до более позднего времени". Там только говорится, что даже если PositionSelect верен, информация о позиции может быть устаревшей, что не имеет отношения к вашему вопросу.

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

 
angevoyageur:

В документации о PositionSelect ничего не говорится о "не обновляется до позднего времени". Там только говорится, что даже если PositionSelect верен, информация о позиции может быть устаревшей, что не имеет отношения к вашему вопросу.

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

K..... и btw, если в документе ничего не сказано, то я с вами полностью согласен.

Вопрос, который мы собираемся задать Service_Desk, в конечном итоге звучит так: "Почему вы не можете обновить Position_Information, когда trade.PositionOpen()==true?".

Возможно, у них будет хороший ответ для нас .

 
angevoyageur:

Нет. Я как раз думал об этом... Возможно, было бы полезно, если бы все заинтересованные люди написали тикет в ServiceDesk об этой проблеме. Однако я очень скептически отношусь к тому, что MQ захочет изменить этот дизайн. Но мы можем попробовать.

Люди могут написать в ServiceDesk и сообщить номер тикета здесь. Мой

Ошибки, MetaTrader 5 MQL, Открыть, Начать: 2013.12.23 19:08, #916435


Я также сообщил в службу поддержки, #933192 | 2014.01.19 14:44

 

MQ на самом деле может легко переделать это, чтобы иметь функцию тайм-аута?

Например, нет ответа, тогда мы получим ошибку, что-то вроде этого?

 
doshur:

MQ на самом деле может легко переделать это, чтобы иметь функцию тайм-аута?

Например, нет ответа, тогда мы получим ошибку, что-то в этом роде?


Они сделали именно обратное. Когда mql5 был создан, там был параметр таймаута для функции типа PositionSelect.

Но позже они убрали его, см. пункт 9 здесь https://www.mql5.com/en/forum/53/page5#comment_14479.

 

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

Например, несколько фондовых рынков используют протокол FIX в качестве стандарта, и для меня этот коммуникационный протокол не является простым для адаптации какого-либо кода или архитектуры.

В любом случае, я считаю, что у ребят из MQ был вызов времени, и они должны были создать MQL5 на основе MQL4, а не с нуля. Я помню, что чемпионат в том году был приостановлен, чтобы у них было больше времени.

Так что, возможно, эта тема может стать отличным советом для будущего MQL6 и для действительно новой архитектуры с нуля, в основном в отношении устойчивости к транзакциям и агностических решений для работы на любом рынке.

 
doshur:

MQ на самом деле может легко переделать это, чтобы иметь функцию тайм-аута?

Например, если нет ответа, то мы получим ошибку, что-то в этом роде?

Традиционно, TimeOut не означает, что ордер не станет позицией. Вам придется ждать в течение длительного периода времени... проверяя, станет ли он позицией... и в конечном итоге приостановить торговлю, если ордер не будет исполнен.

Я думаю, что MQ согласился бы с фигурантом насчет того, что это ошибка программиста. Потому что в функциях, на которых построен trade.PositionOpen, ясно сказано, что нужно проверять и другие вещи.


****** (Добавление личной повестки дня ... вы можете прекратить чтение на этом моменте) *******

Это причина, по которой я не преследую новичков-программистов по поводу функций и их возвращаемых значений, когда помогаю им на mql_форуме. Я не вижу смысла говорить, что всегда делайте следующее.

if( OrderSend()<0 ) { Print( GetLastError() ); }

Предполагается, что это автоматический трейдер... вы можете быть далеко... и что он делает - Print()?

В моем понимании, Error_Handling и Error_Reporting - это 2_очень разных монстра. Попытка объяснить, как правильно обработать ошибку, может занять несколько страниц, и это очень личное дело трейдера, сколько раз он должен повторить попытку или даже должен ли он прекратить торговлю.

**** Теперь я не говорю, что если новичок кодирует советника и у него возникают проблемы с торговлей... что они не должны Print( GetLastError(); ) <- Это должно быть очевидно. Но если я собираюсь сказать им, чтобы они всегда получали Get_Error, то я также должен сказать им, чтобы они всегда обрабатывали Handle_Error. *** Конец программы. ****

 
angevoyageur:


Они сделали в точности обратное. Когда создавался mql5, там был параметр таймаута для функции типа PositionSelect.

Но позже его убрали, см. пункт 9 здесь https://www.mql5.com/en/forum/53/page5#comment_14479.

Пора возродить его?
 
doshur:
Пора возродить это?

Я так не думаю. Синхронный торговый запрос должен быть синхронным во всех аспектах. Это так просто.

Здесь запрос синхронный, но затем вы должны управлять асинхронными вещами. И об этом ничего не документировано.

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