MQL4. Нет ордера на продажу

 

Здравствуйте! Сделки ставятся только на куплю. Хотя на продажу код прописан. Может у меня где-то ошибка? 

int start()
{
   int tiket;
   double ashi_1_0,ashi_1_1,ashi_1_2,ashi_1_3,lord_2_0;
   
if(Time[0] == prevtime)   
      return(0);  
   prevtime = Time[0];
   
   if (OrdersTotal()   == 0)
 {  
   ashi_1_0=iCustom(NULL,0,"Heiken_Ashi_Smoothed1lime",2,0,0);
   ashi_1_1=iCustom(NULL,0,"Heiken_Ashi_Smoothed1lime",6,1,0);
   ashi_1_2=iCustom(NULL,0,"Heiken_Ashi_Smoothed1lime",3,2,0);
   ashi_1_3=iCustom(NULL,0,"Heiken_Ashi_Smoothed1lime",2,3,0);
   
   lord_2_0=iCustom(NULL,0,"TrendLord1",21,0,0);
    
   if ((ashi_1_1<=ashi_1_2) && (ashi_1_0>ashi_1_3) && (lord_2_0<Bid))
   {
     tiket=OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),Slippage,0,0,"",Magic,0,clrGreen);
     if(tiket < 0) { Print("Ошибка при выборе ордера BUY #", GetLastError() ); prevtime = Time[1]; }
   }
   
   if ((ashi_1_1>=ashi_1_2) && (ashi_1_0<ashi_1_3) && (lord_2_0>Bid))
   {
     tiket=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),Slippage,0,0,"",Magic,0,clrGreen);
     if(tiket < 0) { Print("Ошибка при выборе ордера BUY #", GetLastError() ); prevtime = Time[1]; }
   }
 }
 
Anna_89:

Здравствуйте! Сделки ставятся только на куплю. Хотя на продажу код прописан. Может у меня где-то ошибка?

 И ещё: если вопрос по MQL4, то сразу, пожалуйста, указывайте это в названии темы.

 

А если по коду пройтись стилизатором:

void OnStart()
  {
   int tiket;
   double ashi_1_0,ashi_1_1,ashi_1_2,ashi_1_3,lord_2_0;

   if(Time[0]==prevtime)
      return(0);
   prevtime=Time[0];

   if(OrdersTotal()==0)
     {
      ashi_1_0=iCustom(NULL,0,"Heiken_Ashi_Smoothed1lime",2,0,0);
      ashi_1_1=iCustom(NULL,0,"Heiken_Ashi_Smoothed1lime",6,1,0);
      ashi_1_2=iCustom(NULL,0,"Heiken_Ashi_Smoothed1lime",3,2,0);
      ashi_1_3=iCustom(NULL,0,"Heiken_Ashi_Smoothed1lime",2,3,0);

      lord_2_0=iCustom(NULL,0,"TrendLord1",21,0,0);

      if((ashi_1_1<=ashi_1_2) && (ashi_1_0>ashi_1_3) && (lord_2_0<Bid))
        {
         tiket=OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),Slippage,0,0,"",Magic,0,clrGreen);
         if(tiket<0) { Print("Ошибка при выборе ордера BUY #",GetLastError()); prevtime=Time[1]; }
        }

      if((ashi_1_1>=ashi_1_2) && (ashi_1_0<ashi_1_3) && (lord_2_0>Bid))
        {
         tiket=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),Slippage,0,0,"",Magic,0,clrGreen);
         if(tiket<0) { Print("Ошибка при выборе ордера BUY #",GetLastError()); prevtime=Time[1]; }
        }
     }
 
Anna_89:

Здравствуйте! Сделки ставятся только на куплю. Хотя на продажу код прописан. Может у меня где-то ошибка? 

if(OrdersTotal()==0)

Если нет вообще никаких ордеров и позиций. Совсем нет. По любому символу, с любым типом и магиком, то откроет.

 

Исправила код. Но на продажу сделки все равно не открываются. 

int start()
  {
   int tiket;
   double ashi_1_0,ashi_1_1,ashi_1_2,ashi_1_3,lord_2_0;

   if(Time[0]==prevtime)
      return(0);
   prevtime=Time[0];

   if(OrdersTotal()<=0)
     {
      ashi_1_0=iCustom(NULL,0,"Heiken_Ashi_Smoothed1lime",2,0,0);
      ashi_1_1=iCustom(NULL,0,"Heiken_Ashi_Smoothed1lime",6,1,0);
      ashi_1_2=iCustom(NULL,0,"Heiken_Ashi_Smoothed1lime",3,2,0);
      ashi_1_3=iCustom(NULL,0,"Heiken_Ashi_Smoothed1lime",2,3,0);

      lord_2_0=iCustom(NULL,0,"TrendLord1",21,0,0);

      if((ashi_1_0>ashi_1_2) && (lord_2_0<Bid))
        {
         tiket=OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),Slippage,0,0,"",Magic,0,clrGreen);
         if(tiket<0) { Print("Ошибка при выборе ордера BUY #",GetLastError()); prevtime=Time[1]; }
        }

      if((ashi_1_1>ashi_1_3) && (lord_2_0>Bid))
        {
         tiket=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),Slippage,0,0,"",Magic,0,clrGreen);
         if(tiket<0) { Print("Ошибка при выборе ордера BUY #",GetLastError()); prevtime=Time[1]; }
        }
     }
 
Anna_89:

Исправила код. Но на продажу сделки все равно не открываются. 

Или в настройках советника разрешены только покупки или условие :

      if((ashi_1_1>ashi_1_3) && (lord_2_0>Bid))
        {
         tiket=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),Slippage,0,0,"",Magic,0,clrGreen);
         if(tiket<0) { Print("Ошибка при выборе ордера BUY #",GetLastError()); prevtime=Time[1]; }
        }

 всегда ложно.

 
Vitalii Ananev:

Или в настройках советника разрешены только покупки или условие :

 всегда ложно.

Значит написано неправильно условие на продажу?
 
Anna_89:

Исправила код. Но на продажу сделки все равно не открываются. 

А как вы его исправили?

if(OrdersTotal()<=0)

теперь если ещё и меньше ноля... Реальное количество может быть либо ноль, либо больше, но не меньше ноля

 
Artyom Trishkin:

А как вы его исправили?

теперь если ещё и меньше ноля... Реальное количество может быть либо ноль, либо больше, но не меньше ноля

И как правильно написать?
 
Anna_89:
И как правильно написать?
А как вам по условиям нужно?
 
Artyom Trishkin:
А как вам по условиям нужно?

Вот индикатор по которому я пишу советник.

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

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