Как запретить советнику закрывать последнюю открытую позицию - страница 2

 
Chernoelena >>:

Понимаю я это.. реализовать не могу

Типо поиск по форуму не помогает?


https://forum.mql4.com/ru/11287/page13#74236

https://forum.mql4.com/ru/11287/page49#103279


Играйтесь....

 
Сейчас вот пытаюсь сделать, но задачка сложноватая оказываается. Вроде и помочь охота и время жалко. Сейчас попробую всё доделать, чтоб получилось как надо.
 
FOReignEXchange писал(а) >>
Сейчас вот пытаюсь сделать, но задачка сложноватая оказываается. Вроде и помочь охота и время жалко. Сейчас попробую всё доделать, чтоб получилось как надо.

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

 
Вот тут немножко коряво, но работает. Главное, чтоб лот при закрытии совпадал с Вашим. Приспосабливайте к Вашему советнику.
//+----------------------------------------------------------------------------------------------+
//|                                                                             Traling_Stop.mq4 |
//|                                                                          FOReignEXchange2008 |
//|                                                                    http://forexsignal.sk6.ru |
//+----------------------------------------------------------------------------------------------+
                                                        #property copyright "FOReignEXchange2008"
                                                      #property link      "FOReignEXchange@bk.ru"

extern double Lot=0.1;

int ticket_Buy,
    ticket_Sell,
    t_close_Sell,
    t_close_Buy,
    Ticket,  
    t_open_Buy,
    t_open_Sell,
    i;
  
string Symb;
//+--------------------------------------------------------------------------------------------+


int start()
  { 
  
//+--------------------------------------------------------------------------------------------+ 
Symb=Symbol();
if (ticket_Buy==0)
   {
   i=30;
   while (i>-1)
         {
         if (OrderSelect(i, SELECT_BY_POS)==true)
            {
            if (OrderSymbol()==Symb && OrderType()==0 && OrderOpenTime()>t_open_Buy)
               {
               ticket_Buy=OrderTicket();            
               }
            }
         i--;
         }  
   }
if (ticket_Sell==0)
   {    
   i=30;
   while (i>-1)
         {
         if (OrderSelect(i, SELECT_BY_POS)==true)
            {
            if (OrderSymbol()==Symb && OrderType()==1 && OrderOpenTime()>t_open_Sell)
               {
               ticket_Sell=OrderTicket();            
               }
            }
         i--;
         }         
   }  

  
//+--------------------------------------------------------------------------------------------+  

if (ticket_Buy!=0)
   {
   i=30;
   while (i>-1)
          {
          if (OrderSelect(i, SELECT_BY_POS)==true)
             {
             if (OrderTicket()!=ticket_Buy && OrderSymbol()==Symb)
                {
                Ticket=OrderTicket();
                OrderClose(Ticket,Lot,Bid,5);
                Ticket=0;
                }            
             }
          i--;
          }
    ticket_Buy=0;
    }

  
if (ticket_Sell!=0)
   {
   i=30;
   while (i>-1)
          {
          if (OrderSelect(i, SELECT_BY_POS)==true)
             {
             if (OrderTicket()!=ticket_Sell && OrderSymbol()==Symb)
                {
                Ticket=OrderTicket();
                OrderClose(Ticket,Lot,Ask,5);
                Ticket=0;
                }            
             }
          i--;
          }
    ticket_Sell=0;          
    } 
//+--------------------------------------------------------------------------------------------+
return;   
  }
 

Ой. Тут ошибка в первом условии. Там надо так делать    

  && OrderOpenTime()<t_open_Buy

  && OrderOpenTime()<t_open_Sell    

А то наоборот первая сделка оставаться будет                                                                       

 
FOReignEXchange писал(а) >>
Вот тут немножко коряво, но работает. Главное, чтоб лот при закрытии совпадал с Вашим. Приспосабливайте к Вашему советнику.

Спасибо большое.. буду приспосабливать :))

 

Хе-хе-хе.  Тогда надо после старта сразу писать типа такого

if (t_open_Buy==0) t_open_Buy=TimeCurrent;
if (t_open_Sell==0) t_open_Sell=TimeCurrent;


Всё!  Советую понять алгоритм, чтоб на будующее это не казалось сложным

 
Тут есть ещё в коде некоторые ньансы. Чуть надо подпарвить. Сейчас сделаю
 
FOReignEXchange писал(а) >>
Тут есть ещё в коде некоторые ньансы. Чуть надо подпарвить. Сейчас сделаю

Вы так серьезно отнеслись.. я вам благодарна очень что время тратите

 
Не могу понять почему всегда остаётся первый ордер. Уже голова разболелась. Надо понять почему. Вдруг на будующее пригодится.
Причина обращения: