[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 823

 
Tomcrafft:

Всем привет!

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

советник не открывал второй, третий и т.д. ордера. А открывал следующий ордер только после закрытия первого по стопу либо тейку.

Сначала проверить наличие уже открытого ордера в рынке и если его ещё нету - то открываться, иначе - не нужно.
 
"Почистить кэш тестера", что это такое и как этого добиться?
 
eugggy:

Требуется помощь: есть 2 отложенных ордера(в разные стороны), при срабатывании одного, нужно закрыть другой. Код, как показано ниже. Как его грамотно оформить, что-бы не было ошибки с неправильным номером тикета и работал нормально, буквально пару строчек нужно, чтоб в советник засунуть, я что-то никак не научусь. Заранее спасибо.



Когда переменная "Tip" получает значение? Должна после OrderSelect().

OrderSelect(Total,SELECT_BY_TICKET,MODE_TRADES);
Tip=OrderType();

if(Tip==OP_SELL)

 
eugggy:

Требуется помощь: есть 2 отложенных ордера(в разные стороны), при срабатывании одного, нужно закрыть другой. Код, как показано ниже. Как его грамотно оформить, что-бы не было ошибки с неправильным номером тикета и работал нормально, буквально пару строчек нужно, чтоб в советник засунуть, я что-то никак не научусь. Заранее спасибо.



Проверить есть ли рыночные ордера.

Если есть, проверить есть ли отложенники

Если есть, удалить

 
eugggy:
Я так и делал циклом for, но у меня путаница начинается, OrdersTotal() возвращает количество ордеров (2), если я вычту единицу, то какой ордер будет выбран: первый или второй, ну а дальше та же путаница с тикетами. В общем ошибка 4108 - неправильный номер тикета, и ещё Alert(Ticket) возвращает номер больше 0, даже если советник только запущен и ордеров нет.

Разберись внимательно: SELECT_BY_TICKET или SELECT_BY_POS ???

Почитай в справке про OrderSelect()

SELECT_BY_TICKET номера ордеров на сервере компании, например #12345 и #12399

SELECT_BY_POS номера ордеров "в личном списке", т.е. для двух ордеров один будет иметь #0, другой #1

 
eugggy:
Если так оставлю, правильно будет? Вроде работает, может какие return или RefreshRates нужны, одним словом будет работать в реале?


Нет, не будет

 

eugggy:
А нельзя ли подробнее? Нельзя))). Я имею ввиду, если сильно не придираться, где, что, неправильно и как исправить?

Я так и делал циклом for, но у меня путаница начинается, OrdersTotal() возвращает количество ордеров (2), если я вычту единицу, то какой ордер будет выбран: первый или второй, ну а дальше та же путаница с тикетами. В общем ошибка 4108 - неправильный номер тикета, и ещё Alert(Ticket) возвращает номер больше 0, даже если советник только запущен и ордеров нет.



Вам же ответили подробно и без придирок:

Vinin :


Проверить есть ли рыночные ордера.

Если есть, проверить есть ли отложенники

Если есть, удалить Разными последовательными циклами for
 
eugggy:
А нельзя ли подробнее? Нельзя))). Я имею ввиду, если сильно не придираться, где, что, неправильно и как исправить?


Я повторюсь.

Проверить что есть рыночный ордер,

Если есть, проверить что е сть отложенник.

Если есть, то удалить.

Если что, то код завтра набросаю. Хотя где то в этой ветке уже это было.

 
eugggy:
Я понимаю, но это для вас легко, двумя for проверить, а я попробовал - не получается, поэтому и спрашиваю. Как будто я программист с 5-ти летним стажем. На счёт нельзя))) - это я в шутку.
выложи весь свой код сюда
 
eugggy:
Мысль я понял, но с осуществлением у меня проблемы, плохо знаком с перебором ордеров, в справке почти ничего нет, в учебнике не для средних умов написано. В общем набросайте код, если не сложно или может книги какие есть по MQL4, чтоб простой человек понять мог.

и ещё своими словами изложить, что должен советник делать