Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 126

 
hoz:

Je vais répéter la question que j'ai posée hier. Je ne veux pas le poster dans un fil séparé. Si quelque chose n'est pas clair, je répondrai à toutes les questions.

J'ai toujours du mal à fermer les positions requises. La situation est la suivante :

1) La fermeture des postes fait l'objet d'un suivi.

2. Dès que la dernière position a été fermée à la ligne de prise... ...toutes les positions ouvertes et en attente doivent être fermées immédiatement. Tout est fermé et trié par lots, c'est-à-dire les grands lots d'un coup, puis les plus petits. Il s'agit uniquement d'acquérir de l'expérience en matière de commandes.

La mise en œuvre est la suivante :

Dans start() à chaque tick :

Nous sommes intéressés par la clôture des ordres de marché puisque l'ordre en attente est supprimé au besoin. Voici ce que nous avons :

Pour une raison quelconque, certaines des commandes ne sont pas fermées. J'imprime certains segments quand je les vois, je ne comprends rien. Voici un exemple :

Le commentaire indique que lastOOTHist = 01:30:00, bien que cela ne soit pas correct. Si nous vérifions lastOOTHist dans la fenêtre des résultats, nous verrons que

leurs heures de fermeture sont différentes...

Qu'est-ce qui ne va pas ici ?

Vous avez tout mélangé...

juste ici :

for(i=0; i<p; i++)
      {
         if (OrderSelect(a[i][1], SELECT_BY_TICKET, MODE_TRADES)) // выделенное красным лишнее, тут pool не имеет значения
         {
             if (OrderCloseTime() == 0) ClosePosBySelect();
         }
      }

Retirez les valeurs de toutes les cellules du tableau avant la boucle - peut-être y a-t-il un chien là-dedans ?

 
Forexman77:
Pouvez-vous me dire comment connaître le spread au moment de l'ouverture d'une transaction, ou mieux encore, comment le faire afficher dans le journal ?

Immédiatement après avoir ouvert une transaction :

ticket=OrderSend(......);
if(ticket>=0)Print("ticket #",ticket," Spread=",doubleToStr(Ask-Bid,Digits)); 
Votre répartition est dans le journal.
 
Sepulca:

Immédiatement après l'ouverture du marché :

Votre répartition est dans le journal.



Merci beaucoup ! J'ai créé un EA, sur le testeur il gagne de l'argent, sur la démo c'est pire. Il fera probablement encore pire sur le réel. Je n'ai pas vu combien de fois j'ai regardé les visuels.

Lorsque j'observais visuellement le spread, je ne voyais pas plus de trois pips. Mon idée est que pendant les mouvements les plus forts, il n'apparaît pas du tout ou bien il s'élargit, de sorte que je n'ai pas assez de temps pour le remarquer.

Alpari a un spread faible, mais je suppose qu'il augmente de manière significative lors de mouvements forts. Chez DucasCopi, le spread est encore plus bas mais les commissions sont importantes, elles diminuent si le compte est de plusieurs millions de dollars.

Avez-vous fait des recherches sur la taille du spread, avec des mouvements de plus de 50 pips par minute ? À quelle valeur l'écart moyen augmente-t-il avec ces mouvements ?

J'ai demandé à Alpari, ils n'ont rien dit.

 
FAQ:


Lorsque vous passez une variable (tableau) dans une fonction par valeur, une variable locale est créée dans la fonction et vous la déclarez dans l'en-tête : maFonction(int ma_var). De cette façon, les changements de cette variable ne peuvent pas être vus en dehors de la fonction. Et dans le cas d'un tableau, le compilateur vous le rappellera.

Si vous voulez que les changements de la valeur de la variable soient visibles à l'extérieur (en dehors de la fonction), passez les variables par référence : myFunct(int & my_var)


Mais oui. Après tout, un tableau est déclaré globalement. Mais le changement à l'intérieur de la fonction est local. C'est pourquoi il existe des fonctions comme les microstructures. Afin de mettre en œuvre localement des micro-problèmes.
 

Bon profit à tous ! Veuillez me dire comment faire pour que OrderOpenPrice() renvoie le prix avec cinq décimales. Si le terminal renvoie 4 chiffres, si c'est 5, il renvoie encore 4, en arrondissant le cinquième.

 
ivan180976:

Bon Profit à tous ! Veuillez me dire comment faire pour que OrderOpenPrice() renvoie le prix avec cinq décimales. Si le terminal renvoie 4 chiffres, si c'est 5, il renvoie encore 4, en arrondissant le cinquième.


DoubleToStr(nombre, précision)
 

Forexman77:
Forexman77:



Merci beaucoup ! J'ai créé un EA, il gagne de l'argent sur le testeur, c'est pire sur la démo. Il fera probablement encore pire sur le réel. Je travaille dessus depuis un certain temps maintenant, mais j'ai vu combien de fois je suis passé par là.

Lorsque j'observais visuellement le spread, je ne voyais pas plus de trois pips. Mon idée est que pendant les mouvements les plus forts, il n'apparaît pas du tout ou bien il s'élargit, de sorte que je n'ai pas assez de temps pour le remarquer.

Alpari a un spread faible, mais je suppose qu'il augmente de manière significative lors de mouvements forts. Chez DukasCopi, le spread est encore plus faible mais les commissions sont importantes, elles diminuent si le compte est de plusieurs millions de dollars.

Avez-vous fait des recherches sur la taille du spread, avec des mouvements de plus de 50 pips par minute ? À quelle valeur l'écart moyen augmente-t-il avec ces mouvements ?

J'ai demandé à Alpari, ils n'ont pas répondu.


J'ai analysé le spread juste vendredi, juste sur Alpari d'ailleurs :

Les jaunes fins représentent l'écart maximum par barre (j'ai utilisé une minute). Rouge gras - écart minimum par barre. Comme vous pouvez le constater, pendant la journée, le spread varie de 5 à 14 pips en cinq chiffres. Mais après 21h00, l'écart de temps du serveur ne descend pas en dessous de 10 points, et en fin de journée, il remonte généralement jusqu'à 52 points. J'ai saisi un moment intéressant avant le changement brutal de prix, le spread augmente fortement :

 
artmedia70:

C'est un peu un carambolage...

juste là :

for(i=0; i<p; i++)
      {
         if (OrderSelect(a[i][1], SELECT_BY_TICKET, MODE_TRADES)) // выделенное красным лишнее, тут pool не имеет значения
         {
             if (OrderCloseTime() == 0) ClosePosBySelect();
         }
      }

C'est juste pour faciliter la référence. Quand j'écrivais, mais sinon, oui, tu n'es pas obligé. Mais ça ne me dérange pas non plus.

Il n'imprimera aucune valeur de tableau :

artmedia70:

Désimprime la valeur de toutes les cellules d'un tableau avant la boucle - peut-être que le chien creuse là ?



//+-------------------------------------------------------------------------------------+
//| Закрытие ордеров, отсортированных по размеру лотов                                  |
//+-------------------------------------------------------------------------------------+
void ClosePosBySortLots()
{
   double a[][2];
   int p = 0;
   
   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() < 2)
      {
         p++;
         ArrayResize(a, p);
         a[p-1][0] = OrderLots();
         a[p-1][1] = OrderTicket();
      }
   }
//   pr ("ClosePosBySortLots(): " + "p = " + p);
   if (p > 0)
   {
      ArraySort(a, WHOLE_ARRAY, 0, MODE_DESCEND);
      
      for(i=0; i<=p; i++)
      {
          pr("a[i][1] = " + a[i][1]);
          i++;
      }
      
      for(i=0; i<p; i++)
      {
         if (OrderSelect(a[i][1], SELECT_BY_TICKET, MODE_TRADES))
         {
             if (OrderCloseTime() == 0) ClosePosBySelect();
         }
      }
   }
}

La sortie n'est pas du tout vide...

 
hoz:

Il ne produit aucune valeur de tableau :


Il ne produit rien du tout...

Vide à quel point ? N'imprime-t-il rien du tout, ou y a-t-il encore des zéros dans les cellules du tableau ?
 

Pourquoi augmenter i dans le corps de la boucle ?

 for(i=0; i<=p; i++)
      {
          pr("a[i][1] = " + a[i][1]);
          i++;    // ??????????????????????????????????????
      }

et ceci : i<=p, pourquoi "ou égal à" ?

Raison: