[Пытаюсь написать советник по индикатору QQEA] Нужна помощь - страница 2

 

все элементарно.

перебираем цикл 2 раза, первый раз записываем в массив все тикеты и их профит, далее сортируем массив, и методом перебора массива закрываем тикеты с самого прибыльного

 
Vladon:

все элементарно.

перебираем цикл 2 раза, первый раз записываем в массив все тикеты и их профит, далее сортируем массив, и методом перебора массива закрываем тикеты с самого прибыльного

спасибо, а на каком-нибудь примере более подробно можно?

 
PGM5:

Помогите, пожалуйста в написании пользовательской функции, которая закрывает все позиции, начиная с той, у которой самая большая прибыль.Заранее благодарен!



Функция ClosePosBySortLots().

 
:-) вотс
 

Так будет значительно быстрее :

int CloseByMaxProfit(int mn,string sy=""){int i,ii,co;double ords[1000][2];
   for(i=OrdersTotal()-1;i>=0;i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(sy!=""){if(OrderSymbol()!=sy){continue;}}
         if(OrderMagicNumber()!=mn){continue;}
         ords[ii][0]=OrderProfit()+OrderSwap()+OrderCommission();
         ords[ii][1]=OrderTicket();
         ii++;
      }
   }
   ArrayResize(ords,ii);
   ArraySort(ords);
   for(i=ii-1;i>=0;i--){
      int ticket = ords[i][1];
      if(OrderSelect(ticket,SELECT_BY_TICKET)){
         if(OrderCloseTime()!=0){continue;}
         if(!OrderClose(OrderTicket(),
                          OrderLots(),
                    OrderClosePrice(),
MarketInfo(OrderSymbol(),MODE_SPREAD),
                                White)
                        ){
                           Print("Order Close ERROR :"+GetLastError());
                        }else{
                           co++;
                        }
      }
   }
   return(co);
}
 
FAQ:

Так будет значительно быстрее :

Вызываю эту функцию следующим образом: CloseByMaxProfit(); а он при компиляции пишет : ')' - wrong parameters count . Объясните, пожалуйста, что я делаю не так?
 

:-)

внутри функции параметры которые нужно указать.

int mn,string sy=""

магик и символ, либо поменять функцию на :

int CloseByMaxProfit(int mn=-1,string sy=""){int i,ii,co;double ords[1000][2];
   for(i=OrdersTotal()-1;i>=0;i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(sy!=""){if(OrderSymbol()!=sy){continue;}}
         if(OrderMagicNumber()!=mn && mn!=-1){continue;}
         ords[ii][0]=OrderProfit()+OrderSwap()+OrderCommission();
         ords[ii][1]=OrderTicket();
         ii++;
      }
   }
   ArrayResize(ords,ii);
   ArraySort(ords);
   for(i=ii-1;i>=0;i--){
      int ticket = ords[i][1];
      if(OrderSelect(ticket,SELECT_BY_TICKET)){
         if(OrderCloseTime()!=0){continue;}
         if(!OrderClose(OrderTicket(),
                          OrderLots(),
                    OrderClosePrice(),
MarketInfo(OrderSymbol(),MODE_SPREAD),
                                White)
                        ){
                           Print("Order Close ERROR :"+GetLastError());
                        }else{
                           co++;
                        }
      }
   }
   return(co);
}
 
Vladon:

:-)

внутри функции параметры которые нужно указать.

int mn,string sy=""

магик и символ, либо поменять функцию на :

 

советник написан для четырёхзначного брокера, а как сделать так, чтобы он торговал на пятизначном?

 

Помогите, пожалуйста в написании советника, который открывал бы позицию, противоположную предыдущей свечке в определенное время на 15-минутках. Заранее благодарен.

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