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

 
Izdesbyll:

Помогите пожалуйста! пишу:

Ошибка 0 а ордер не закрывает! Что не так?

А почему нормализуете цену до двух? До Digits нужно. А проще писать OrderClosePrice() вместо Bid
 

А может быть что оно закрыло часть ордера???

А если так попробывать что пишет?

double bylo = OrderLots();
if (OrderClose( OrderTicket(), 0.1, NormalizeDouble(Bid,2), 1 ))    Alert ("  Закрито частину лоту в розмірі 0.1 від ",bylo);
else Alert("Маємо помилку ",GetLastError());
 

artmedia70:
А почему нормализуете цену до двух? До Digits нужно. А проще писать OrderClosePrice() вместо Bid


 OrderClose( OrderTicket(), 0.1, OrderClosePrice(), 1 );  
      Alert("Маємо помилку ",GetLastError());

Теперь дает ошибку 4051

 
ALXIMIKS:

А может быть что оно закрыло часть ордера???

А если так попробывать что пишет?



bylo = 0.1 і далі не закриває мій ордер. алерт дає 0
 
Теперь вообще глюк, пишу:
 double p[100];
 p[i+1] = OrderProfit();
 if (p[i+1]>0) 
    {
      Alert("Є прибуток ордер ",i+1);
      OrderSelect(i+1,SELECT_BY_POS,MODE_TRADES); 
      Alert("Маємо помилку ",GetLastError());
      Alert("Вибрали ордер ",i+1);
      OrderClose( OrderTicket(), 0.1,  NormalizeDouble(Bid,Digits), 1 );  
      Alert("Маємо помилку ",GetLastError());
      Alert("Закрили ордер ",i+1); 

і+1 = 2 причем везде, а закрывать начало третий ордер.

 
Izdesbyll:

Помогите пожалуйста! пишу:

Ошибка 0 а ордер не закрывает! Что не так?

А если так попробовать:

    double ld_Price;
    if (OrderType() == 0) ld_Price = NormalizeDouble (Bid, Digits);
    else ld_Price = NormalizeDouble (Ask, Digits);
    OrderClose (OrderTicket(), OrderLots(), ld_Price, 2);

И не забыть перед процедурой удаления ВЫДЕЛИТЬ соответствующий ордер!!!

 
Izdesbyll:
Теперь вообще глюк, пишу:

і+1 = 2 причем везде, а закрывать начало третий ордер.

Если собираете в массив тикеты, то ВЫДЕЛЯТЬ ордер нужно по ТИКЕТУ, а не по какому-то своему списку (порядку).
 
TarasBY:

А если так попробовать:

И не забыть перед процедурой удаления ВЫДЕЛИТЬ соответствующий ордер!!!


if (p[i+1]>0) 
    {
      Alert("Є прибуток ордер ",i+1);
      OrderSelect(i+1,SELECT_BY_POS,MODE_TRADES); 
      Alert("Маємо помилку ",GetLastError());
      Alert("Вибрали ордер ",i+1);
      double ld_Price;
      if (OrderType() == 0) ld_Price = NormalizeDouble (Bid, Digits);
      else ld_Price = NormalizeDouble (Ask, Digits);
      OrderClose (OrderTicket(), OrderLots(), ld_Price, 2);  
      Alert("Маємо помилку ",GetLastError());
      Alert("Закрили ордер ",i+1); 

ТРЕТИЙ ордер закрывает GetLastError = 0, i+1=2, OrderProfit() отвечает прибили ВТОРОГО ордера. помогите.... Я бы написал (OrderTicket()-1) но боюсь что не поможет

 
Izdesbyll:

ТРЕТИЙ ордер закрывает GetLastError = 0, i+1=2, OrderProfit() отвечает прибили ВТОРОГО ордера. помогите.... Я бы написал (OrderTicket()-1) но боюсь что не поможет

не умеете читать (если, конечно, в массиве p[] номера тикетов)!

    OrderSelect (p[i+1], SELECT_BY_TICKET, MODE_TRADES); 

...вообще по кусочку кода отловить "глупость" очень тяжело... :)

 
Здравствуйте! Скажите кто-нибудь пожалуйста, есть своеобразный блок закрытия всех ордеров (в том числе стерание отложек) если все с разными мэджик номерами, в диапазоне 1-60. Если таковой имеет место быть, пожалуйста напишите. И если не затруднит с инструкцией, куда его нужно вставить (а то совсем зеленый в mql). Заранее спасибо.

Забыл сказать, хотелось бы чтобы закрытие производилось по проценту прибыли от депо.
Причина обращения: