Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 963

 

да atztek, извиняюсь за неточность в описании:

1.  потому-что до пересечения с МА это были buy-stop ордера и Ur1 Ur2 Ur3 выясняются только после пересечения цены с MA.

2. и  соответственно вышеупомянутый for-цикл ищет среди всех ордеров buy-ордера (т.к. там есть еще 3 sell-stop ордера и они ползут по другой MA на каждой свече) 

 
vadimvborisov:


да atztek, извиняюсь за неточность в описании:

1.  потому-что до пересечения с МА это были buy-stop ордера и Ur1 Ur2 Ur3 выясняются только после пересечения цены с MA.

2. и  соответственно вышеупомянутый for-цикл ищет среди всех ордеров buy-ордера (т.к. там есть еще 3 sell-stop ордера и они ползут по другой MA на каждой свече) 

1. Вы же говорили:
Советник открывает (на основании пересечения с MA ) несколько (3) рыночных ордеров

Стоп ордера становятся рыночными в момент пересечения их ценой, МА здесь не при чем.
Ну ладно, Вам решать как работает Ваш советник.

2. Каково назначение - ?
 bool mod_Buy1 = OrderModify ( OrderTicket(???),OrderOpenPrice (), NULL,Ur1,0,clrNONE);
 bool mod_Buy2 = OrderModify ( OrderTicket(???),OrderOpenPrice (), NULL,Ur2,0,clrNONE);
 bool mod_Buy3 = OrderModify (OrderTicket(???),OrderOpenPrice (), NULL,Ur3,0,clrNONE);

Т.е. за каждый цикл в "for" Вы видите один ордер, а не все три одновременно.
 

atztek, 1. мой первый пост я уже поправил.

2.  Назначение bool mod_Buy1 = Модифицировать ордер ( OrderTicket(первый BUY из перебранных ),Цену открытия не изменяем, Стоплос не изменяем,Тейкпровит берем из Ur1,0,clrNONE);

"Т.е. за каждый цикл в "for" Вы видите один ордер, а не все три одновременно." 

В этом-то всё и дело, что я не могу сообразить, как перебрать эти 3 ордера по тикетам и каждому из них  расставить соответствующие уровни Тейкпрофит (Ur1 Ur2 Ur3).

 
vadimvborisov:

atztek, 1. мой первый пост я уже поправил.

2.  Назначение bool mod_Buy1 = Модифицировать ордер ( OrderTicket(первый BUY из перебранных ),Цену открытия не изменяем, Стоплос не изменяем,Тейкпровит берем из Ur1,0,clrNONE);

"Т.е. за каждый цикл в "for" Вы видите один ордер, а не все три одновременно." 

В этом-то всё и дело, что я не могу сообразить, как перебрать эти 3 ордера по тикетам и каждому из них  расставить соответствующие уровни Тейкпрофит (Ur1 Ur2 Ur3).


1. Или я не понимаю Вас, или Вы не знаете что хотите сделать (или как это работает).
Вы даже после исправления говорите о том что у Вас были стоп-ордера, а потом "после пересечения с МА" они стали рыночными.
- Вы либо сразу открываете рыночные ордера (например "после пересечения с МА"), либо открываете стоп-ордера, которые автоматически станут рыночными в момент когда цена их пересечет.

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

1) да именно так - "открываете стоп-ордера, которые автоматически станут рыночными в момент когда цена их пересечет."

2)  Других (рыночных) ордеров в момент преобразования лимитных в рыночные нет, есть только лимитные. Может быть можно выбрать и по позиции а не по тикету - я не против. Хорошо. давайте рассмотрим ситуацию с Двумя ордерами. потому-что с Одним я и сам разберусь....

 
vadimvborisov:

1) да именно так - "открываете стоп-ордера, которые автоматически станут рыночными в момент когда цена их пересечет."

2)  Других (рыночных) ордеров в момент преобразования лимитных в рыночные нет, есть только лимитные. Может быть можно выбрать и по позиции а не по тикету - я не против. Хорошо. давайте рассмотрим ситуацию с Двумя ордерами. потому-что с Одним я и сам разберусь....

Уже и лимитные появились?
Хорошо, приступайте. Когда разберетесь с одним тогда и остальные станут понятны.
 
vadimvborisov:

1) да именно так - "открываете стоп-ордера, которые автоматически станут рыночными в момент когда цена их пересечет."

2)  Других (рыночных) ордеров в момент преобразования лимитных в рыночные нет, есть только лимитные. Может быть можно выбрать и по позиции а не по тикету - я не против. Хорошо. давайте рассмотрим ситуацию с Двумя ордерами. потому-что с Одним я и сам разберусь....

Вот именно это и надо.

int i, total = OrdersTotal();
for(i = 0; i < total; i++)
{
 if(OrderSelect(i, SELECT_BY_POS) && OrderType() == OP_BUY)
  {
   bool mod_Buy1 = Модифицировать ордер ( OrderTicket(i-тый BUY из перебранных )
  }
}
 

1. пардон ошибся я имел ввиду стоп-ордера.

2. с 1 всё работает. а с двумя и более не получается разобраться....

 

приветствую, AlexeyVik

 bool mod_Buy1 = Модифицировать ордер ( OrderTicket(i-тый BUY из перебранных )

а для двух остальных как?  Так-же?

////////////////////////////
 int i, total = OrdersTotal();
for(i = 0; i < total; i++)
{
 if(OrderSelect(i, SELECT_BY_POS) && OrderType() == OP_BUY)
  {
   bool mod_Buy1 = Модифицировать ордер ( OrderTicket(i-тый BUY из перебранных )
   bool mod_Buy2 = Модифицировать ордер ( OrderTicket(i-тый BUY из перебранных )
   bool mod_Buy3 = Модифицировать ордер ( OrderTicket(i-тый BUY из перебранных )
  }
}
 
vadimvborisov:

приветствую, AlexeyVik

 bool mod_Buy1 = Модифицировать ордер ( OrderTicket(i-тый BUY из перебранных )

а для двух остальных как?  Так-же?

Обрати внимание на цикл в моём примере. В цикле перебираются все ордера, проверяются по типу, ещё надо проверить по символу и магику и не мешало-бы в твоём случае на OrderStopLoss() == 0 или OrderTakeProfit() == 0 в зависимости что важней, может-ли быть ситуация оставления ордера без стопа или без тейка, для того чтобы не пытаться модифицировать ордер без нужды и не получать ошибку 1.

В этом цикле поочерёдно выбираются ордера и при соблюдении всех условий отправляется на модификацию. Таким образом будут модифицированы все нужные ордера.

Второй вариант: Если предусмотрено только 3 ордера, можно на уровне глобальных переменных объявить, к примеру, int tick_buy_1, tick_buy_2, tick_buy_3 и при открытии ордеров записать тикеты в эти переменные. Тогда можно будет выбирать ордер по тикету, проверять его тип, не закрыт-ли ордер и только тогда  и уже без цикла

   bool mod_Buy1 = Модифицировать ордер ( tick_buy_1 );
   bool mod_Buy2 = Модифицировать ордер ( tick_buy_2 );
   bool mod_Buy3 = Модифицировать ордер ( tick_buy_3 );
Причина обращения: