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

 
MarkTrade:

Je vous demande pardon, expliquez-moi quelle est l'erreur ici. Je n'arrive pas à comprendre.


for (i=0;i>5<==ошибка;i++)
 
MarkTrade:

Je vous demande pardon, expliquez-moi quelle est l'erreur ici. Je n'arrive pas à comprendre.

Décomposons la chaîne.

for (i=0;i<5;i++)

Que i varie de zéro à cinq. Après chaque itération, le compteur augmente d'une unité. Les itérations seront calculées jusqu'à ce que i soit inférieur à cinq. C'est-à-dire que la boucle va fonctionner et qu'elle va effectuer cinq itérations : 0, 1, 2, 3, 4 - ce sont les valeurs du compteur de la boucle i. Lorsque i est égal à cinq, la boucle se termine

Voyons ce que vous avez :

for (i=0;i>5;i++)

Le compteur i est initialisé à zéro, mais les itérations de la boucle doivent avoir lieu tant que i est supérieur à cinq. Et il n'est pas initialement supérieur à cinq. Par conséquent, la boucle ne démarre pas.

 
artmedia70:

Décomposons la chaîne

On peut faire varier i de zéro à cinq. Après chaque itération, le compteur augmente d'une unité. Les itérations seront calculées jusqu'à ce que i soit inférieur à cinq. C'est-à-dire que la boucle va fonctionner et qu'elle va effectuer cinq itérations : 0, 1, 2, 3, 4 - ce sont les valeurs du compteur de la boucle i. Lorsque i est égal à cinq, la boucle se termine

Voyons ce que vous avez :

Le compteur i est initialisé à zéro, mais les itérations de la boucle doivent se poursuivre tant que i est supérieur à cinq. Et il n'est pas initialement supérieur à cinq. Par conséquent, la boucle ne démarre pas.



Oh, c'est vrai ! Merci ! Je devais avoir un œil au beurre noir.
 
K-o-t:

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Messieurs les programmeurs, comment combiner un EA avec un indicateur ?

Par exemple, j'ai pris un bot simple mo_bidir.mq4 qui effectue des transactions en utilisant son propre algorithme et je veux qu'il ouvre des transactions en utilisant son propre algorithme mais après 3 signaux MA.

Par exemple sur lesignal - Trois moyennes mobiles:

FastEMA>MediumEMA>SlowEMA (tendance up) - bot achète

FastEMA<MediumEMA<SlowEMA (tendance down) - bot vend

Inp_Signal_TroisEMA_FastPeriod = 8 ;

Inp_Signal_TroisEMA_MediumPeriod = 38 ;

Inp_Signal_TroisEMA_SlowPeriod= 48;

Je veux que mon conseiller expert négocie sur une échelle de temps de 5 minutes et que l'indicateur donne des signaux sur une échelle de temps quotidienne ou de 4 heures, et je veux pouvoir changer d'échelle de temps dans les paramètres du robot.

\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Je m'excuse pour la répétition, mais dites-moi au moins dans quel fil du forum je dois postuler, ou dois-je créer un nouveau fil ?

Je ne sais pas quoi faire.


Ce que vous voulez faire s'appelle le filtrage. Faites donc une recherche sur le mot "filtre", regardez quelques EA avec filtrage, et voyez si vous pouvez faire ce dont vous avez besoin.
 
artmedia70:

Je suis un peu confus... :) Un problème :

1. Il y a un poste ouvert de 0.1 lot

2. Sa valeur TakeProfit est de 50 pips.

3. Je calcule son profit potentiel selon la formule PotentialProfit = Lots*TakeProfit*MarketInfo(Symbol(), MODE_TICKVALUE) ;

4. D'après le calcul, j'obtiens un bénéfice potentiel de 5,00 $ (0,1*50*1,0).

La position passe dans le rouge et à un moment donné, une autre moyenne d'achat s'ouvre, mais avec 0,2 lot.

1. Je calcule le Breakeven pour ces deux positions. La fonction a été utilisée pendant une longue période, comme prévu, et je n'ai pas eu à me plaindre jusqu'à présent :

2. Parfait. Vous avez calculé le seuil de rentabilité, mais... si vous y mettez les jetons de ces deux positions, ils fermeront à zéro. Ok, je pense. Maintenant, je dois ajouter à ce niveau de l'UB autant de points qu'il me faut pour obtenir un bénéfice total, égal à celui calculé précédemment - 5 $.

3. Et c'est là que j'ai un blocage dans mon cerveau. Ce que je fais : je prends 5 $, je divise par le lot total de ces deux positions (0,1 + 0,2 = 0,3), je multiplie par TICK_VALUE.

J'ai 5/(0.3*1.0) = 16.6666 Je le multiplie ensuite par Point (0,00016) et je l'ajoute au prix de Breakeven.

4. Parfait. Les prises y sont transférées, mais il me semble que le profit total de deux Baisers fermant à ce niveau n'est pas égal à 5 $ - il me semble moins. C'est ce que l'on peut voir sur le tableau des tests. Il montre clairement que lorsqu'une position est fermée, l'augmentation du solde est beaucoup plus importante que lorsque plusieurs positions sont fermées au niveau de la prise totale calculée (vous pouvez voir ces endroits sur le graphique par l'apparition de la ligne d'équité sur eux). Graphique :


Où ai-je tort ?

Je comprends que vous puissiez imprimer le bénéfice total, mais... Je veux comprendre où je pourrais me tromper dans mes calculs, pas la valeur des variables. Je les ai déjà imprimés.

( 0.3 * 16 = 4.8 ) < ( 0.3 * 16.66666 = 5 )
Je ne sais pas si c'est la différence que vous aviez en tête, mais en raison de l'arrondi de 16,6666, le bénéfice sera naturellement inférieur aux 5 $ que vous aviez prévu d'obtenir.
 
artmedia70:

Je me prends un peu la tête... :) Le problème :

1. Il y a un poste ouvert de 0.1 lot

2. Sa valeur TakeProfit est de 50 pips.

3. Je calcule son profit potentiel selon la formule PotentialProfit = Lots*TakeProfit*MarketInfo(Symbol(), MODE_TICKVALUE) ;

4. D'après le calcul, j'obtiens un bénéfice potentiel de 5,00 $ (0,1*50*1,0).

La position passe dans le rouge et à un moment donné, une autre moyenne d'achat s'ouvre, mais avec 0,2 lot.

1. Je calcule le Breakeven pour ces deux positions. La fonction a été utilisée pendant une longue période, comme prévu, et je n'ai pas eu à me plaindre jusqu'à présent :

2. Parfait. Vous avez calculé le seuil de rentabilité, mais... si vous y mettez les jetons de ces deux positions, ils fermeront à zéro. OK, je pense. Maintenant, je dois ajouter à ce niveau de l'UB autant de points qu'il me faut pour obtenir un bénéfice total, égal à celui calculé précédemment - 5 $.

3. Et c'est là que j'ai un blocage dans mon cerveau. Ce que je fais : je prends 5 $, je divise par le lot total de ces deux positions (0,1 + 0,2 = 0,3), je multiplie par TICK_VALUE.

J'ai 5/(0.3*1.0) = 16.6666 Je le multiplie ensuite par Point (0,00016) et je l'ajoute au prix d'équilibre.

4. Parfait. Les prises y sont transférées, mais il me semble que le profit total de deux Baisers fermant à ce niveau n'est pas égal à 5 $ - il me semble moins. C'est ce que l'on peut voir sur le tableau des tests. Il montre clairement que lorsqu'une position est fermée, l'augmentation du solde est beaucoup plus importante que lorsque plusieurs positions sont fermées au niveau de la prise totale calculée (vous pouvez voir ces endroits sur le graphique par l'apparition de la ligne d'équité sur eux). La carte :


Où ai-je tort ?

Je comprends que vous puissiez imprimer le bénéfice total, mais... Je veux comprendre où je pourrais me tromper dans mes calculs, pas la valeur des variables. Je les ai déjà imprimés.

Je ne comprends pas pourquoi ça doit être si compliqué.
Cela ne rendrait-il pas les choses plus faciles ?

  double sumprofit=0;
  for (int i=0; i<OrdersTotal(); i++) 
      {
       if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
          {
           if ((OrderSymbol()==Symbol()) 
              {
               if (OrderType()==OP_BUY || OrderType()==OP_SELL) 
                  {
                    sumprofit+=OrderProfit()+OrderCommission()+OrderSwap();
                  }
             }
         }
      }
  if(sumprofit > 5) AllPosClose();//5 ----> суммарный профит позиций
 

ou comme ceci

double sumprofit;
  for (int i=0; i<OrdersTotal(); i++) 
      {
       if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
          {
           if ((OrderSymbol()==Symbol()) 
              {
               if (OrderType()==OP_BUY || OrderType()==OP_SELL) 
                  {
                    sumprofit+=OrderProfit()+OrderCommission()+OrderSwap();
                  }
             }
         }
      }
  if(sumprofit > 5) AllPosClose();//5 ----> суммарный профит позиций
  if(sumprofit < -5) Dolivka();//  определенным лотом Sell или Buy
 
Veuillez me conseiller, je ne suis pas un programmeur - où dans le terminal se trouvent les indicateurs téléchargés (comment les voir et les exécuter). Je les ai téléchargés et installés, mais je ne les trouve pas dans le terminal lui-même.
 
fox6900:
Veuillez me conseiller, je ne suis pas un programmeur - où dans le terminal se trouvent les indicateurs téléchargés (comment les voir et les exécuter). Je les ai téléchargés et installés, mais je ne les trouve pas dans le terminal lui-même.

comment les avez-vous installés ? Dites-nous comment... peut-être aurons-nous un indice...
 
Peut-on lire AccountNumber() à partir de la dll et comment ? Au moins, donnez-moi un indice pour savoir où creuser. Je veux dire sans passer la valeur de la fonction à la dll, c'est-à-dire à partir de la bibliothèque dynamique elle-même.
Raison: