[Archive] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 2. - page 132

 
Sergey_Rogozin:

Alors je suppose que c'est tout :

C'est bien ça ?

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

Maintenant je comprends.

Merci.

 
IgorM:

il n'y a pas de telle fonction intégrée, vous devez l'écrire vous-même, j'ai montré un exemple ici:https://www.mql5.com/ru/forum/131277/page113


merci

 
IgorM:

Il n'existe pas de fonction intégrée de ce type, vous devez l'écrire vous-même, j'ai montré un exemple ici: https://www.mql5.com/ru/forum/131277/page113.

Et comment prescrire que le conseiller expert n'a que cette seule condition pour ouvrir des transactions.
 

alsu:

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

Alors vous n'avez pas besoin de size-1, sinon la première exécution indexera 0-1 et la taille du tableau sera nulle.

Alors ça devrait être comme ça :

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

Alors vous n'avez pas besoin de size-1, sinon l'indexation sera de 0-1 et la taille du tableau sera de zéro à la première exécution.

Alors ça se passe comme ça :



Il y a une initialisation au début du programme int size=1 ;

 
IgorM:

il n'existe pas de fonction intégrée de ce type, vous devez l'écrire vous-même, j'ai montré un exemple ici: https://www.mql5.com/ru/forum/131277/page113.

Pourquoi lorsque je joins ce code, il ouvre un nombre incroyablement élevé de transactions ?
 
alsu:

Il y a une initialisation au début du programme int size=1 ;


Je ne l'ai pas attrapé... Je ne me souviens que du premier, où la taille était initialement de zéro.
 
sto_mat:

Comment se fait-il que lorsque je joins ce code, il ouvre un nombre incroyablement élevé de transactions ?


Ce n'est pas possible, parce que dans le code :

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);
}


pas d'échanges https://book.mql4.com/ru/trading/ordersend

 
IgorM:


ça ne peut pas être le même car dans le code :

pas d'échanges https://book.mql4.com/ru/trading/ordersend


J'ai inséré

if(profit == 0 &&time == 0){//actions si l'historique est propre

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


retour ;
}
if(profit >= 0){// action si la dernière commande était profitable, ou nulle

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


retour ;
}
if(profit < 0 ){//actions if(profit < 0 ){/actions si la dernière commande n'était pas rentable

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


retour ;
}
retour(0) ;
}

Raison: