[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 414

 
inoy:

Советник не закрывает свой ордер по времени, всли есть чужой ордер п о символу, открытый РАНЕЕ, чем его
ордер. Если чужой ордер открыт позже или нет чужих ордеров - функция OrderClose работает правильно. Подскажите, где ошибка


ошибка в том, что Вы просто берете ордер с индексом 0, а не ищите его среди открытых ордеров.
 
Roger:

ошибка в том, что Вы просто берете ордер с индексом 0, а не ищите его среди открытых ордеров.

Я прошу прощения, но в ТАКОМ варианте ситуация аналогичная.
//---- закрытие позиции
if(OrdersTotal() > 0)
for(int i=OrdersTotal();i>=0;i--)
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol()==Symbol()&& OrderMagicNumber() == MagicNumber)
if ( iTime(Symbol(),0,0) >= OrderOpenTime()+SecondsClose )
if (OrderType() == OP_BUY)
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),NormalizeDouble((Ask - Bid) * Point,Digits), DodgerBlue);
Будьте добры, приведите правильное решение проблемы
 
Avelox:

Как вывести звуковой сигнал в индикаторе от следующего выражения:

if (num1 == 9) {
ObjectCreate(""+i, OBJ_TEXT, 0, Time[i+1],High[i+1]+10*Point );
ObjectSetText(""+i, ""+DoubleToStr(num1,0), 16, "Arial", RoyalBlue);

}

Если можно более детально чем "Можно использовать OBJ_SICICOCI а детали посмотрите в документации по MQL4, там есть всё!"

Этот вопрос удалось решить самому:


ObjectCreate(""+i, OBJ_TEXT, 0, Time[i+1],High[i+1]+10*Point );
ObjectSetText(""+i, ""+DoubleToStr(num1,0), 18, "Arial", RoyalBlue);
PlaySound("havecall.wav"); }
 
inoy:

Я прошу прощения, но в ТАКОМ варианте ситуация аналогичная. Будьте добры, приведите правильное решение проблемы

//---- закрытие позиции
if(OrdersTotal() > 0) 
{
  for(int i=OrdersTotal();i>=0;i--) 
  {
    OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol()==Symbol()&& OrderMagicNumber() == MagicNumber) 
    {
      if ( iTime(Symbol(),0,0) >= OrderOpenTime()+SecondsClose ) 
      {
         if (OrderType() == OP_BUY)
         {
            OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),NormalizeDouble((Ask - Bid) * Point,Digits), DodgerBlue);
         }
      }
   }
}
 

Ну, и еще, замените

for(int i=OrdersTotal();i>=0;i--) 

на

for(int i=OrdersTotal()-1;i>=0;i--) 


И еще, не понял, что за элемент в функции (подчеркнуто красным)?

OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),NormalizeDouble((Ask - Bid) * Point,Digits), DodgerBlue);

 
  for (Выражение_1; ; Выражение_2)                    // Отсутствует Условие
      {                                            // Открывающая фигурная скобка
      Блок операторов,                             // Тело цикла может состоять ..
      составляющих тело цикла                      //.. из нескольких операторов
      }                                            // Закрывающая фигурная скобк

Подскажите, что является условием выхода из такого цикла? Или вот такого

  for ( ; ; )                                          // Отсутств. Выражения и Условие
      {                                            // Открывающая фигурная скобка
      Блок операторов,                             // Тело цикла может состоять ..
      составляющих тело цикла                      //.. из нескольких операторов
      }                                            // Закрывающая фигурная скобка
 
VladimirR:

Подскажите, что является условием выхода из такого цикла? Или вот такого


break
 

Vinin, Roger - спасибо, помогло.

 NormalizeDouble((Ask - Bid) * Point,Digits) - это Slippage для символов с большим спредом, например XAUUSD.

 
inoy:

Vinin, Roger - спасибо, помогло.

NormalizeDouble((Ask - Bid) * Point,Digits) - это Slippage для символов с большим спредом, например XAUUSD.


Так вот представляешь, что это 0? Во-первых, слиппаж должен быть целым положительным числом, во вторых, разницу надо делить на Point, а не умножать.
 
Господа! как "отучить" советника не торговать ночью ? То есть по терминальному времени с 23 до 02 часов (по Гринвичу).. строчки Hour()>=2&&Hour()<=23 не помогли...
Причина обращения: