Проблема ввода нескольких ордеров для реального счета у конкретного брокера - страница 4

 
FinanceEngineer:

Здравствуйте

Я знаю, что это звучит странно. Когда я проверял возвращаемое значение OrderSend(request,result) в предыдущем коде, я получал проблему множественного заказа. Теперь в моем новом коде я не проверяю возвращаемое значение OrderSend(request,result) (но я все же присвоил возвращаемое значение некоторой переменной, чтобы избежать ошибки на новой сборке терминала.


ПриветFinanceEngineer, именно то, что я вам сказал, вы просто маскируете реальную проблему, так как, по моему мнению, вы печатаете это (###) в вашем предыдущем коде (код возврата 10008), а не ситуацию с разрывом.

if(!OrderSend(request,result) || result.deal==0 )
      {
         Print("OrderSend Code: ",result.retcode); // You are printing this (###) -> 10008
         ...
 
figurelli:

Здравствуйте Алена,

Мне не совсем понятно, что вам нужно знать, так как речь идет только о новом коде FinanceEngineer, и совет о проверке кода возврата OrderSend(), который был изменен по сравнению с оригинальным кодом.

Обратите внимание, что ни его оригинальный код, ни его новый код не имеют теста кода 10010, так что если это имеет отношение к вам, почему вы не спросили с самого первого его сообщения?

В любом случае, не могли бы вы объяснить, зачем нужен код 10010 test для полиса заполнения FOK?

Поскольку это уже не первый раз, когда я вижу, что вы и другие модераторы говорят об этом, знаете ли вы какие-нибудь случаи, когда действительно необходим этот код проверки для ордеров FOK (Fill Or Kill), которыми вы могли бы поделиться с нами?

Заранее спасибо.

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

Мы видим здесь много кода, тестирующего возвращаемый код (MqlResult) против 10008 или 10009, но может ли кто-нибудь объяснить, каково реальное значение этих кодов, в чем разница между "Ордер размещен" и "Запрос выполнен"? Кажется, это единственные 2 кода, которые не являются кодами ошибок, верно?

10010 вызывает сомнения, в документации написано:

10008

ТОРГОВЫЙ_КОД_РАЗМЕЩЕН

Заказ размещен

10009

TRADE_RETCODE_DONE

Запрос выполнен

10010

ТОРГОВЫЙ_КОД_ВЫПОЛНЕН_ЧАСТИЧНО

Выполнена только часть запроса

Но что это значит "Выполнена только часть заявки". Вы отметили, что с политикой заполнения FOK, это, вероятно, не может быть открытием 0.5 лота при запросе 1 лота (например), но является ли это единственным значением?

Ранее Вы писали о коде 10010 :

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

Что может означать это предложение? "Будущее доказательство"? "Достаточно безопасный" для ... ? "Отсутствие кода возврата", чего не хватает? (и не так важно, но, "прочитайте еще раз" что?).

 
angevoyageur:

Я полагаю, что могу также задавать вопросы на этом форуме, и не только всегда отвечать. Просто.

Мы видим здесь много кода, проверяя возвращаемый код (MqlResult) против 10008 или 10009, но может ли кто-нибудь объяснить, каково реальное значение этих кодов, в чем разница между "Order Placed" и "Request completed" ? Кажется, это единственные 2 кода, которые не являются кодами ошибок, верно?

10010 сомнителен, в документации сказано:

10008

ТОРГОВЫЙ_КОД_РАЗМЕЩЕН

Заказ размещен

10009

TRADE_RETCODE_DONE

Запрос выполнен

10010

ТОРГОВЫЙ_КОД_ВЫПОЛНЕН_ЧАСТИЧНО

Выполнена только часть запроса

Но что это значит "Выполнена только часть заявки". Вы отметили, что с политикой заполнения FOK, это, вероятно, не может быть открытием 0.5 лота при запросе 1 лота (например), но является ли это единственным значением?

Ранее Вы писали о коде 10010 :

Что может означать это предложение ? "Будущее доказательство"? "Достаточно безопасный" для ... ? "Отсутствие кода возврата", чего не хватает? (и не так важно, но, "прочитайте еще раз" что?).

Как и большинство людей, я изучал кодирование MQL5, глядя на чужой код. Как ни странно для меня, пока что я не видел кода, проверяющего код 10010. Однако, возможно, стоит проверить. Просто на всякий случай.

Из того, что я видел, когда я проверяю только код 10008, я получаю заказ на двойную запись. И когда я проверяю код 10009, я получаю ордер двойной записи. Когда я проверяю и 10008, и 10009, я не получаю ордер двойной записи.

Но мне просто интересно с практической точки зрения, если бы вы проверили код 10010 в вашем советнике, если бы ордер действительно был частично выполнен, то что было бы эффективным способом справиться с подобной ситуацией?

Я, наверное, думаю, что большая часть этой проблемы с отправкой ордера может быть решена проверкой объема с помощью PositionGetDouble(POSITION_VOLUME) внутри нашего цикла. Однако я практически не уверен, что это более эффективно, чем проверка кода 10008 или 10009.

Если сервер брокера занят, то шансы не получить нужный объем так же равны, как и шансы не получить код 10008 или 10009.

С уважением.

 
figurelli:

Здравствуйте Алена,

Мне не совсем понятно, что вам нужно знать, так как речь идет только о новом коде FinanceEngineer, и совет о проверке кода возврата OrderSend(), который был изменен по сравнению с оригинальным кодом.

Обратите внимание, что ни его оригинальный код, ни его новый код не имеют теста кода 10010, так что если это имеет отношение к вам, почему вы не спросили с самого первого его сообщения?

В любом случае, не могли бы вы объяснить, зачем нужен код 10010 test для полиса заполнения FOK?

Поскольку это уже не первый раз, когда я вижу, что вы и другие модераторы говорят об этом, знаете ли вы какие-нибудь случаи, когда действительно необходим этот код для проверки ордеров FOK (Fill Or Kill), которыми вы могли бы поделиться с нами?

Заранее спасибо.

Ну, когда мы пишем на форуме MQL5.com, мы предполагаем, что говорим с людьми, у которых может быть несколько типов потребностей при кодировании советников... поэтому в данном случае, очевидно, можно все упростить и попросить пользователя закодировать более "простой" советник, раз его потребности не такие "продвинутые", как вы себе представляете. Однако, насколько я знаю, есть несколько ситуаций, когда вы не можете работать с политикой заполнения FOK.

Приведу очень простой пример: предположим, вы работаете с акциями, и выбранный объем составляет 10 000 акций. Теперь предположим, что этот же советник работает с "разворотами", поэтому при каком-то случайном сигнале вам, возможно, придется послать на рынок ордер объемом 20 000 акций, чтобы выполнить так называемый "разворот". В этом случае даже очень ликвидные акции (например, бразильские тяжелые акции PETR4 или VALE5) могут не иметь объем спроса или предложения, равный 20 000 акций в определенный момент времени. Так как же в таком случае вы отнесетесь к этому в своем советнике? Вы действительно убеждены, что политика FOK будет лучшим подходом в данном случае? Или вы попытались бы учесть этот код 10010 в вашем эксперте?

Как уже было сказано, если вы постоянно работаете с небольшими лотами, то политика заполнения FOK может быть лучшим решением. Однако иногда у людей есть более "продвинутые" потребности...

 
angevoyageur:

Я полагаю, что могу также задавать вопросы на этом форуме, и не только всегда отвечать. Просто это.

Мы видим здесь много кода, тестирующего возвращаемый код (MqlResult) против 10008 или 10009, но может ли кто-нибудь объяснить, каково реальное значение этих кодов, в чем разница между "Заказ размещен" и "Запрос выполнен"? Кажется, это единственные 2 кода, которые не являются кодами ошибок, верно?

10010 сомнительно, в документации написано:

10008

ТОРГОВЫЙ_КОД_РАЗМЕЩЕН

Заказ размещен

10009

TRADE_RETCODE_DONE

Запрос выполнен

10010

ТОРГОВЫЙ_КОД_ВЫПОЛНЕН_ЧАСТИЧНО

Выполнена только часть запроса

Но что это значит "Выполнена только часть заявки". Вы отметили, что с политикой заполнения FOK, это, вероятно, не может быть открытием 0.5 лота при запросе 1 лота (например), но является ли это единственным значением?

Ранее Вы писали о коде 10010 :

Что может означать это предложение? "Будущее доказательство"? "Достаточно безопасный" для ... ? "Отсутствие кода возврата", чего не хватает? (и не так важно, но, "прочитайте еще раз" что?).

Алена, нет проблем, вы не обязаны отвечать, так как, вероятно, вы никогда не найдете случай, так как это обязательно в любом хорошем протоколе OMS.

Также не нужно говорить, почему вы не спросили после первого сообщения, так как, вероятно, это офф-топик.

В любом случае, обратите внимание, что FOK - это старая политика заполнения, которую MQ ввел, вероятно, чтобы решить проблему коммуникации с OMS, поэтому вы найдете ее во всех хороших протоколах OMS, таких как FIX, например(как эта тема на форуме от 2009 года, до существования MT5).

Так что, на мой взгляд, я не вижу причин спрашивать о коде возврата 10010 для ордера Fill или Kill, и в этом вся суть, поскольку это правило является обязательным, и брокеры и провайдеры OMS должны его соблюдать.

FIX Trading Community: // Fill or Kill Order
FIX Trading Community: // Fill or Kill Order
  • General Q/A
  • www.fixtradingcommunity.org
Have doubt regarding FoK order type. In my view if order is not filled a reject message should be sent by an exchange instead of cancel. Can someone confirm this? No, rejections are to convey that the requested action was not carried out. A FoK order not being filled does not fall in this category, it is rather "works as designed". It is...
 
Malacarne:

Ну, когда мы пишем на форуме MQL5.com, мы предполагаем, что говорим с людьми, у которых может быть несколько типов потребностей при кодировании советников... поэтому в данном случае, очевидно, можно все упростить и попросить пользователя написать более "простой" советник, раз его потребности не настолько "продвинуты", как вы можете себе представить. Однако, насколько я знаю, есть несколько ситуаций, когда вы не можете работать с политикой заполнения FOK.

Приведу очень простой пример: предположим, вы работаете с акциями, и выбранный объем составляет 10 000 акций. Теперь предположим, что этот же советник работает с "разворотами", поэтому при каком-то случайном сигнале вам, возможно, придется послать на рынок ордер объемом в 20 000 акций, чтобы выполнить так называемый "разворот". В этом случае даже очень ликвидные акции (например, бразильские тяжелые акции PETR4 или VALE5) могут не иметь в определенный момент объем спроса или предложения, равный 20 000 акций. Так как же в таком случае вы отнесетесь к этому в своем советнике? Вы действительно убеждены, что политика FOK будет лучшим подходом в данном случае? Или вы попытались бы рассмотреть этот код 10010 внутри вашего эксперта?

Как уже было сказано, если вы постоянно работаете с небольшими лотами, то политика заполнения FOK может быть лучшим решением. Однако иногда у людей есть более "продвинутые" потребности...

Объяснение привлекает внимание. Я думал о том же самом, поскольку большинство из нас, вероятно, торгуют менее чем на 1 миллион долларов США на каждую сделку. На таком высоколиквидном рынке, как Forex, частичное выполнение заказа может быть редкостью. Однако никогда не говори никогда. Мы живем в вероятностном мире. Нет ничего определенного. Возможно, какой-то брокер разделит 1 лот на 0,5 лота. С практической точки зрения, если какой-то брокер не может исполнить 1 лот в любое время, я лучше найду другого брокера для торговли.

С уважением.

 
Malacarne:

Ну, когда мы пишем на форуме MQL5.com, мы предполагаем, что говорим с людьми, у которых может быть несколько типов потребностей при кодировании советников... поэтому в данном случае, очевидно, можно все упростить и попросить пользователя написать более "простой" советник, раз его потребности не настолько "продвинуты", как вы можете себе представить. Однако, насколько я знаю, есть несколько ситуаций, когда вы не можете работать с политикой заполнения FOK.

Приведу очень простой пример: предположим, вы работаете с акциями, и выбранный объем составляет 10 000 акций. Теперь предположим, что этот же советник работает с "разворотами", поэтому при каком-то случайном сигнале вам, возможно, придется послать на рынок ордер объемом 20 000 акций, чтобы выполнить так называемый "разворот". В этом случае даже очень ликвидные акции (например, бразильские тяжелые акции PETR4 или VALE5) могут не иметь объем спроса или предложения, равный 20 000 акций в определенный момент времени. Так как же в таком случае вы отнесетесь к этому в своем советнике? Вы действительно убеждены, что политика FOK будет лучшим подходом в данном случае? Или вы попытались бы учесть этот код 10010 в вашем эксперте?

Как уже было сказано, если вы постоянно работаете с небольшими лотами, то политика заполнения FOK может быть лучшим решением. Однако иногда у людей есть более "продвинутые" потребности...

Привет Malacarne,

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

Другими словами, если пользователь спрашивает что-то и публикует код, а в коде есть строка ниже (как первая и старая), то мы как Модераторы должны считать, что он использует FOK.

request.type_filling=ORDER_FILLING_FOK;

Вы так не считаете? Если нет, то, думаю, мне придется пересмотреть свои представления о поиске ошибок в коде и анализе проблем.

На самом деле, если вы не используете FOK, как ваши бразильские кейсы BM&FBovespa, мое мышление изменится, и код возврата 10010 должен быть рассмотрен, но это совершенно не по теме, и, возможно, лучше обсудить это на португальском форуме.

В любом случае, спасибо, что поделились этим.

 
FinanceEngineer:

Объяснение привлекает внимание. Я думал о том же, так как большинство из нас, вероятно, торгуют менее чем на 1 миллион долларов США за каждую сделку. На таком высоколиквидном рынке, как Forex, частичное выполнение заказа может быть редкостью. Однако никогда не говори никогда. Мы живем в вероятностном мире. Нет ничего определенного. Возможно, какой-то брокер разделит 1 лот на 0,5 лота. С практической точки зрения, если какой-то брокер не может исполнить 1 лот в любое время, я лучше найду другого брокера для торговли.

С уважением.

В своем примере я говорил об объемах около 200 000 долларов США... Так что, насколько я знаю, некоторые из нас торгуют более чем на 200 000 USD за сделку... :-)
 
FinanceEngineer:

Как и большинство людей, я изучал кодирование на MQL5, глядя на чужой код. Как ни странно, пока что я не видел кода, проверяющего код 10010. Однако, возможно, стоит проверить. На всякий случай.


ПриветFinanceEngineer, не видите, потому что, вероятно, эти случаи относятся к политике заполненияORDER_FILLING_FOK, которую вы тоже используете, поэтому, на мой взгляд, это не обязательно, как объясняется в других моих сообщениях здесь.
 
figurelli:

Привет Malacarne,

Извините, но это не по теме, поскольку как Модераторы мы не можем путать реальность (то, что пользователь действительно публикует) и условия "что если".

Другими словами, если пользователь спрашивает что-то и публикует код, а в коде есть строка ниже (как первая и старая), мы как Модераторы должны считать, что он использует FOK.

Разве вы так не думаете? Если нет, то я думаю, что мне придется пересмотреть свои понятия о поиске ошибок в коде и анализе проблем.

На самом деле, если вы не используете FOK, как в случае с бразильским BM&FBovespa, мой образ мышления изменится, и код возврата 10010 должен быть рассмотрен, но это совершенно не по теме, и, возможно, лучше обсудить это на португальском форуме.

В любом случае, спасибо, что поделились этим.

Спасибо за ваше мнение... В мои намерения не входит вносить "путаницу" в умы людей.

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

Это то, о чем мы "пытаемся" предупредить с двух последних сообщений на эту же тему...