Сова работает только в Sell, помогите исправить

 

Ребят помогите с советником, вроде все правильно написал, но он открывает позиции только в Sell в Buy не хочет, если переписываю, то только в Buy работает.

код совы

 

 

extern int Period_PCh = 20; // период Price Channel
extern int TP = 20; // Величина TakeProfit в пипсах
extern double Lots = 0.01;

int start()
  {
   double Price_Channel_UP,Price_Channel_DOUN;
   double MA_Fast,MA_Low;
   int cnt, ticket, total;
 
// присвоение переменным значений
      Price_Channel_UP=iCustom(NULL, 0, "Price Channel1",Period_PCh,0,2);
      Price_Channel_DOUN=iCustom(NULL, 0, "Price Channel1",Period_PCh,1,2);

   total=OrdersTotal();
   if(total<1) // если нет позиций
     {
   //  OrderSelect(OrdersHistoryTotal( )-1, SELECT_BY_POS, MODE_HISTORY);
      if(High[1]>Price_Channel_UP)
        {
        OrderSend(Symbol(),OP_BUY,Lots*1,Open[0],222,1300,Open[0]+TP*Point,"покупка",16384,0,Green);
        }
      
      // открытие короткой позиции
      if(Low[1]<Price_Channel_DOUN)
        {
         OrderSend(Symbol(),OP_SELL,Lots*1,Open[0],100,1300,Open[0]-TP*Point,"продажа",16384,0,Red);
        }
     }
       
    total=OrdersTotal();
    for(cnt=0;cnt<total;cnt++)
    {//1
         OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
         if(OrderType()<=OP_SELL &&    
         OrderSymbol()==Symbol())  
         {
         if(OrderType()==OP_BUY)
            {
               if(Low[1]<Price_Channel_DOUN)
                {
                     if(Open[0]<Low[1])
                     {
                     OrderClose(OrderTicket(),OrderLots(),Open[0],5,Red);
                                      
                     return(0);
                     }
                  OrderModify(OrderTicket(),OrderOpenPrice(),Low[1]-10*Point ,0,0,Red);
                  return(0);
                }
            }
            if(OrderType()==OP_SELL)
            {
               if(High[1]>Price_Channel_UP)
                  {
                  if(Open[0]>High[1])
                     {
                     OrderClose(OrderTicket(),OrderLots(),Open[0],5,Red);
                     return(0);
                     }    
                  OrderModify(OrderTicket(),OrderOpenPrice(),High[1]+10*Point ,0,0,Red);
                  return(0);
                  }
            }
         }
    }
return(0);
}

 

 

код индюка  

//+------------------------------------------------------------------+
//|                                                Price Channel.mq4 |
//|                                                                  |
//|                                       http://forex.kbpauk.ru/    |
//+------------------------------------------------------------------+

#property link      "http://forex.kbpauk.ru/"
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 DodgerBlue

//---- input parameters
extern int ChannelPeriod = 14;

//---- buffers
double UpBuffer[];
double DnBuffer[];
double MdBuffer[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

int init()
  {
   string short_name;
//---- indicator line

   SetIndexStyle(0, DRAW_LINE);
   SetIndexStyle(1, DRAW_LINE);
   SetIndexStyle(2, DRAW_LINE);

   SetIndexBuffer(0, UpBuffer);
   SetIndexBuffer(1, DnBuffer);
   SetIndexBuffer(2, MdBuffer);

//---- name for DataWindow and indicator subwindow label

   short_name="Price Channel("+ChannelPeriod+")";

   IndicatorShortName(short_name);

   SetIndexLabel(0, "UpCh");
   SetIndexLabel(1, "DownCh");
   SetIndexLabel(2, "MidCh");

//----

   SetIndexDrawBegin(0, ChannelPeriod);
   SetIndexDrawBegin(1, ChannelPeriod);
   SetIndexDrawBegin(2, ChannelPeriod);

//----

   return(0);

  }

//+------------------------------------------------------------------+
//| Price Channel                                                         |
//+------------------------------------------------------------------+

int start()
  {
   int i, counted_bars = IndicatorCounted();
   int    k;
   double high, low, price;

//----
   if(Bars <= ChannelPeriod) 
       return(0);

//---- initial zero
   if(counted_bars < 1)
      for(i = 1;i <= ChannelPeriod; i++) 
          UpBuffer[Bars-i] = 0.0;

//----
   i = Bars - ChannelPeriod - 1;
   if(counted_bars >= ChannelPeriod) 
       i = Bars - counted_bars - 1;

   while(i >= 0)
     {
       high = High[i]; 
       low = Low[i]; 
       k = i - 1 + ChannelPeriod;
       while(k >= i)
         {
           price = High[k];
           if(high < price) 
               high = price;
           price = Low[k];
           if(low > price)  
               low = price;
           k--;
         } 
       UpBuffer[i] = high;
       DnBuffer[i] = low;
       MdBuffer[i] = (high + low) / 2;
       i--;
     }
   return(0);
  }
//+------------------------------------------------------------------+ 
 
Для вставки кода в редакторе есть кнопка SRC. Редактор для новых комментариев на форуме. Исправьте пожалуйста пост, если конечно хотите получить ответ
 
Alfavite:

Ребят помогите с советником, вроде все правильно написал, но он открывает позиции только в Sell в Buy не хочет, если переписываю, то только в Buy работает.

Может поможет

  • Рыночный ордер
    Рыночный ордер — это распоряжение брокерской компании купить или продать финансовый инструмент по текущей цене. Исполнение данного ордера приводит к открытию торговой позиции. Покупка происходит по цене Ask (цена спроса), а продажа — по Bid (цена предложения). К рыночному ордеру можно прикрепить ордера Стоп Лосс и Тейк Профит (эти ордера описаны ниже). Режим исполнения рыночных ордеров зависит от финансового инструмента.

 

Как ни странно, но в  справке про Open[0] ничего не говорится. Есть Ask и есть Bid.

И необходимо на ошибки проверять открытие позиций