Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 137

 

А потом ещё ему нужно будет сделать вывод сообщений не комментами, а объектами, да по-крупнее...

Так человек никогда сам не научится думать.

 
artmedia70:
Только нужно не забывать, что при перезапуске переменная переинициализируется. Поэтому такой подход приемлем для тестера, но не для реальной торговли.


Спасибо за информацию, что тогда делать? Забить значение в GV ??? Или есть какой-то иной вариант для реала...

 
ALXIMIKS:

Спасибо за информацию, что тогда делать? Забить значение в GV ??? Или есть какой-то иной вариант для реала...
Забыть о глобальных флагах. Я не знаю зачем вам флаги и на что они указывают. Поэтому сложно подсказать применительно к вашей ситуации.
 
Zolotai:
Народ, не подскажите индикатор. Вообщем основан на двух скользящих. И при пересечении выдает направление в виде стрелок. Не могу найти, спс.
i-PSI@MA_Signal отсюда.
 
ALXIMIKS:

Доброго времени суток, если не сложно, подскажите новичку:

1) Как объявить массив размером равным значению некой переменной? (если i=7 объявляем массив double Muss[7] и так далее );

ответили уже

2) Почему массив в пользовательской функции считается объявленным и адекватно используется если условие всегда ложь?

while (false){

Alert("aaaaaaaaa" );

static double Buf_max [9000000];

static double Buf_min [9000000];}

потому что его объявили как static. В MQL все статические переменные инициализируются перед вызовом функции init()

3) Есть ли разница в пользовательской функции и в целом между просто массивом и static массивом?

просто массив будет проинициализирован при первом входе в функцию, где он объявлен. Однако же при выходе, если вы перед этим меняли его размер, новое значение не сбросится, и при следующем вызове функции массив будет такого же размера, каким мы его оставили в прошлый раз.

Т.е. по большому счету разница между просто и static только в моменте инициализации.

 
Что можно сделать при ошибке "1"-->(нет ошибки, но результат неизвестен) ?
 

 Я тут писал функцию удаления отложенных ордеров. Но почему-то она не удаляет их. Вот код:

void DeletePendingOrders()
{
    int NumberOfTry = 0,
        err,
        ticket;

   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() > 1)
      {
         ticket = OrderTicket();
      
         while (NumberOfTry < 3)
         {
            while (!IsTradeAllowed()) Sleep(5000);
      
            if (OrderDelete(ticket, Red))
                NumberOfTry = 3;
            else
                err = GetLastError();
      
            if (err > 0)
            { 
              Print(NumberOfTry," #",ticket," Error modifing order: (", err , ") ");
              Sleep(5000); RefreshRates(); NumberOfTry++;
            }
         }
      }
   }
}

 

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

 
hoz:

Я тут писал функцию удаления отложенных ордеров. Но почему-то она не удаляет их. Вот код:

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

Я бы одну строчку вставил, что бы особенно код не менять:

            while (!IsTradeAllowed()) Sleep(5000);
            err=0;
            if (OrderDelete(ticket, Red))
                NumberOfTry = 3;
            else
                err = GetLastError();
      
            if (err > 0)
 
Sepulca:

Я бы одну строчку вставил, что бы особенно код не менять:


И Что это нам даст? По прежнему не закрываются ордера и ошибок нет.

Код изменил:

void DeletePendingOrders()
{
    int NumberOfTry = 0,
        err,
        ticket;

   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() > 1)
      {
         ticket = OrderTicket();
      
         while (NumberOfTry < 3)
         {
            while (!IsTradeAllowed()) Sleep(5000);
                err = 0;
              Print("IsTradeAllowed() = ", IsTradeAllowed());
              Print("err = ", err);

            if (OrderDelete(ticket, Red))
            {
                NumberOfTry = 3;
                Print("NumberOfTry", NumberOfTry);
            }
            else
            {
                err = GetLastError();
                Print("err = ", err);
            }
      
            if (err > 0)
            { 
              Print(NumberOfTry," #",ticket," Error modifing order: (", err , ") ");
              Sleep(5000); RefreshRates(); NumberOfTry++;
            }
         }
      }
   }
}
 

Нужная часть журнала: 

2013.09.11 22:24:19     2012.01.02 08:05  Perevorot EURUSD,M5: modify #10 sell stop 0.01 EURUSD at 1.29279 sl: 0.00000 tp: 1.29179 ok
2013.09.11 22:24:19     2012.01.02 08:05  Perevorot EURUSD,M5: open #10 sell stop 0.01 EURUSD at 1.29279 ok
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: Ôóíêöèÿ DeletePendingOrders çàâåðøåíà
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: NumberOfTry3
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: delete #9 sell stop 0.64 EURUSD at 1.29279 sl: 0.00000 tp: 1.29179 ok
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: err = 0
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: IsTradeAllowed() = 1
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: Ôóíêöèÿ ClosePosBySortLots çàêðûëà âñå ðûíî÷íûå îðäåðà
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: close #3 sell 0.01 EURUSD at 1.29303 tp: 1.29203 at price 1.29487
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: close #4 buy 0.02 EURUSD at 1.29403 tp: 1.29503 at price 1.29480
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: close #5 sell 0.04 EURUSD at 1.29286 tp: 1.29186 at price 1.29487
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: close #6 buy 0.08 EURUSD at 1.29386 tp: 1.29486 at price 1.29480
Получается, что ордер то удаляется. Но один. А был ещё какой-то, другой. Вот его не удалило. Хотя цикл то по всем ордерам.
 

проследи за своей переменной NumberOfTry

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

только один удовлетворит условие

Причина обращения: