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

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

на сколько я вижу, то разница в следующем:

Хоть с начала историю перебирайте, хоть с конца. Разницы никакой нет. Всё равно, функция ищет ордер с самым поздним временем закрытия. А если вы хотите сделать удаление или закрытие ордеров, то там нужно делать перебор с конца списка. Иначе, цикл будет пропускать ордера.

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

на сколько я вижу, то разница в следующем:

В этом случае разницы никакой. Цикл от OrersTotal до 0 обязательно должен быть только в случае закрытия позиций или удаления ордеров. В остальных случаях на любителя.

 
Mihail Matkovskij #:

Хоть с начала историю перебирайте, хоть с конца. Разницы никакой нет. Всё равно, функция ищет ордер с самым поздним временем закрытия. А если вы хотите сделать удаление или закрытие ордеров, то там нужно делать перебор с конца списка. Иначе, цикл будет пропускать ордера.

Если функция ищет ордер с самым последним временем закрытия, то и поиск, очевидно, будет быстрее не с начала истории, а с конца - от текущего времени к прошлому.

 
Artyom Trishkin #:

Если функция ищет ордер с самым последним временем закрытия, то и поиск, очевидно, будет быстрее не с начала истории, а с конца - от текущего времени к прошлому.

В обратном направлении функция найдет ордер с самым поздним временем закрытия быстрее, не сменит его до конца цикла и вернет результат. В прямом направлении она будет перебирать все ордера и вернет один из последних ордеров. Разница в том, что переменные будут перезаписываться на каждом проходе цикла. Да. Она есть. Но, думаю, несущественная. Хотя я  бы предпочёл цикл в обратном направлении, нежели в прямом. Несмотря на то что так или иначе функция будет работать.

 
Всем привет, если ли способ переключаться между окнами графиков программно , то есть делать любой график активным из программы?
 
Maksim Mihajlov #:
Всем привет, если ли способ переключаться между окнами графиков программно , то есть делать любой график активным из программы?

Есть

CHART_BRING_TO_TOP

Показ графика поверх всех других

bool  

 
Alexey Viktorov #:

Есть

CHART_BRING_TO_TOP

Показ графика поверх всех других

bool  

Благодарю!

 
Mihail Matkovskij #:

Хоть с начала историю перебирайте, хоть с конца. Разницы никакой нет. Всё равно, функция ищет ордер с самым поздним временем закрытия. А если вы хотите сделать удаление или закрытие ордеров, то там нужно делать перебор с конца списка. Иначе, цикл будет пропускать ордера.

в общем, я сделал два полностью идентичных советника, Кроме подсчета лотности ордеров!!. и  вот результат:

НЕ работает (т.е. не открывает BAY вместо SELL)

void OnTick()
{
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
 {
//Если появился сигнал на покупку, то откроем ордер на покупку
  if(bSignalBuy())
  {
   if(GetLotSize()>LotControl) vOrderOpenSell();
   else vOrderOpenBuy();
  }
// Если появился сигнал на продажу, то откроем ордер на продажу
  if(bSignalSell())
  {
   if(GetLotSize()>LotControl) vOrderOpenBuy();
   else vOrderOpenSell();
  }
 }
}
,,,
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;
  }

РАБОТАЕТ ( (т.е.  открывает BAY вместо SELL)


void OnTick()
{
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
 {
//Если появился сигнал на покупку, то откроем ордер на покупку
  if(bSignalBuy())
  {
   if(GetLotSize()>LotControl) vOrderOpenSell();
   else vOrderOpenBuy();
  }
// Если появился сигнал на продажу, то откроем ордер на продажу
  if(bSignalSell())
  {
   if(GetLotSize()>LotControl) vOrderOpenBuy();
   else vOrderOpenSell();
  }
 }
}
...
double GetLotSize()
  {
   double Ls=0;
   datetime t=0;
   int i=OrdersHistoryTotal();
   for(int pos=0; pos<i; pos++)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(t<OrderCloseTime()) {t=OrderCloseTime(); Ls=OrderLots();}
              }
           }
        }
     }
   return Ls;
  }
 
законопослушный гражданин #:

в общем, я сделал два полностью идентичных советника, Кроме подсчета лотности ордеров!!. и  вот результат:

НЕ работает (т.е. не открывает BAY вместо SELL)

РАБОТАЕТ ( (т.е.  открывает BAY вместо SELL)


Еще раз делаю акцент в чем разница

1 вариант

double GetLotSize()
  {
   double Ls=0;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))

2 вариант

double GetLotSize()
  {
   double Ls=0;
   datetime t=0;
   int i=OrdersHistoryTotal();
   for(int pos=0; pos<i; pos++)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
 
законопослушный гражданин #:

в общем, я сделал два полностью идентичных советника, Кроме подсчета лотности ордеров!!. и  вот результат:

НЕ работает (т.е. не открывает BAY вместо SELL)

РАБОТАЕТ ( (т.е.  открывает BAY вместо SELL)


Пробуйте разбираться в том что вы кодите, а не слепо копируйте OrdersTotalOrdersHistoryTotal

OrderSelect

pool=MODE_TRADES

[in]  Источник данных для выбора. Используется, когда параметр select равен SELECT_BY_POS. Mожет быть одной из следующих величин:

MODE_TRADES (по умолчанию) - ордер выбирается среди открытых и отложенных ордеров,
MODE_HISTORY - ордер выбирается среди закрытых и удаленных ордеров.

    OrdersTotal - Торговые функции - Справочник MQL4
    OrdersTotal - Торговые функции - Справочник MQL4
    • docs.mql4.com
    OrdersTotal - Торговые функции - Справочник MQL4