Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 113

 
Здраствуйте!!! Хочу сделать следующее:
Мне надо что бы мой советник открывал все ордера (Sell и Buy), даже если уже есть открытые и что бы он это делал не в тот момент когда все условия сошлись, а на следующей свече!!! Помогите плз......Заранее благодарен...

На данный момент у меня в коде вот так:

PHP код:
void start() 
  { 
     if(
NewBar()) 
     { 
      
// сам алгоритм и т.п 
  

     } 

bool NewBar() 
  { 
static 
datetime lastbar 0
datetime curbar iTime(Symbol(), 00); 
   if(
lastbar != curbar
  { 
   
lastbar curbar
  return(
true); 
  } 
  return(
false); 
  }  
 
qroner:
void Uchet_Orderov_Function(string _Simvol, int _Magic, int &_Mas[8]){
   ArrayInitialize(_Mas, 0);
   int Ticket=-1;
   for(int pos=OrdersTotal()-1; pos>=0; pos--){
      if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) &&  OrderSymbol()==_Simvol&&
         OrderMagicNumber()==_Magic && OrderTicket()!=Ticket){
            Ticket=OrderTicket();
            switch(OrderType()){
               case 0:{_Mas[0]++;_Mas[6]++;break;}
               case 1:{_Mas[1]++;_Mas[6]++;break;}
               case 2:{_Mas[2]++;_Mas[7]++;break;}
               case 3:{_Mas[3]++;_Mas[7]++;break;}
               case 4:{_Mas[4]++;_Mas[7]++;break;}
               case 5:{_Mas[5]++;_Mas[7]++;break;}
            }
         }
   }

}

Вот функция.

Я просто подумал что проблема не в коде так как в стандартном режиме ошибок нет.

В общем походу ни кто не ответит... 

 
qroner:

В общем походу ни кто не ответит... 

Терминал Вам сообщил, что ошибка в строке 69, а Вы показываете текст программы, где строк меньше... На основе чего прикажете отвечать?
 
qroner:     В общем походу ни кто не ответит... 

В выложенной Вами функции ошибки вроде отсутствуют. Смутило использование OrderTicket()!=Ticket для отсеивания рядом стоящих ордеров с одинаковыми тикетами. Проверьте и убедитесь, что такие отсутствуют. Если компилятор указал (69,25) то смотрите 25 позицию строки 69 - ошибка там. Приведите эту одну строку

 
Vladimir:  Терминал Вам сообщил, что ошибка в строке 69, а Вы показываете текст программы, где строк меньше... На основе чего прикажете отвечать?

Действительно интересно, что у него в строке 69

 

Фуф, думал уже ни кто не отреагирует.

Вот та часть кода:

66 double Volatility(int _period){

67    double summ = 0;

68    for(int i=1; i<=_period; i++)

69       summ+=MathAbs(High[i]-Low[i]);

70    return(NormalizeDouble(summ/_period, Digits));

71 }

Спасибо за наводку

 
qroner:

Фуф, думал уже ни кто не отреагирует.

Вот та часть кода:

66 double Volatility(int _period){

67    double summ = 0;

68    for(int i=1; i<=_period; i++)

69       summ+=MathAbs(High[i]-Low[i]);

70    return(NormalizeDouble(summ/_period, Digits));

71 }

Спасибо за наводку

Все ясно. Ошибка в строке summ+=MathAbs(High[i]-Low[i]); Отсчитав 25 позиций от края попадем, видимо, на High[i].

Написал Alert(Low[-1]); компилятор требует положительное число. Написал  int n=-1;  Alert(Low[n]);  - при выполнении Array out of rangre. Но как может получиться i<0 ??? может быть дело в отсутствии исторических данных? проверьте интервал дат от ... до ...

 

КАКОГО ВЫБРАТЬ ТРЕЙДЕРА ПОДСКАЖИТЕ ПОЖАЛУЙСТА, ИЛИ ТОЧНОЕ ИМЯ СЕРВЕРА

 
qroner:

Фуф, думал уже ни кто не отреагирует.

Вот та часть кода:

66 double Volatility(int _period){

67    double summ = 0;

68    for(int i=1; i<=_period; i++)

69       summ+=MathAbs(High[i]-Low[i]);

70    return(NormalizeDouble(summ/_period, Digits));

71 }

Спасибо за наводку

double Volatility(int _period)
  {
    double summ = 0;

    for(int i=1; i<=_period; i++)
        if(ArraySize(High) > i && ArraySize(Low) > i)
           summ+=MathAbs(High[i]-Low[i]);

    return(NormalizeDouble(summ/_period, Digits));
 }
double Volatility(int _period)
  {
    double summ = 0;
    int src = MathMin(MathMin(_period, ArraySize(High)), ArraySize(Low));

    for(int i=1; i<src; i++)
        summ+=MathAbs(High[i]-Low[i]);

    return(NormalizeDouble(summ/_period, Digits));
 }

Похоже у вас _period иногда имеет значение больше чем элементов массива. От сюда и выход за пределы массива.

Выбирайте один из вариатов.

 
Добрый день ! Как можно создать триггер ?  К примеру мне нужно это условие if(iClose(NULL,HTF,4)<BlueLine) если оно выполняется DayDown = 1! Вопрос: Как DayDown оставить в состоянии 1 и не опрашивать до следующего дня? 
Причина обращения: