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

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

сделал. абсолютно не отличается от предыдущего журнала.

нет ошибок, или чего либо еще.

ошибок не должно быть, покажи журнал
 
for(int i = 0; i <= OrdersTotal(); i++)
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
            return(false);

А тут для цикла не нужны скобки? Вроде только когда не больше одной строки можно не ставить их.

UPD:
А понял, тут и есть одна строка.

 
MakarFX #:
ошибок не должно быть, покажи журнал

вот последние страницы журнала из МТ4.

этот журнал нужен?

Файлы:
0w11cw.txt  30 kb
 
Ох, простите. Перепутал сравнение и присвоение. Всё нормально стало. Совсем дурной становлюсь, как прогать сажусь. Плохо пишу и стресс от этого получаю, и голова не работает совсем, хотя про это знал конечно.
 
законопослушный гражданин #:

вот последние страницы журнала из МТ4.

этот журнал нужен?

Вот и ответ в твоем журнале)

Функция bCheckOrders() после открытия ордера выдает что ордеров нет, поэтому продолжаются открытия

 
pribludilsa #:
и голова не работает совсем, хотя про это знал конечно.

Прикольно мысли излагаешь)))

 
MakarFX #:

Прикольно мысли излагаешь)))

В смысле, знал как писать присвоение и сравнение, но всё равно перепутал. Помутилось.
 
pribludilsa #:
В смысле, знал как писать присвоение и сравнение, но всё равно перепутал. Помутилось.

Я не об этом...

pribludilsa #:
и голова не работает совсем, хотя про это знал конечно.

 
MakarFX #:

Вот и ответ в твоем журнале)

Функция bCheckOrders() после открытия ордера выдает что ордеров нет, поэтому продолжаются открытия

да блин. где это указано?

может я не так читаю журнал этот?

Функция bCheckOrders() после открытия ордера выдает что ордеров нет, поэтому продолжаются открытия - по void OnTick() -я понимаю, что это не так.

пока ордер не закроется  bCheckOrders()- не может выдать что ордерв нет. разве не так?

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

да блин. где это указано?

может я не так читаю журнал этот?

Функция bCheckOrders() после открытия ордера выдает что ордеров нет, поэтому продолжаются открытия - по void OnTick() -я понимаю, что это не так.

пока ордер не закроется  bCheckOrders()- не может выдать что ордерв нет. разве не так?

bCheckOrders() не корректно работает!

Я тебе уже писал функцию подсчета ордеров...

Сделай так и все должно работать

Вместо bCheckOrders() поставь эту функцию

//+------------------------------------------------------------------+
//| Подсчет открытых ордеров                                         |
//+------------------------------------------------------------------+
int CountOrders() 
  {
   int cnt=0;
   int i=OrdersTotal()-1;
   for(int pos=i;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol)
           {
            if(OrderMagicNumber()==Magic) cnt++;
           }
        }
     }
   return(cnt);
  }

а в OnTick() вместо bCheckOrders() пропиши так

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

// Если нет открытых ордеров, то входим в условие
   if(CountOrders()==0)
     {
// Если появился сигнал на покупку, то откроем ордер на покупку
      if(bSignalBuy() == true)
         vOrderOpenBuy();

// Если появился сигнал на продажу, то откроем ордер на продажу
      if(bSignalSell() == true)
         vOrderOpenSell();
     }
// Проверяем, вышел ли текущий баланс по открытому ордеру за вилку из внешних переменных CountLoss и CountProfit

  if(GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*-1)
     {
// Если да, то закроем ордер по текущей цене, не дожидаясь стопа или тейка
      CloseOrder();
     }
DrawLABEL("lab_Take",1,5,0,Color(GetProfitFromStart()>0,Lime,Red),StringConcatenate("Profit: ",DoubleToStr(GetProfitFromStart(),2),AC));
  }
Причина обращения: