Как проверить, выбран ли ордер - страница 7

 
tara:

Испания тоже:)
Испания южная, и Барселона имеет очень мягкий климат без холодов и нестерпимой жары, и сам город очень красивый и компактный, так что мне, как москвичу пришёлся очень по душе!
 

ТС хочет воспользоваться недокументированной возможностью MT4. Функция OrderSelect() создает указатель (ТС называет это "ордер выбран" ), который является глобальным для советника (скрипта). Что демонстрируют следуюшие два скрипта

Указатель, созданный вызванной процедурой, доступен в вызывающей процедуре:

int start()
{
   ordsel();
   Print( OrderTicket( ) );
   return(0);
}
void ordsel()
{
   OrderSelect( 1, SELECT_BY_POS, MODE_HISTORY );
   Print( OrderTicket( ) );
}

2013.02.17 02:50:48 111 EURUSD,H1: uninit reason 0
2013.02.17 02:50:48 111 EURUSD,H1: 18338793
2013.02.17 02:50:48 111 EURUSD,H1: 18338793
2013.02.17 02:50:48 111 EURUSD,H1: loaded successfully

 

Созданный указатель доступен в вызываемой процедуре: 

int start()
{
   OrderSelect( 1, SELECT_BY_POS, MODE_HISTORY );
   Print( OrderTicket( ) );
   ordsel();
   return(0);
}
void ordsel()
{
   Print( OrderTicket( ) );
}

2013.02.17 02:56:10 111 EURUSD,H1: uninit reason 0
2013.02.17 02:56:10 111 EURUSD,H1: 18338793
2013.02.17 02:56:10 111 EURUSD,H1: 18338793
2013.02.17 02:56:10 111 EURUSD,H1: loaded successfully


Но пользоваться этим стремно

 
tara:
Жениться Вам, братец, надобно.
Зачем? Тут много живут не оформляя ничего, и с детьми. Зачем платить всякие таксы? Потом у меня всё уже было и есть, так что нет такой необходимости.
 
Ant_TL:

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

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


  1) А по моему это вам от вашей "крутизны" глаза заливает.

  2) Будете продолжать хамить точно получите как вы выразились "банхаммером" в воспитательных целях.

  3) Этот ваш посыл (выделенный жирным) и так понятен без "разжевывания до букв" страницы так со второй, и я вам (как для тех кто в танке) уже ответил нет. Нет такого ордера, если вы хотите его иметь позаботьтесь об этом самостоятельно и заблаговременно.

  4) Вы можете писать сколь угодно длинные программы, но если вы имеете пробел в знаниях, и хотите его заполнить за счет общества (для чего и существует этот форум), то потрудитесь вести себя прилично. 

 
Mislaid:

ТС хочет воспользоваться недокументированной возможностью MT4. Функция OrderSelect() создает указатель (ТС называет это "ордер выбран" ), который является глобальным для советника (скрипта). Что демонстрируют следуюшие два скрипта

Но пользоваться этим стремно

Почему недокументированной и почему стремно? Это работает всегда, за исключением пользовательских библиотек - вот тут нужно явно выделять нужный тикет заново, т.к. судя по всему этот "указатель" глобален лишь в пределах модуля - советника или скрипта, а у модуля библиотеки свой указатель.

 
FAQ:
 

  3) Этот ваш посыл (выделенный жирным) и так понятен без "разжевывания до букв" страницы так со второй, и я вам (как для тех кто в танке) уже ответил нет. Нет такого ордера, если вы хотите его иметь позаботьтесь об этом самостоятельно и заблаговременно.

  4) Вы можете писать сколь угодно длинные программы, но если вы имеете пробел в знаниях, и хотите его заполнить за счет общества (для чего и существует этот форум), то потрудитесь вести себя прилично. 

Какого ещё ордера нет? Нет у меня никакого пробела в знаниях, это ваши выдумки. Я обратил внимание на проблему, которую считаю пробелом в механизме работы с ордерами в mql4, вот и все. Если ряд функций работают с выделенным ордером, должна быть возможность проверить, выделен какой-либо ордер или нет, чтобы не генерировать ошибку. Я понимаю, что можно наворотить костылей, запоминать выбор ордера в десятке мест, передавать параметром, чтобы не ошибиться, и так далее.

FAQ:

2) Будете продолжать хамить точно получите как вы выразились "банхаммером" в воспитательных целях.

То что ваш приятель bori мне хамил несколько страниц очевидно прошло мимо вашего зоркого взгляда. Воспитываете избирательно

 
Ant_TL:

Какого ещё ордера нет? Нет у меня никакого пробела в знаниях, это ваши выдумки. Я обратил внимание на проблему, которую считаю пробелом в механизме работы с ордерами в mql4, вот и все. Если ряд функций работают с выделенным ордером, должна быть возможность проверить, выделен какой-либо ордер или нет, чтобы не генерировать ошибку. Я понимаю, что можно наворотить костылей, запоминать выбор ордера в десятке мест, передавать параметром, чтобы не ошибиться, и так далее.

Никакого пробела в mql4 нет. Состояние выбранного ордера может измениться при любой операции с ордерами: открытие/закрытие, исполнение по тейку/стопу, исполнение/удаление отложенного, частичное закрытие ордеров. Поэтому, ничего запоминать и передавать не надо. Нужно никогда не рассчитывать, что состояние не изменилось. Ордер может быть выбран, да уже не тот.
 
Mislaid:
Никакого пробела в mql4 нет. Состояние выбранного ордера может измениться при любой операции с ордерами: открытие/закрытие, исполнение по тейку/стопу, исполнение/удаление отложенного, частичное закрытие ордеров. Поэтому, ничего запоминать и передавать не надо. Нужно никогда не рассчитывать, что состояние не изменилось. Ордер может быть выбран, да уже не тот.

 Я указал на конкретную ситуацию: у нас есть главный цикл, который работает с ордерами. И есть ряд вспомогательных функций, которые используются в этом цикле, и которые тоже работают с ордерами. Логика главного цикла не должна нарушаться после вызова этих функций. Значит, если во вспомогательной функции затрагивается работа с ордерами, она должна запоминать состояние "указателя" на момент вызова и после завершения своей работы возвращать его в то состояние, которое было. А сделать этого без костылей и без генерации ошибок она не может. Вот здесь как раз пробел.

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

 
Ant_TL:

 Я указал на конкретную ситуацию: у нас есть главный цикл, который работает с ордерами. И есть ряд вспомогательных функций, которые используются в этом цикле, и которые тоже работают с ордерами. Логика главного цикла не должна нарушаться после вызова этих функций. Значит, если во вспомогательной функции затрагивается работа с ордерами, она должна запоминать состояние "указателя" на момент вызова и после завершения своей работы возвращать его в то состояние, которое было. А сделать этого без костылей и без генерации ошибок она не может. Вот здесь как раз пробел.

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

Предположим, что вы передали свой советник кому-то. Вы же не знаете, может у него работают другие советники, он сам торгует руками.

Может, вы, закончив этот советник, начнете писать новый. Вот тут старый и заглючит. 

 
Mislaid:

Предположим, что вы передали свой советник кому-то. Вы же не знаете, может у него работают другие советники, он сам торгует руками.

Может, вы, закончив этот советник, начнете писать новый. Вот тут старый и заглючит. 

 Не понял? Причем здесь кому я передал советник? Вы что ли думаете, что на состояние "указателя" влияют какие-то действия других советников и терминала? "Указатель" (тикет выбранного в данный момент ордера) - это переменная уровня модуля. Хорошо бы получать к ней доступ без возможной генерации ошибки 4105, вот о чем я пишу все это время

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