Закрытие ордера через заданное время независимо от прибыльности. Не получается че-то.

 

Всех с наступающим!!!

Задача - закрыть ордера (ранее открытые) ровно через сутки.

Такой код :

     for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(TimeCurrent()-OrderOpenTime()>3600*24)
        {
         if(OrderType()==OP_BUY)
           {
             OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
            
            return(0); // exit
           }
         else
           {
             OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
             
             return(0); // exit
           }  
          }
          
       }  

 

Не работает этот код.

Помогите пожалуйста.

 

total задал?

int total = OrdersTotal();

 

Да, есть выше в программе

//     }
// ради упрощения и ускорения кода, сохраним необходимые
// данные индикаторов во временных переменных
   MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
   MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
   SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
   SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
   MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);
   MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);
 
   total=OrdersTotal();

КОД ПРОЦЕДУРЫ АНАЛИЗА НА ЗАКРЫТИЕ ПРАВИЛЬНЫЙ? 

 

ДА КАРОЧЕ!!!

КАКОЙ НАХ НЕ РАБОТАЕТ КОД!

ПОТОМ, ЗАВТРА ИЛИ КОГДА НИБУДЬ РАЗБЕРУСЬ.

С НОВЫМ ГОДОМ ВСЕХ! Проводим старый!

 
ArtemKolesnikov писал(а) >>

ДА КАРОЧЕ!!!

КАКОЙ НАХ НЕ РАБОТАЕТ КОД!

ПОТОМ, ЗАВТРА ИЛИ КОГДА НИБУДЬ РАЗБЕРУСЬ.

С НОВЫМ ГОДОМ ВСЕХ! Проводим старый!

Нннналивай!!! дзинннньььь... урра!!!!!!!!!!!!!!!

*

может так:

for(cnt=0; cnt>OrdersTotal()-1 ;cnt--)
 

Комбат, Спасибо!

Я у себя разобрался. Код работает нормально, а все проблемы были в лишнем return(0) выше по программе в теле оператора if...

И вопрос:

ЧТО ОЗНАЧАЕТ ОПЕРАТОР return(0) в теле оператора if  в теле общей функции start???

То, что если он выполнится то это значит выход из функции start??? А что за параметр ноль в скобках???

Спасибо!

 
ArtemKolesnikov >>:

Комбат, Спасибо!

Я у себя разобрался. Код работает нормально, а все проблемы были в лишнем return(0) выше по программе в теле оператора if...

И вопрос:

ЧТО ОЗНАЧАЕТ ОПЕРАТОР return(0) в теле оператора if в теле общей функции start???

То, что если он выполнится то это значит выход из функции start??? А что за параметр ноль в скобках???

Спасибо!

1. Не мешало бы добавить условие к else:

else if(OrderType()==OP_SELL)

т.к. в противном случае советник будет гасить всё что ни попадя (отложки ...)

2. Переменную total нужно объявить как целую:

int total=OrdersTotal();

3. Оператор return производит выход из функции, в которой он встречается. Если функция объявлена не как void, т.е. она должна возвращать значение, то в скобках после оператора return это значение и указывается.

 
goldtrader >>:

1. Не мешало бы добавить условие к else:

т.к. в противном случае советник будет гасить всё что ни попадя (отложки ...)

2. Переменную total нужно объявить как целую:

3. Оператор return производит выход из функции, в которой он встречается. Если функция объявлена не как void, т.е. она должна возвращать значение, то в скобках после оператора return это значение и указывается.


Спасибо огромное!!!

 
goldtrader писал(а) >>

1. Не мешало бы добавить условие к else:

т.к. в противном случае советник будет гасить всё что ни попадя (отложки ...)

Добавить конечно не мешает... что-б ошибок не было.

а вот "гасить усё подряд" не будет, ;)))

потому что для отложек есть: OrderDelete()

Причина обращения: