Скачать MetaTrader 5

Подскажите почему не закрываются ордера

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Сотни статей помогут создать торгового робота. Заходи и изучай!
liza
1051
liza 2014.12.08 08:54 
      
int cbd()
{
double oct=0, a = allprofit()*10;
int j=-1;

for(int i=OrdersTotal()-1;i>=0;i--){
 if(a > profit*lot) {
  if(OrderType() != OP_BUY || OrderType() != OP_SELL) continue;
   { 
   if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) continue;  
   if(OrderSymbol()!=Symbol())continue;
   { 
   if (oct>OrderProfit()) { oct=OrderProfit(); j=i;}           
   if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES)) 
      {
      if(OrderType() == OP_BUY)
      {
        OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
      }
     else if (OrderType() == OP_SELL)
      { 
      OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
      }
      }}}}}
 return(0);
 }      

Vitalie Postolache
12135
Vitalie Postolache 2014.12.08 09:09  

А ошибок никаких?

И зачем два раза OrderSelect?

liza
1051
liza 2014.12.08 09:28  

Ошибок нет.

Второй select для того чтобы

выбирать по наименьшему profit'у 

Victor Nikolaev
Модератор
14520
Victor Nikolaev 2014.12.08 09:46  
liza:

Ошибок нет.

Второй select для того чтобы

выбирать по наименьшему profit'у 

Возможно это условие  if(a > profit*lot)  всегда ложно
liza
1051
liza 2014.12.08 10:07  

Выводила на Print(allprofit(), "   ",profit*lot); 

Не всегда оно ложно 

Александр
1081
Александр 2014.12.08 10:14  
Похоже, что выражение всегда continue.
if(OrderType() != OP_BUY || OrderType() != OP_SELL) continue;
liza
1051
liza 2014.12.08 10:54  
Нет, у меня приутствуют ордера по рынку
Victor Nikolaev
Модератор
14520
Victor Nikolaev 2014.12.08 11:14  
liza:
Нет, у меня приутствуют ордера по рынку

А Вы Print() поставьте после условия.

 

if(OrderType() != OP_BUY || OrderType() != OP_SELL) continue;
Print("Отлично, идем дальше");
Александр
1081
Александр 2014.12.08 12:13  

Сделайте, так

if(OrderType() == OP_BUY || OrderType() == OP_SELL) {  
   ... остальной код
}
liza
1051
liza 2014.12.08 18:04  

Не работает!

Просто бред како1-то!!! 

Vladyslav Goshkov
2073
Vladyslav Goshkov 2014.12.08 19:52  
liza:

Не работает!

Просто бред како1-то!!! 

int cbd()
{
double oct=0, a = allprofit()*10;
int j=-1;

for(int i=OrdersTotal()-1;i>=0;i--){
 if(a > profit*lot) {
  if(OrderType() != OP_BUY || OrderType() != OP_SELL) continue; <-- А с какими ордерами Вы работаете в этом месте, 
                                                                    если Вы выбор ордера делаете ниже ?
   { <-- Это к чему относится ? Просто интересно зачем ?
   if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) continue<-- Это первый выбор, а до этого с какими ордерами Вы работали ?
   if(OrderSymbol()!=Symbol())continue;
   { <-- А Это к чему относится ? Просто интересно зачем ?
   if (oct>OrderProfit()) { oct=OrderProfit(); j=i;}           
   if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES)) <-- Чему будет равно j, если условие выше не сработает ?
      {
      if(OrderType() == OP_BUY)
      {
        OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
      }
     else if (OrderType() == OP_SELL)
      { 
      OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
      }
      }}}}}
 return(0);
 }      
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий