Questions des débutants MQL4 MT4 MetaTrader 4 - page 246

 
Valeriy Yastremskiy:

Merci. Je vais essayer. Je ne sais pas si ça va marcher.)

 
J'ai des ordres ouverts et fermés.
1. Lors de l'ouverture d'un ordre, j'ai besoin d'écrire son ticket dans un tableau, si le tableau est inoccupé (probablement =0), afin que je puisse faire un rapport à partir de celui-ci plus tard dans le dépassement.
2. Après la fermeture de l'ordre (il peut ne pas être fermé), le rapport sur le profit des ordres fermés doit être lancé. Quand un certain profit est atteint, c'est-à-dire : profit + Take Profit >= profit d'un ordre ouvert (appelons-le Ordre 123), ouvert plus tôt que tous les autres, ou avec une perte maximale (je n'ai pas encore décidé).
3. si les conditions sont remplies : "La somme des profits + les profits du taka >= les profits de l'ordre ouvert (appelons l'ordre 123)", l'ordre 123 est fermé et le tableau est mis à zéro (probablement devient = 0 ).

1. Lorsque vous placez un EA, avez-vous déjà des ordres ouverts et fermés que vous voulez prendre en compte ou non et l'EA démarre toujours sans ordres ouverts et ne prend pas en compte les ordres ouverts déjà fermés ?

2. Ce n'est pas clair du tout. Vous avez plusieurs ordres. Lorsqu'un ordre est fermé, le bénéfice total est calculé et il y a les données de bénéfice de l'ordre fermé. Et il y a les données sur les bénéfices des ordres qui ne sont pas fermés ; vous pouvez les calculer. Ce qui est comparé à quoi. Par exemple, nous avons 3 commandes. 1 est fermé, 2 est en cours de fermeture, 3 est ouvert. Nous avons les profils Pr1, Pr2 et estimé Pr3. Nous comparons quoi avec quoi. Nous comprenons que nous ne prenons pas en compte les commissions et les swaps lorsque l'ordre n'est pas fermé.

3. En fait, si vous mettez à zéro le tableau avec les billets, que se passera-t-il ensuite ? Les ordres au marché resteront sur le marché. Comment les fermeriez-vous ?

 
Oksana_Timakova:
Question : comment puis-je conserver la valeur de la barre haute aet de la barre basse b afin deles relier avec une ligne indicatrice ?
Dois-je créer deux tableaux supplémentaires pour cela ?
Oui. Des matrices de mémoire tampon.
 
Valeriy Yastremskiy:
Oui. Des matrices de mémoire tampon.
C'est donc la même chose que pour ZigZag. Et vous devez appliquer une fonction spéciale pour ne pas en dessiner deux ?
 
Oksana_Timakova:
Donc, ça se passe comme dans ZigZag. Et vous devez appliquer une fonction spéciale pour ne pas en dessiner deux ?
Le type de ligne est le même. Je ne comprends pas ce qui ne se dessine pas. Vous déclarez 2 tableaux de tampons. Vous définissez les propriétés. Il s'agit du type de ligne, de l'épaisseur et de la couleur. Et vous attribuez le premier prix haut et le second bas par barre de la série chronologique.
 
Valeriy Yastremskiy:

1. Lorsque vous placez un EA, avez-vous déjà des ordres ouverts et fermés que vous voulez prendre en compte ou non, et à chaque fois l'EA démarre sans ordres ouverts et ne prend pas en compte les ordres précédemment fermés ?

2. Ce n'est pas clair du tout. Vous avez plusieurs ordres. Lorsqu'un ordre est fermé, le bénéfice total est calculé et il y a les données de bénéfice de l'ordre fermé. Et il y a les données sur les bénéfices des ordres qui ne sont pas fermés ; vous pouvez les calculer. Ce qui est comparé à quoi. Par exemple, nous avons 3 commandes. 1 est fermé, 2 est en cours de fermeture, 3 est ouvert. Nous avons les profils Pr1, Pr2 et estimé Pr3. Nous comparons quoi avec quoi. Nous comprenons que nous ne prenons pas en compte les commissions et les swaps lorsque l'ordre n'est pas fermé.

3. En fait, si vous mettez à zéro le tableau avec les billets, que se passera-t-il ensuite ? Les ordres au marché resteront sur le marché. Comment les fermer ?

Encore une fois ))))

Nous avons des ordres ouverts, supposons 5 ordres qui sont tous négatifs. La première (123) avec 0,5 lot est tombée en moins. Nous ouvrons un nouvel ordre (456) avec 0.1 lot, le ticket de cet ordre est écrit dans le tableau lorsqu'il est ouvert. Ensuite, nous procédons à une autre série d'ordres avec le même lot ; nous gagnons des bénéfices et en perdons. Mais l'ordre 123 reste négatif et ouvert. Une fois que le profit de tous les ordres fermés après l'ordre 456 (il est également fermé) est supérieur au profit de l'ordre 123, nous trouvons l'ordre 123 car c'est le premier ordre qui est encore ouvert, nous le fermons et mettons le tableau à zéro.

Si nous avons plusieurs ordres ouverts, nous en ouvrons un de plus sous certaines conditions. Supposons que si le total des commandes>=5

fin des commandes (ticket 456)

si la commande est ouverte avec succès

si le tableau n'est pas occupé

Le ticket 456 est écrit dans le tableau

L'ordre 456 s'est fermé sur le profit (peu importe le profit ou la perte), après cela d'autres ordres ont été ouverts et fermés, mais le tableau conserve le ticket 456.


CalCloseProfi () - cette fonction vérifie le profit des ordres fermés.

parcourt les ordres fermés par magie, achat, vente, en commençant par l'ordre avec le ticket 456 (pris dans le tableau) et en remontant, et compte leur profit.


FirstOrder() - cette fonction recherche le premier ordre ouvert (elle devrait trouver 123).

Si le profilCalCloseProfi> FirstOrder, alors fermez l'ordre 123 et remettez le tableau à zéro, afin de pouvoir y écrire à nouveau lorsque les conditions sont remplies.


Je ne sais pas comment l'expliquer autrement).

Les conditions dans lesquelles il sera exécuté cette fonction, je peux les écrire, mais je ne suis pas confronté aux tableaux.
J'ai besoin d'un exemple, comment mettre les informations dans le tableau, à savoir OrederTicket lorsque vous l'ouvrez, et comment les récupérer ensuite.
Il est souhaitable d'utiliser un tableau double et d'écrire le magicien en une seule partie, de sorte que lorsque l'on travaille sur un compte à différents paramètres ne sont pas mélangés (ou peut-être pas, je ne suis pas bon en tableaux).

Merci d'avance

 
makssub:

Encore une fois ))))

Il y a des ordres ouverts, supposons 5, tous négatifs. Le tout premier (123) avec 0,5 lot était négatif. Nous ouvrons un nouvel ordre (456) avec 0.1 lot, le ticket de cet ordre est écrit dans le tableau lorsqu'il est ouvert. Ensuite, nous procédons à une autre série d'ordres avec le même lot ; nous gagnons des bénéfices et en perdons. Mais l'ordre 123 reste négatif et ouvert. Une fois que le profit de tous les ordres fermés après l'ordre 456 (il est également fermé) est supérieur au profit de l'ordre 123, nous trouvons l'ordre 123 car c'est le premier ordre qui est encore ouvert, nous le fermons et mettons le tableau à zéro.

Si nous avons plusieurs ordres ouverts, nous en ouvrons un de plus sous certaines conditions. Supposons que si le total des commandes>=5

fin des commandes (ticket 456)

si la commande est ouverte avec succès

si le tableau n'est pas occupé

Le ticket 456 est écrit dans le tableau

L'ordre 456 s'est fermé sur le profit (peu importe le profit ou la perte), après cela d'autres ordres ont été ouverts et fermés, mais le tableau conserve le ticket 456.


CalCloseProfi () - cette fonction vérifie le profit des ordres fermés.

passe en revue les ordres fermés par magie, achat, vente, en commençant par l'ordre avec le ticket 456 (pris dans le tableau) et en remontant, et compte leur profit.


FirstOrder() - cette fonction recherche le premier ordre ouvert (elle devrait trouver 123).

Si le profilCalCloseProfi> FirstOrder, alors fermez l'ordre 123 et remettez le tableau à zéro, afin de pouvoir y écrire à nouveau lorsque les conditions sont remplies.


Je ne sais pas comment l'expliquer autrement).

Les conditions dans lesquelles il sera exécuté cette fonction, je peux les écrire, mais je ne suis pas confronté aux tableaux.
J'ai besoin d'un exemple, comment obtenir l'information dans le tableau, à savoir OrederTicket quand il est ouvert, et comment le récupérer après.
Il est souhaitable d'utiliser un tableau double et d'écrire le magicien dans une partie de celui-ci, de sorte que lorsque l'on travaille sur un compte à différents paramètres ne sont pas mélangés (ou peut-être pas, je ne suis pas bon en tableaux).

Merci d'avance

Ecrivez les conditions pour les fonctions.
 

Bon après-midi. Pouvez-vous me dire pourquoi il y a une erreur : array out of range dans '.......'. (152,41)


ticket = OrderSend (Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, tpl, Magic, 0, Red) ;
if (ticket <1)
{
Print("Erreur d'ouverture de vente") ;
}
if (ticket >1 && SaveTick[1] <= 0 && SaveTick[0] == Magique)
{
FindTicket() ;
Print(" Ordre des billets : ", FindTicket(), " Order Array : ", SaveTick[1], " Array Magic : ", SaveTick[0]) ;
}

int FindTicket()
{
int oldticket ;
int tick=0 ;
ticket=0 ;
ArrayResize( SaveTick, 2 ) ;
for(int cnt = OrdersTotal ()-1 ; cnt>=0 ; cnt--)
{
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
oldticket = OrderTicket() ;
if (oldticket > ticket)
{
ticket = oldticket ;
tick = OrderTicket() ;
SaveTick[1] = tick ;
SaveTick[0] = Magic ;
}
}
}
}
return(tick) ;
}

 
makssub #:

Bon après-midi. Pouvez-vous me dire pourquoi il y a une erreur : array out of range dans '.......'. (152,41)


ticket = OrderSend (Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, tpl, Magic, 0, Red);
            if (ticket <1)
            {
               Print("Ошибка открытия на продажу");
            }
               if (ticket >1 && SaveTick[1] <= 0 && SaveTick[0] == Magic)
            {
               FindTicket();
               Print(" Тикет ордера: ", FindTicket(), " Массив ордера: ", SaveTick[1], " Магик массива: ", SaveTick[0]);
    }

int FindTicket()
   {
   int oldticket;
   int tick=0;
   ticket=0;
   ArrayResize( SaveTick, 2 );
   for(int cnt = OrdersTotal ()-1; cnt>=0; cnt--)
      {
      if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
         {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
            {
            oldticket = OrderTicket();
            if (oldticket > ticket)
               {
               ticket = oldticket;
               tick = OrderTicket();
               SaveTick[1] = tick;
               SaveTick[0] = Magic;
               }
            }
         }
      }
   return(tick);
  }              

Insérez le code correctement, alt S ou par l'icône, hint code.

Pourquoi avez-vous besoin du tableauSaveTick ?

Vous n'utilisez que 2 éléments du tableau. Remplacez-les par des variables globales ou statiques si vous les déclarez dans une fonction.

Il n'est pas raisonnable d'utiliser un tableau pour deux variables.

Et vous semblez appeler les tableaux avant l'appel de la fonctionFindTick(), où la taille du tableau SaveTick est définie. Et il y a un dépassement du tableau.

 
Est-ce qu'il a cessé de fonctionner 🤖 ?
Raison: