Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 155

 
Alexander Antoshkin:

Que pouvez-vous... ?

Calculez combien de hobbits il faut pour changer une ampoule ?

L'envoyer en freelance ? Écrire "le lire là" ?

Comment trouver la coordonnée de la série d'ordres de clôture dans l'historique comme dans l'exemple (je prévois de tracer une ligne à cet endroit)

J'ai déjà posé cette question sur 151 pages de ce fil, mais aucune solution plausible n'a été trouvée .https://www.mql5.com/ru/forum/160683/page151



Vous devez rechercher une série d'ordres avec la même barre de fermeture dans l'historique. L'heure de ce bar sera celle que vous recherchez.
 
Alexander Antoshkin:

Que pouvez-vous... ?

Calculez combien de hobbits il faut pour changer une ampoule ?

L'envoyer en freelance ? Écrire "le lire là" ?

Nous pouvons faire beaucoup de choses :)

Le problème des hobbits n'a pas de solution unique...

Au cas où vous n'auriez pas compris, ma réponse était tirée de la même vidéo que celle citée parVitalie Postolache.

Mais sérieusement :

Comment trouver la coordonnée d'une transaction clôturant une série d'ordres dans l'historique comme dans l'exemple (je prévois de tracer une ligne à ce stade).

J'ai déjà posé cette question sur 151 pages de ce fil, mais aucune solution n'a été trouvée. https://www.mql5.com/ru/forum/160683/page151

Je n'ai pas lu la branche par le lien. Mais ce serait comme ça :

Déterminez le fait de clôturer plusieurs ordres (d'un ou de plusieurs types) dans une fourchette de X points (la fourchette de X points est nécessaire car, en réalité, toutes les transactions peuvent ne pas être clôturées au même prix), déterminez le prix de clôture moyen et tracez une ligne par celui-ci.

 
Artyom Trishkin:
Recherchez dans l'historique une série d'ordres ayant la même barre de fermeture. L'heure de ce bar sera celle que vous recherchez.
C'est le même problème que ma méthode de solution : selon le ping et le nombre d'ordres, toutes les transactions sur une bougie peuvent ne pas se fermer...
 
Alexey Kozitsyn:
C'est le même problème que ma méthode de solution : selon les pings et le nombre d'ordres, toutes les transactions sur la même bougie peuvent ne pas se fermer...
Pour M1, je suis d'accord. Pour d'autres, c'est peu probable. Sauf si un ordre de fermeture intervient avant l'ouverture de la bougie. Il y aura deux séries de commandes. Prenez la dernière de deux adjacentes.
 
Artyom Trishkin:
Pour M1, je suis d'accord. Pour d'autres, c'est peu probable. Si seulement avant l'ouverture d'un chandelier un ordre de fermeture a été reçu. Il y aura deux séries de commandes. Prenez la dernière de deux adjacentes.

Peu de données ont été fournies ici pour décider : plusieurs packs peuvent être fermés sur la même bougie (si vous vérifiez sur des bougies horaires ou journalières, par exemple).

 
Vitalie Postolache:


Je veux des lignes rouges parallèles, mais je veux qu'elles se croisent, et je veux que trois d'entre elles soient vertes et le reste violet ;)))

Oh, oui, et cette ligne droite en forme de chaton !

Le problème vous semble-t-il erroné ?

 
Alexey Kozitsyn:

Il n'y a pas assez de données pour en décider : plusieurs packs peuvent être fermés sur la même bougie (si vous vérifiez sur des bougies horaires ou journalières, par exemple).

En tout cas, plus c'est précis, mieux c'est ...

les ordres sont clôturés conformément à la condition du stop suiveur sans perte.

c'est-à-dire

if(b+s>0)
{
for(i=0 ; i<OrdersTotal() ; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && Magic==OrderMagicNumber())
{
tip = OrderType() ;
OSL = NormalizeDouble(OrderStopLoss(),Digits) ;
OTP = NormalizeDouble(OrderTakeProfit(),Digits) ;
OOP = NormalizeDouble(OrderOpenPrice(),Digits) ;
SL=OSL ;
if(tip==OP_BUY)
{
SL=NormalizeDouble(Bid-TrailingStop*Point,Digits) ;
if(SL>OSL && SL>NLb)
{
si( !OrderModify(OrderTicket(),OOP,SL,0,0,White)) Print("Erreur Ordre Modifier ",GetLastError()) ;
}
}
if(tip==OP_SELL )
{
SL=NormalizeDouble(Ask+TrailingStop*Point,Digits) ;
si((SL<OSL || OSL==0) && SL<NLs)
{
if( !OrderModify(OrderTicket(),OOP,SL,0,0,White)) Print("Error Order Modify ",GetLastError()) ;
}

 
Alexey Kozitsyn:
Écrivez votre propre indicateur MA, qui comprendrait un tampon supplémentaire dans lequel les valeurs sont entrées lorsqu'une nouvelle barre est formée.

J'aimerais discuter d'un algorithme permettant de résoudre ce problème, notamment pour différentes méthodes de calcul de lamoyenne mobile.

 
Alexey Kozitsyn:

Nous pouvons faire beaucoup de choses :)

Déterminez le fait de clôturer plusieurs ordres (du même type ou de types différents) dans une fourchette de X points (la fourchette de X points est nécessaire car, dans la réalité, toutes les transactions peuvent ne pas être clôturées au même prix), déterminez le prix de clôture moyen et tracez une ligne par celui-ci.

int TotalPos=-1;

void start()
{
  if(OrdersTotal()!=TotalPos) { // не мучаем каждый тик
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
     if(OrderSymbol()==Symbol() && OrderType()<=1) {
      History();
     }
  }}} TotalPos=OrdersTotal(); // запомним количество
//--
} 
 
 void History() {
  string Ticket=(string)OrderTicket();
  color col=Red;
  if(OrderType()==0)col=Blue;
  datetime a=OrderOpenTime();
  double b=OrderOpenPrice();
  datetime c=OrderCloseTime();
  double d=OrderClosePrice();
  double prSep=OrderProfit()+OrderCommission()+OrderSwap();
  double prAll=0;
  int    cn=0;
  string hTicket;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
     if(OrderSymbol()==Symbol() && OrderType()<=1) {
      datetime ct=OrderCloseTime();
      // 60 секунд разницы между закрытием первой и последней в сетке
      if(c<=ct+60 && c>=ct-60) {
        prAll+=OrderProfit()+OrderCommission()+OrderSwap();
        hTicket=(string)OrderTicket();
        cn++;
      }
   }}}
   ObjectCreate(Ticket+'Open',OBJ_ARROW,0,a,b);
   ObjectSet(Ticket+'Open',OBJPROP_COLOR,col);
   ObjectSet(Ticket+'Open',OBJPROP_ARROWCODE,1);
      
   ObjectCreate(Ticket+'Line',OBJ_TREND,0,a,b,c,d);
   ObjectSet(Ticket+'Line',OBJPROP_COLOR,col);
   ObjectSet(Ticket+'Line',OBJPROP_WIDTH,1);
   ObjectSet(Ticket+'Line',OBJPROP_STYLE,STYLE_DOT);
   ObjectSet(Ticket+'Line',OBJPROP_RAY,0);
      
   ObjectCreate(Ticket+'Close',OBJ_ARROW,0,c,d);
   ObjectSet(Ticket+'Close',OBJPROP_COLOR,Green);
   ObjectSet(Ticket+'Close',OBJPROP_ARROWCODE,3);
  
   Ticket=cn>1?hTicket:Ticket;
   ObjectCreate(Ticket+'Profit',OBJ_TEXT,0,c,d);
   ObjectSet(Ticket+'Profit',OBJPROP_ANCHOR,0);
   ObjectSetText(Ticket+'Profit',DoubleToString(prAll,2),10,'Arial',White);
   ObjectSet(Ticket+'Profit',OBJPROP_PRICE1,d);
   ObjectSet(Ticket+'Profit',OBJPROP_TIME1,c+Period()*60*2);

ceci devrait être ajouté au script ...

En tenant compte du fait que si une série d'ordres de vente sont fermés

ObjectCreate(Ticket+'Debt B',OBJ_HLINE,0,0,d) ;
ObjectSet(Ticket+'Debt B',OBJPROP_COLOR,LimeGreen) ;
ObjectSet(Ticket+'Debt B',OBJPROP_WIDTH,1) ;

si une série d'ordres d'achat sont fermés

ObjectCreate(Ticket+'Debt M',OBJ_HLINE,0,0,d) ;
ObjectSet(Ticket+'Debt M',OBJPROP_COLOR,Red) ;
ObjectSet(Ticket+'Debt M',OBJPROP_WIDTH,1) ;

Pouvez-vous nous aider ?
 
-Aleks-:

J'aimerais discuter d'un algorithme permettant de traiter cette question, notamment pour différentes méthodes de calcul de lamoyenne mobile.

Regardez le fichier MovingAverages.mqh dans le dossier Include du terminal.