Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1776

 
MakarFX #:

У тебя по условию открывать два сразу, если нет открытых.

Что это такое?

double GetLotSize()
  {
   double Ls=0;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL) {Ls=OrderLots();}
           }
        }
     }
   return Ls;
  }    

эта штука считает лотность текущую

этот параметр задается в настройках: LotControl

соответственно когда: GetLotSize()>LotControl - мне нужно, чтобы по сигналу bSignalBuy()  - происходил vOrderOpenSell(). 

да, я в курсе, что по условию открываются сразу оба ордера. Я так и написал вначале. а вот как сделать чтобы vOrderOpenBuy() не открывался?

 
Mihail Matkovskij #:

Если робот уже вошёл в рынок в одном направлении, то он не входит еще раз в том же направлении. Так у вас работает алгоритм входа?

Если это условие выполняется, то срабатывает

После

И также при сигнале на продажу.

Тогда, причина входа в обратном направлении в срабатывании условия

да. это мне и нужно. НО при этом нужно остановить/исключить вход в прямом направлении по данному условию:

GetLotSize()>LotControl
 
Kedrov #:

Спасибо, Макар, что валандаешься со мной!

А вот и скрин

Даа, намусорил)

Теперь в каждой папке, по очереди, переименуй папки Experts в _Experts и Indicators в _Indicators.

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

P.S. Терминал первый раз будет запускаться немного дольше чем обычно.

 
законопослушный гражданин #:

эта штука считает лотность текущую

этот параметр задается в настройках: LotControl

соответственно когда: GetLotSize()>LotControl - мне нужно, чтобы по сигналу bSignalBuy()  - происходил vOrderOpenSell(). 

да, я в курсе, что по условию открываются сразу оба ордера. Я так и написал вначале. а вот как сделать чтобы vOrderOpenBuy() не открывался?

        if((bSignalBuy() == true)&&(GetLotSize()>LotControl))
           vOrderOpenSell();
        else
        if(bSignalBuy() == true)
           vOrderOpenBuy();
         
 
законопослушный гражданин #:

да. это мне и нужно. НО при этом нужно остановить/исключить вход в прямом направлении по данному условию:

Меня смущает это условие

// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
     {

при таком условии

GetLotSize()=0
 
MakarFX #:

спасибо.поправил. буду додумывать.

 
MakarFX #:

Меня смущает это условие

при таком условии

       похоже вы правы.

так:

 if((bSignalBuy() == true)&&(GetLotSize()>LotControl))
         vOrderOpenSell();
         else
         if(bSignalBuy() == true)
         vOrderOpenBuy();

вообще не реагирует на условие (GetLotSize()>LotControl)

 
законопослушный гражданин #:

       похоже вы правы.

так:

вообще не реагирует на условие (GetLotSize()>LotControl)

GetLotSize() надо брать из последнего закрытого, тогда при

// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
     {

(GetLotSize()>LotControl) будет работать
 
MakarFX #:

GetLotSize() надо брать из последнего закрытого, тогда при

(GetLotSize()>LotControl) будет работать

ясно спасибо! 

 
законопослушный гражданин #:

да. это мне и нужно. НО при этом нужно остановить/исключить вход в прямом направлении по данному условию:

if (bSignalBuy()) {
  if (GetLotSize() > LotControl)
    vOrderOpenSell();
  else
    vOrderOpenBuy();
}
double GetLotSize()
  {
   double Ls=0;
   datetime last = 0, openTime;
   for (int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if (OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if (OrderSymbol() == _Symbol && OrderMagicNumber() == Magic)
           {
             if(OrderType() == OP_BUY || OrderType() == OP_SELL) {
               if ((openTime = OrderOpenTime()) > last) {
                 last = openTime;
                 Ls = OrderLots();
               }
             }
           }
        }
     }
   return Ls;
  }
Причина обращения: