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

 
Sergey_Rogozin:

Тогда, наверное, так:

Это правильно?

int start()
 {
   ArrayResize(ValueArr,size);
   ValueArr[size-1] = GetValue();
   size++;
   return();
 }
 
alsu:

Вот теперь все понял.

Спасибо.

 
IgorM:

такой встроенной ф-ции нет, нужно писать самостоятельно, пример я показывал здесь:https://www.mql5.com/ru/forum/131277/page113


спасибо

 
IgorM:

такой встроенной ф-ции нет, нужно писать самостоятельно, пример я показывал здесь:https://www.mql5.com/ru/forum/131277/page113

А как прописать чтоб у советника было только это одно условие для открытия сделок.
 

alsu:

int start()
 {
   ArrayResize(ValueArr,size);
   ValueArr[size-1] = GetValue();
   size++;
   return();
 }

Тогда не нужно size-1, иначе при первом запуске индексация будет 0-1 и размер массива будет нулевым.

Тогда уж так:

int start()
 {
   size++;
   ArrayResize(ValueArr,size);
   ValueArr[size-1] = GetValue();
   return();
 }
 
artmedia70:

Тогда не нужно size-1, иначе при первом запуске индексация будет 0-1 и размер массива будет нулевым.

Тогда уж так:



Там инициализация в начале программы int size=1;

 
IgorM:

такой встроенной ф-ции нет, нужно писать самостоятельно, пример я показывал здесь:https://www.mql5.com/ru/forum/131277/page113

Почему когда я присоеденил этот код он открывает невероятно большое количество сделок?
 
alsu:

Там инициализация в начале программы int size=1;


Не доглядел... Помню только его первую, где size был изначально ноль.
 
sto_mat:

Почему когда я присоеденил этот код он открывает невероятно большое количество сделок?


такого не может быть, т.к. в коде:

double history(){
int time = 0;double profit = 0;//обьявляем необходимые нам переменные куда мы положим интересующие нас характеристики ордера
for(int i = OrdersHistoryTotal();i>=0;i--){// Перебираем все закрытые ордера
  if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){//если ордер с таким номером (i) в списке закрытых ордеров есть ( не путать с тикетом)
    if(OrderSymbol() == Symbol()){//если выбранный ордер был открыт по нашей валютной паре
      if(time<OrderCloseTime()){//(сравниваем его с хранящимся в пероеменной time) 
        time=OrderCloseTime();//если время закрытия ордера больше - ложим его в переменную
        profit=OrderProfit();//и заодно запоминаем прибыль ордера
      }
    }
  }
}
//по окончании этой процедуры в наших переменных будут сидет наибольшее время закрытия, и его профит. Или по нулям если история чистая.
//теперь мы можем выставлять условия в зависимости от результата процедуры
   
if(profit == 0 &&time == 0){//действия если история чистая

}
if(profit >= 0){//действия если последний ордер был прибыльным, или нулевым

}
if(profit <  0 ){//действия если последний ордер был убыточным

}
return(0);
}


нет ни одной торговой операции https://book.mql4.com/ru/trading/ordersend

 
IgorM:


такого не может быть, т.к. в коде:

нет ни одной торговой операции https://book.mql4.com/ru/trading/ordersend


дак я вставил

if(profit == 0 &&time == 0){//действия если история чистая

OrderSend(Symbol(),OP_SELL,0.1,Bid,3,0,Bid-6*Point);


return;
}
if(profit >= 0){//действия если последний ордер был прибыльным, или нулевым

OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-12*Point,Bid+12*Point);


return;
}
if(profit < 0 ){//действия если последний ордер был убыточным

OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+15*Point,Bid-15*Point);


return;
}
return(0);
}

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