Aide au codage - page 658

 

Cher mladen

Si je veux connaître le dernier type d'ordre fermé et s'il a fait du profit dans un EA, la fonction suivante peut-elle faire le travail ?

int OrdersProfit()
  {
   int Profit;
   for (int i=OrdersHistoryTotal(); i>=0; i--)
     {
      if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
      if (OrderType()==OP_BUY  && OrderProfit()> 0) Profit ="1" ;
      if (OrderType()==OP_SELL && OrderProfit()> 0) Profit ="2" ;
     }    
   return(Profit);
  }


Best,

 
IXI:

Cher mladen

Si je veux connaître le dernier type d'ordre fermé et s'il a fait du profit dans un EA, la fonction suivante peut-elle faire le travail ?


Le mieux,

Non, ce n'est pas possible (simplement parce que les ordres fermés ne sont pas classés par heure de clôture - du moins c'est ce que le manuel nous dit : aucune garantie que les ordres sont classés par heure de clôture). Il faut faire quelque chose comme ceci :

int OrdersProfit()
{
   int      profit    = 0;
   datetime CloseTime = 0;
       for(int i=OrdersHistoryTotal()-1;i>=0;i--)
       {
           if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
           if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
           {
              CloseTime = OrderCloseTime();
              if (OrderType()==OP_BUY  && OrderProfit()> 0) Profit =1 ;
              if (OrderType()==OP_SELL && OrderProfit()> 0) Profit =2 ;
           } 
       }
       return(Profit);
}  
 

Cher mladen

Merci beaucoup pour votre réponse parfaite.

La meilleure,

 

Chers amis,

Pouvez-vous mettre à jour les indicateurs ci-joints pour la dernière version de mt4 s'il vous plaît ?

En particulier, "123PatternsV6" est gelé mt4 et ne fonctionne pas !

 
oguz:

Chers amis,

Pouvez-vous mettre à jour les indicateurs ci-joints pour la dernière version de mt4 s'il vous plaît ?

En particulier, "123PatternsV6" est gelé mt4 et ne fonctionne pas !

Je pense que 123 a besoin de l'indicateur zigzag pour fonctionner sans geler le terminal.
 
mntiwana:
Je pense que 123 a besoin de l'indicateur zigzag pour travailler sans geler le terminal.

L'indicateur Zigzag est déjà disponible dans mt4.

 
oguz:

L'indicateur Zigzag est déjà disponible dans mt4.

Le nouveau zigzag ne fonctionne pas comme les versions précédentes. Il va bloquer le terminal si certains paramètres sont utilisés à partir d'appels iCustom().
 

Salut.

J'ai commencé dernièrement à programmer MQL4 pour acquérir de l'expérience afin de pouvoir coder mes propres idées pour les tester au préalable.

Maintenant, j'ai du mal avec le timing de la peinture.

Disons que j'ai un statut if pour certaines stochastiques et que je veux attendre que la MA passe au-dessus ou au-dessous du prix avant de peindre, comment puis-je faire cela ?

Ce que j'ai essayé et la seule chose qui m'est venue à l'esprit :

if(iStochastic(NULL, PERIOD_CURRENT, _K_period, _D_period, Slowing, MODE_SMA, 0, MODE_MAIN, i) > 80
      && iStochastic(NULL, PERIOD_CURRENT, _K_period, _D_period, Slowing, MODE_SMA, 0, MODE_MAIN, i+1) < 80

 while High[i] > iMA(NULL, PERIOD_CURRENT, MAfilter, 0, MODE_EMA, PRICE_CLOSE, i+1) //Candlestick High < Moving Average
            (
               1+1
            )
       
      )

{
         Buffer1[i] = High[i]; //Set indicator value at Candlestick High
         if(i == 0 && Time[0] != time_alert) { myAlert("indicator", "Selling opportunity"); time_alert = Time[0]; } //Instant alert, only once per bar
        }
      else
        {
         Buffer1[i] = 0;

Le 1+1 juste pour remplir la boucle while, ce que j'essaie de faire est d'attendre pour peindre la flèche jusqu'à ce que le haut du prix soit en dessous de la MA, mais pourtant je ne veux pas que ce soit une déclaration puisque le croisement s'est produit, je veux juste attendre avant de peindre.

Cependant, cela n'a pas été couronné de succès, c'est pourquoi je demande aux codeurs professionnels de la communauté.

 
NWFstudent:

Salut.

J'ai commencé dernièrement à programmer MQL4 pour acquérir de l'expérience afin de pouvoir coder mes propres idées pour les tester au préalable.

Maintenant, j'ai du mal avec le timing de la peinture.

Disons que j'ai un statut if pour certaines stochastiques et que je veux attendre que la MA passe au-dessus ou au-dessous du prix avant de peindre, comment puis-je faire cela ?

Ce que j'ai essayé et la seule chose qui m'est venue à l'esprit :

Le 1+1 juste pour remplir la boucle while, ce que j'essaie de faire est d'attendre pour peindre la flèche jusqu'à ce que le haut du prix soit en dessous de la MA, mais pourtant je ne veux pas que ce soit une déclaration puisque le croisement s'est produit, je veux juste attendre avant de peindre.

Cependant, cela n'a pas été couronné de succès, c'est pourquoi je demande aux codeurs professionnels de la communauté.

Essayez comme ceci :

Buffer1[i] = 0;
if(   iStochastic(NULL, PERIOD_CURRENT, _K_period, _D_period, Slowing, MODE_SMA, 0, MODE_MAIN, i)   > 80
   && iStochastic(NULL, PERIOD_CURRENT, _K_period, _D_period, Slowing, MODE_SMA, 0, MODE_MAIN, i+1) < 80 
   && High[i] > iMA(NULL, PERIOD_CURRENT, MAfilter, 0, MODE_EMA, PRICE_CLOSE, i+1)) //Candlestick High < Moving Average
         Buffer1[i] = High[i]; //Set indicator value at Candlestick High

if(i == 0 && Time[0] != time_alert && Buffer1[i]!=0) { myAlert("indicator", "Selling opportunity"); time_alert = Time[0]; } //Instant alert, only once per bar
 
mladen:

Essayez comme ceci :

Cela me donnera le "signal" uniquement lorsque le croisement se produit au-dessus de la MA, je veux qu'il se produise sous la MA, mais je veux aussi le signal si j'ai un croisement au-dessus de la MA et que quelques barres plus tard le prix passe sous la MA.

C'est ce que j'ai essayé de faire avec la boucle while, pour que le code tourne en boucle jusqu'à ce que l'argument devienne faux et que le signal soit envoyé.

J'ai fait un dessin schématique, peut-être que vous comprendrez mieux.

Merci quand même pour votre réponse

Dossiers :
illust.png  24 kb