не открываеться позиция sell

 

начал писать советника. запускаю на тестере визуализацию. и почему то открывает только позиции buy. не могу понять в чем проблема. подскажите

//---- input parameters
extern double    Lots=0.1;
extern int       magic=2;
extern int       j=0;
extern string    profit="no_loss and stop_loss";
extern int       SL=20;
extern int       NL=20;
extern string    set_macd="настройки MACD";
extern int       fast_ema=15;
extern int       slow_ema=26;
extern int       signal=1;
extern string    set_alligator="настройки Alligator";
extern int       jaw_period=21;
extern int       jaw_shift=8;
extern int       teeth_period=13;
extern int       teeth_shift=5;
extern int       lips_period=8;
extern int       lips_shift=3;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
int order_type, order_magic;
int b_orders, s_orders;
for (int i=1; i<=OrdersTotal(); i++)                    //Цикл по всем ордерам,..     
      {                                                  //отражённым в терминале      
      if(OrderSelect(i-1,SELECT_BY_POS)==true)           //Если есть следующий        
         {                                               // Здесь должен выполняться анализ характеристик ордеров   
          //--------------------
         order_type=OrderType();
         order_magic=OrderMagicNumber();
            if(order_type==0 && order_magic==magic)             // выбран ордер buy 
               {b_orders++;}
            if(order_type==1 && order_magic==magic)             // выбран ордер sell 
               {s_orders++;}
          //--------------------
         }     
       }
//--------------------------------------------------------------------
// настройки alligator
double jaw = iAlligator(NULL, 0, jaw_period, jaw_shift, teeth_period, teeth_shift, lips_period, lips_shift, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW, j);
double teeth = iAlligator(NULL, 0, jaw_period, jaw_shift, teeth_period, teeth_shift, lips_period, lips_shift, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, j);
double lips = iAlligator(NULL, 0, jaw_period, jaw_shift, teeth_period, teeth_shift, lips_period, lips_shift, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, j);
//----
// настройки MACD
double macd_0 = iMACD(NULL, 0, fast_ema, slow_ema, signal, PRICE_CLOSE, MODE_MAIN, j);
double macd_1 = iMACD(NULL, 0, fast_ema, slow_ema, signal, PRICE_CLOSE, MODE_MAIN, j+1);
//--------------------------------------------------------------------
// открытие ордеров
if (NewBar()==true && Ask>jaw && Ask>teeth && Ask>lips && b_orders==0)           // открытие buy
   {
    OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, Bid-SL*Point, 0, "buy_ALL&MACD", magic, 0, CLR_NONE);
   }
//----
if (NewBar()==true && Bid<jaw && Bid<teeth && Bid<lips && s_orders==0)           // открытие sell
   {
    OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, Ask+SL*Point, 0, "sell_ALL&MACD", magic, 0, CLR_NONE);
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+
bool NewBar(){

    static int PrevTime=0;
    if (PrevTime==Time[0]) return(false);
    PrevTime=Time[0];
    return(true);
}    
заранее благодарен!
 

Попробуйте проинициализировать переменные b_orders и s_orders:

int b_orders = 0, s_orders = 0;
 
Scriptong >>:

Попробуйте проинициализировать переменные b_orders и s_orders:


сделал. не помогает...

 

Все очень просто - вы слишком рано даете новое значение переменной PrevTime и до SELL дело просто не доходит.

Нужно сделать так:

datetime PrevTime = 0;
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
int order_type, order_magic;
int b_orders = 0, s_orders = 0;
if (PrevTime==Time[0]) return(0);

for (int i=1; i<=OrdersTotal(); i++)                    //Цикл по всем ордерам,..     
      {                                                  //отражённым в терминале      
      if(OrderSelect(i-1,SELECT_BY_POS)==true)           //Если есть следующий        
         {                                               // Здесь должен выполняться анализ характеристик ордеров   
          //--------------------
         order_type=OrderType();
         order_magic=OrderMagicNumber();
            if(order_type==0 && order_magic==magic)             // выбран ордер buy 
               {b_orders++;}
            if(order_type==1 && order_magic==magic)             // выбран ордер sell 
               {s_orders++;}
          //--------------------
         }     
       }
//--------------------------------------------------------------------
// настройки alligator
double jaw = iAlligator(NULL, 0, jaw_period, jaw_shift, teeth_period, teeth_shift, lips_period, lips_shift, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW, j);
double teeth = iAlligator(NULL, 0, jaw_period, jaw_shift, teeth_period, teeth_shift, lips_period, lips_shift, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, j);
double lips = iAlligator(NULL, 0, jaw_period, jaw_shift, teeth_period, teeth_shift, lips_period, lips_shift, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, j);
//----
// настройки MACD
double macd_0 = iMACD(NULL, 0, fast_ema, slow_ema, signal, PRICE_CLOSE, MODE_MAIN, j);
double macd_1 = iMACD(NULL, 0, fast_ema, slow_ema, signal, PRICE_CLOSE, MODE_MAIN, j+1);
//--------------------------------------------------------------------
// открытие ордеров
if (Bid<jaw && Bid<teeth && Bid<lips && s_orders==0)           // открытие sell
   {
    OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, Ask+SL*Point, 0, "sell_ALL&MACD", magic, 0, CLR_NONE);
   }
if (Ask>jaw && Ask>teeth && Ask>lips && b_orders==0)           // открытие buy
   {
    OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, Bid-SL*Point, 0, "buy_ALL&MACD", magic, 0, CLR_NONE);
   }
PrevTime=Time[0];
//----
   return(0);
  }
    
 
спасибо. помогло
Причина обращения: