Как выбрать ордер по тикету? - страница 2

 
Спасибо.Да с магиком проще.
 
Sergey Eremin:

Тогда точно неправильно :)

Должно быть примерно так:

1) Выставили ордер, запомнили его тикет (например, в глобальную переменную терминала).
2) В нужной функции выбрали ордер с запомненным тикетом и работаете с ним.

Но это плохое решение. лучше завести три магических номера и уже по ним выбирать ордера перебором в цикле, так будет работать надёжней.

А тебя не смущает что в GV записывается только значения double, а тикет имеет тип int ?

И потом при чтении значения из GV получишь тип 123.0000 и попытаешься найти ордер с таким тикетом.


Dima DD:
Потом через
узнаю номер.
Где объявлены переменные ticket2, ticket3, ticket4 и доступны-ли они при выборе ордера?
 
Alexey Viktorov:

А тебя не смущает что в GV записывается только значения double, а тикет имеет тип int ?

И потом при чтении значения из GV получишь тип 123.0000 и попытаешься найти ордер с таким тикетом.

А в чём проблема преобразовать int в double и обратно? :)

Что-то вроде такого:

   int ticket = 0;
   string gvName = "ticket2_"+Symbol()+EnumToString((ENUM_TIMEFRAMES)Period());
   if(GlobalVariableCheck(gvName))
   {
      ticket = (int)GlobalVariableGet(gvName); 
   }
   if(ticket != 0)
   {
      ...;
   }

разве не будет работать? :)

 
Alexey Viktorov:

А тебя не смущает что в GV записывается только значения double, а тикет имеет тип int ?

И потом при чтении значения из GV получишь тип 123.0000 и попытаешься найти ордер с таким тикетом.


Где объявлены переменные ticket2, ticket3, ticket4 и доступны-ли они при выборе ордера?

Так нужно брать с преобразованием. А сохранять с 0 знаков после запятой.

А вообще: весь этот огород тут совсем ни к селу, ни к городу. Логика построена мягко говоря ... никак.

 
Sergey Eremin:

А в чём проблема преобразовать int в double и обратно? :)

int ticket = (int)123.0000; разве не будет работать?

Да будет конечно. Но зачем такой изврат??? Ты-же должен понимать, что если человек задаёт такие вопросы, то вряд-ли знает тонкости работы с GV.
 
Alexey Viktorov:
Да будет конечно. Но зачем такой изврат??? Ты-же должен понимать, что если человек задаёт такие вопросы, то вряд-ли знает тонкости работы с GV.

Если он решит пойти по такому пути, то я с радостью ему подскажу/помогу сделать это более-менее правильно. Но я считаю, что это не лучший вариант, о чём и написал. Ещё хуже только пытаться работать с обычными глобальными переменными (надеюсь Вы, как крутой специалист, понимаете почему).

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

 
Sergey Eremin:

Если он решит пойти по такому пути, то я с радостью ему подскажу/помогу сделать это более-менее правильно. Но я считаю, что это не лучший вариант, о чём и написал. Ещё хуже только пытаться работать с обычными глобальными переменными (надеюсь Вы, как крутой специалист, понимаете почему).

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

Чем хуже? Тем что их надо заполнить при перезапуске советника и терминала?

А в общем-то jedem das seine.

 
Alexey Viktorov:

Чем хуже? Тем что их надо заполнить при перезапуске советника и терминала?

А в общем-то jedem das seine.

Да, именно этим. Это ни разу не тривиальней, чем работа с глобальным переменным терминала, и ни капли не проще :)

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

 
Sergey Eremin:

Да, именно этим. Это ни разу не тривиальней, чем работа с глобальным переменным терминала, и ни капли не проще :)

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

Ну, "бытует мнение" наверное слишком сильно сказано...

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

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

 
Alexey Viktorov:

Ну, "бытует мнение" наверное слишком сильно сказано...

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

Я тоже не вижу смысла в дальнейшей (по крайней мере публичной) полемике, мы на разных волнах (хотя бы то, что я к Вам на "Вы" и с полным уважением, а Вы сходу набросились на меня с критикой, да ещё и на "ты"). Если будет чем продолжить этот увлекательный разговор, то прошу в личку :)