Помогите плиз. Ну не могу я в поиске найти, то что нужно.

 

Здрасте всем. Помогите кто может.

У меня при написании эксперта возникли некоторые сложности.

Для начала опишу немного что долен делать эксперт.

1. Я определил сигнал на покупку или продажу, купил или продал соответственно.
2. На следующем баре опять проверил, если нет противоположного сигнала или сигнала для закрытия, опять открыл токую же позицию. И так на каждом новом бере.
3. При появлении сигнала для закрытия, мне нужно чтобы сразу закрылись все открытые позиции по предыдущему сигналу.

Вроде просто, а не получаеться.

 

когда открыл ордер запоминай время открытия, чтобы на баре два раза не открыться. Синал открытия запоминай в переменную типа статик. Когда будет сигнал на закрытие или противоположное открытие - обнуляй ее. Если сигнал открытия не равен нулю, то перед открытие проверяй время последнего открытия.

На одном тике много позиций не получится закрыть, поэтому сигнал закрытия тоже надо в переменной типа статик запоминать, после блока закрытия делать проверку на закрытость, если все закрыты, то обнулять ее. И еще немного логики...

 
Не могу сделать, вот код:

//+------------------------------------------------------------------+
//|                                                    MoneyPlus.mq4 |
//|                             Copyright © 2006, Victor Chebotariov |
//|                                      http://www.chebotariov.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Victor Chebotariov"
#property link      "http://www.chebotariov.com/"
 
#define MAGICMA  21072006
 
extern int    PERIOD = 30;
extern int    SHIFT = 0;
extern double LOTS = 0.1;
 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   int cnt, ticket;
   int total=OrdersTotal();
        
   if(!GlobalVariableCheck("Symbol()"+"MAGICMA"+"TimeBuySell") || GlobalVariableGet("Symbol()"+"MAGICMA"+"TimeBuySell")!=Time[0])
     {
       if(условие для покупки)
        {
         ticket=OrderSend(Symbol(),OP_BUY,LOTS,Ask,3,0,0,"MoneyPlus",MAGICMA,0,Green);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
            GlobalVariableSet("Symbol()"+"MAGICMA"+"TimeBuySell",Time[0]);
           }
         else Print("Error opening BUY order : ",GetLastError()); 
         return(0); 
        }
      if(условие для продажи)
        {
         ticket=OrderSend(Symbol(),OP_SELL,LOTS,Bid,3,0,0,"MoneyPlus",MAGICMA,0,Red);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
            GlobalVariableSet("Symbol()"+"MAGICMA"+"TimeBuySell",Time[0]);
           }
         else Print("Error opening SELL order : ",GetLastError()); 
         return(0); 
        }
     }
 
   if(усломвие для закрытия всех позиций на покупку)
     {
      for(cnt=0;cnt<total;cnt++)
        {
         OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
         if(OrderType()==OP_BUY && OrderSymbol()==Symbol())
           {
            OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
            return(0);
           }
        }
     }
 
   if(усломвие для закрытия всех позиций на продажу)
     {
      for(cnt=0;cnt<total;cnt++)
        {
         OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
         if(OrderType()==OP_SELL && OrderSymbol()==Symbol())
           {
            OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
            return(0);
           }
        }
     }
     
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
В общем-то первая чать работает, позиции открываються один раз при новом баре, а вот закрываться при сигнале к закрытию никак не хотят.
 

Об этом уже говорили - вместо:

for(cnt=0;cnt<total;cnt++)

нужно:

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

Ты закрыл элемент 0 и тогда тот, который был 1, стал 0. И т.д.

 

Спасибо. Все отлично работает.

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