Как закрыть все открытые позиции при положит. общей прибыли??

  • Автор темы Автор темы molodoy88
  • Дата начала Дата начала

molodoy88

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

supervisor

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

Moleginov

Активный участник
Можно использовать для этого отдельный советник, к примеру вот этот.
Работает на основе трейлинга Equity, уровень прибыли настраивается.
 

Вложения

Юрий FT

Модератор
как закрыть все позиции

Код:
Expand Collapse Copy
//вставляем это в главную функцию
if((SummPos(1)+SummPos(0))>0) {CloseAllPos(1);CloseAllPos(0);}

//и добавляем все функции ниже (вне функции)

//суммирует результат позиций по типу
int SummPos(int type) 
{//подробное описание: http://fxnow.ru/blog.php?user=Yuriy&blogentry_id=100

   int i;double summ;
   for( i=1; i<=OrdersTotal(); i++)         
   {
      if(OrderSelect(i-1,SELECT_BY_POS)==true) 
       {                                   
           if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && type==1&& OrderMagicNumber()==MG){summ=summ+OrderProfit();}
           if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && type==0&& OrderMagicNumber()==MG){summ=summ+OrderProfit();}
       }
    }   
return(summ);
}

//Закрываем все позиции по типу
int CloseAllPos(int type)
{//Описание функции: http://fxnow.ru/blog.php?user=Yuriy&blogentry_id=72
int buy=1; int sell=1;
int i,b=0;int ordertiket;
 
 if(type==1)
   {
   while(buy==1)
     {
        buy=0;
        for( i=0;i<OrdersTotal();i++)
         {
           if(true==OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
           if(OrderType()==OP_BUY && OrderSymbol()==Symbol() ){buy=1; OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);}
           }else{buy=0;}
         }  
         if(buy==0){return(0);}
      } 
   }
   
   if(type==0)
   {
      while(sell==1)
     {
        sell=0;
        for( i=0;i<OrdersTotal();i++)
         {
           if(true==OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
           if(OrderType()==OP_SELL && OrderSymbol()==Symbol() ){sell=1;OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); }
           }else{sell=0;}
         }  
         
        if(sell==0){return(0);}
      } 
     }
   return(0);
   }
 
Верх