[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 452

 
Vinin:

Mais l'en-tête de l'indicateur doit également être modifié. Tous les tampons doivent pouvoir stocker la valeur

Et ce serait bien de calculer l'historique, mais c'est bien sûr une question de goût. Et de travailler plus correctement avec les objets. À chaque tic, des objets portant le même nom sont créés (ou créent une erreur).

J'ai réparé l'en-tête.

avec un tampon :

     UP_1Buffer[0] = uitog1v;
     UP_2Buffer[0] = uitog2v;
     UP_3Buffer[0] = uitog3v;
     DOWN_1Buffer[0] = ditog1v;
     DOWN_2Buffer[0] = ditog2v;
     DOWN_3Buffer[0] = ditog3v;

Je l'ai.

Merci beaucoup pour votre aide.


Quant à vos suggestions, j'aimerais les faire, mais je ne peux pas les faire moi-même, malheureusement.

 
artmedia70:

Essayez de mettre en mots ce que vous avez écrit ici :

Personnellement, dès le premier coup d'oeil, j'ai trouvé votre énigme : Si un n'est pas égal à un, alors fermez la commande...

Je n'ai pas regardé le reste après ça...

SZY et n'essayez pas, ne pensez même pas, qu'il est possible d'écrire un bon EA en un cycle...

Voici l'idée :

Point d'entrée sur le marché : à tout moment, s'il n'y a pas de positions en suspens, et encore moins de positions ouvertes.

Le robot ouvre 2 positions en attente, avec une distance égale en pips du prix actuel (c'est une variable personnalisée PriceDistance).

Les ordres en attente ont tous deux les mêmes TP, SL, TS (comme l'image miroir du prix actuel).

Et les deux pour la même heure (en perspective la variable "TimeStop").

Tous....

En pratique : les positions précédentes sont fermées (soit les deux avec le temps d'expiration, soit sur le SL ou le TP - peu importe), le terminal est libéré, immédiatement après, les mêmes positions sont ouvertes avec les mêmes paramètres, mais, à partir du prix actuel, dans une nouvelle fourchette. Plus loin, selon le cycle.

L'idée est primitive, 100% pluator, mais j'envisage d'avancer dans cette direction et de la connecter à d'autres signaux, par exemple des Volumes à certaines valeurs à certaines échéances.....

C'est pourquoi j'ai besoin du logiciel en urgence.....

Je me suis donc donné pour tâche de l'écrire...

 
Bonsoir ! J'ai écrit la construction la plus simple ici, pour calculer le profit disponible, sur chaque tick. Eh bien, ça ne marche pas ! Je l'ai regardé pendant 10 minutes, j'ai mangé le code avec mes yeux. Je ne vois pas d'erreur. Voici le code.
//----
        double Profit;
for ( i=OrdersTotal();i>0;i--){ OrderSelect(i-1,SELECT_BY_POS );

if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_SELL ||
      
 OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_BUY){
 
  
 Profit=Profit+OrderProfit( ) ;Alert ("i ", i ," Profit ", Profit);}}
 
 
//----
Le chiffre magique est bon. Je l'ai vérifié quatre fois. Les supports, tout ce que j'ai pu penser à regarder, tout semble être correct. Peut-être que j'écris/comparais dans le mauvais ordre ? J'ai regardé la référence. Aidez-moi, s'il vous plaît ! Je ne peux pas le faire sans toi ! Pouvez-vous me dire ce qui pourrait clocher ?
 
Et vous savez, séparément, les trois conditions fonctionnent ! !!
 double Profit;
for ( i=OrdersTotal();i>0;i--){ OrderSelect(i-1,SELECT_BY_POS );

if( OrderType( ) ==OP_SELL ){Alert ("i ", i ," OP_SELL ", Profit);}

if( OrderSymbol()==Symbol()){Alert ("i ", i ," Symbol() ", Profit ,Symbol(), OrderSymbol());}

if( OrderMagicNumber( )==2000  ) {Alert ("i ", i ," OrderMagicNumber( ) ", Profit , OrderMagicNumber( ));}



if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_SELL ||
      
 OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_BUY){
 
  
 Profit=Profit+OrderProfit( ) ;Alert ("i ", i ," Profit ", Profit);}}
Je suis choqué et confus ! !!
 
dkfl.zrjdktdbx:
Bonsoir ! J'ai écrit une construction simple pour calculer le profit disponible sur chaque tick. Eh bien, ça ne marche pas ! Je l'ai regardé avec mes yeux pendant 10 minutes. Je ne vois pas l'erreur. Le code de Magik est correct. Je l'ai vérifié quatre fois. Les supports, tout ce à quoi j'ai pu penser, tout semble être bon. Peut-être que j'écris/comparais dans le mauvais ordre ? J'ai regardé la référence. Aidez-moi, s'il vous plaît ! Je ne peux pas le faire sans toi ! Pouvez-vous me dire ce qui pourrait clocher ?


Quelques crochets sont manquants.

double Profit=0;
for ( i=OrdersTotal();i>0;i--){ OrderSelect(i-1,SELECT_BY_POS );

if( ( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_SELL ) ||
      
( OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_BUY ) ){
 
  
 Profit=Profit+OrderProfit( ) ;Alert ("i ", i ," Profit ", Profit);}}
 

Cela semble être le cas. Bien qu'il soit préférable de rester simple.

double Profit=0;
for ( i=OrdersTotal();i>0;i--){ 
   OrderSelect(i-1,SELECT_BY_POS );
   if(OrderSymbol()==Symbol()) {
      if( OrderMagicNumber( )==2000 && OrderType( ) ==OP_SELL )  Profit+=OrderProfit( );
      if( OrderMagicNumber( )==1000 && OrderType( ) ==OP_BUY  )  Profit+=OrderProfit( );
   }
   Alert ("i ", i ," Profit ", Profit);
}
 

J'ai cette question - dans MT4 : (2/3*9 == 2*9/3) ?

         Comment(
            "\n",
            "\n", "2/3*9        = ", 2/3*9,
            "\n", "2*9/3        = ", 2*9/3,
            "\n",
         "\n" );


Merci !

 
chief2000:

J'ai cette question - dans MT4 : (2/3*9 == 2*9/3) ?


Merci !


Quel est l'intérêt ?

Vérifiez avec une calculatrice - vous le saurez.

Voir la documentation - comment les expressions sont calculées.

Tu devrais au moins lire un manuel...

"Il est facile de voir que l'ordre de calcul des expressions dans un programme est similaire à l'ordre des calculs similaires en mathématiques, mais diffère dans le calcul des types de valeurs des expressions intermédiaires, ce qui affecte de manière significative le résultat final des calculs. En particulier (contrairement aux règles admises en mathématiques), l'ordre des opérandes dans une expression n'est pas sans importance. Pour le montrer, prenons un petit exemple. Problème 6 : calculez les valeurs des expressions A/B*C et A*C/B pour les entiers A, B et C.


Intuitivement, on s'attend à ce que le résultat des calculs soit le même dans les deux cas. Cependant, ceci n'est vrai que pour les nombres réels. Lors du calcul des valeurs d'expressions composées d'opérandes entiers, le résultat intermédiaire est très important. Dans un tel cas, la séquence des opérandes est d'une importance fondamentale :

int A = 3; // Значение целого типа
int B = 5; // Значение целого типа
int C = 6; // Значение целого типа
int Res_1 = A/B*C; // Результат 0 (ноль)
int Res_2 = A*C/B; // Результат 3 (три)

Retraçons le processus de calcul de l'expression A/B*C :

1. Tout d'abord (de gauche à droite), la valeur de l'expression A/B sera calculée. Selon les règles ci-dessus, la valeur de l'expression (3/5) sera la valeur entière 0 (zéro).

2. Calculez l'expression 0*C (zéro multiplié par C). Le résultat est la valeur entière 0 (zéro).

3) Le résultat global (valeur de la variable Res_1) est une valeur entière de 0 (zéro).

Voyons maintenant comment les choses évoluent lors du calcul de l'expression A*C/B.

1. Calculer A*C. La valeur de cette expression est le nombre entier 18 (3*6=18).

2. Calcul de l'expression 18/B. La réponse est évidente : (18/5) après avoir éliminé la partie fractionnaire, le résultat sera un nombre entier 3 (trois).

Le résultat total (valeur de Res_2) est le nombre entier 3 (trois).

Cet exemple montre un petit fragment de programme qui calcule les valeurs de variables de type entier. Si nous remplaçons ces variables par des constantes, mais que nous utilisons les mêmes valeurs, le résultat final sera le même. Lors du calcul d'expressions, dans lesquelles des nombres entiers sont utilisés, vous devez faire très attention au contenu des lignes de programme. Sinon, une erreur peut se produire dans le programme, ce qui est très difficile à détecter par la suite (surtout dans les gros programmes). Ce problème ne se pose pas dans le cas de calculs, dans lesquels seuls des nombres réels sont impliqués. Cependant, si vous utilisez des opérandes de différents types dans une expression complexe, le résultat final peut dépendre entièrement d'un fragment généré aléatoirement contenant la division d'entiers.

Le concept et les propriétés générales des opérateurs sont abordés dans la section Opérateurs, et le chapitre Opérateurs révèle les propriétés propres de chaque opérateur."

 
FileFlush est-il identique à l'enregistrement d'un fichier ?
 
Roman.:


Quel est le problème ?

Vérifiez avec une calculatrice - vous le saurez.

J'ai vérifié - la Casio et même la calculatrice de Microsoft disent que 2/3*9=6.


 
chief2000:

J'ai vérifié - la Casio et même la calculatrice de Microsoft disent 2/3*9=6.



Bien. Quel est le problème ?
Raison: