[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 173

 
Ctmcn:

Pouvez-vous me dire ce que signifie l'erreur lors de la compilation de l'EA ?

\Žfin_du_programme' - parenthèse gauche déséquilibrée


Parenthèse gauche déséquilibrée.
 
Roll:

Support gauche déséquilibré.

Oups... Je l'ai trouvé. MERCI.
 

Voici une question.

Les ordres sont ouverts en tant que BUY/SELL STOP. Certains deviennent des ordres de marché, d'autres sont supprimés.

Pour les derniers ordres N-market (ouverts et fermés), nous devons savoir s'il s'agissait d'un achat ou d'une vente.

Ma première idée est de rechercher toutes les commandes à partir de OrdersHistoryTotal() et OrdersTotal(), de les trier par

et ensuite les trier par OP_BUY et OP_SELL. Mais cela est long et ralentira sauvagement le processeur.

- Peut-être existe-t-il une autre variante, plus simple ?

Merci !

 

Bon après-midi.

Quelqu'un peut-il m'aider ?

J'ai écrit mon premier indicateur simple, il doit calculer la volatilité moyenne pour les 2, 3, 4 et 5 derniers jours.

L'indicateur dispose de six tampons,

SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,VolatBuffer0);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexBuffer(1,VolatBuffer1);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   SetIndexBuffer(2,VolatBuffer2);
   SetIndexStyle(3,DRAW_HISTOGRAM);
   SetIndexBuffer(3,VolatBuffer3);
   SetIndexStyle(4,DRAW_HISTOGRAM);
   SetIndexBuffer(4,VolatBuffer4);
   SetIndexStyle(5,DRAW_LINE);
   SetIndexBuffer(5,VolatBuffer5);

Dans sa fenêtre, le graphique ne trace normalement que cinq lignes verticales de volatilité pour 0 jour, 1 jour, moyenne pour 2 jours, 3 jours et 4 jours.

La volatilité moyenne en fonction de la somme des 5 jours précédents est dessinée comme une ligne brisée pour 50 bougies quotidiennes - c'est le nombre de bougies spécifié.

Le contenu des tampons est calculé de la manière suivante : calcul de la moyenne sur 5 jours - dans le cycle (pour tracer une ligne sur 50 jours), autres données moyennes - hors du cycle.

while(i>=0)
   {
    
   int day0= (High[i] - Low[i])/Point;
   int day1= (High[i+1] - Low[i+1])/Point;
   int day2= (High[i+2] - Low[i+2])/Point;
   int day3= (High[i+3] - Low[i+3])/Point;
   int day4= (High[i+4] - Low[i+4])/Point;
   int day5= (High[i+5] - Low[i+5])/Point;

        int D5_av = (day1+ day2+ day3+ day4+ day5) / 5;
       VolatBuffer5[i]=D5_av;
      i--;
        }
        day0= (High[0] - Low[0])/Point;
   day1= (High[1] - Low[1])/Point;
   day2= (High[2] - Low[2])/Point;
   day3= (High[3] - Low[3])/Point;
   day4= (High[4] - Low[4])/Point;
        
        int D4_av = (day1+ day2+ day3+ day4)/4;
        int D3_av = (day1+ day2+ day3)/3;
        int D2_av = (day1+ day2)/2;
        int D1_av = day1/1;
        int D0_av = day0/1;
        
        VolatBuffer0[0]=D0_av;
      VolatBuffer1[1]=D1_av;
      VolatBuffer2[2]=D2_av;
      VolatBuffer3[3]=D3_av;
      VolatBuffer4[4]=D4_av;
Comment("Волатильность. За 5 дн.= "+VolatBuffer5[5]+" За 4 дн.= "+VolatBuffer4[4]+" За 3 дн.= "+VolatBuffer3[3]+" За 2 дн.= "+VolatBuffer2[2]+" Вчера= "+VolatBuffer1[1]+" Сегодня= "+VolatBuffer0[0]);

La ligne Coment de l'indicateur, dans laquelle le contenu des tampons est saisi, donne une absurdité à l'écran :

Moyenne sur 5 jours - pas de volatilité supérieure à 194 pips pour ces jours et résultats corrects pour les autres jours.

Coment = " Volatilité. Pour 5 jours = 219.000000 Pour 4 jours = 171.0000000 Pour 3 jours = 189.00000 Pour 2 jours = 187.00000 Hier = 194.00000 Aujourd'hui = 5 "

Le jour zéro "Aujourd'hui" augmente clairement avec la volatilité du jour en cours

Lors de l'appel de ces tampons au conseiller expert

int Volat0= iCustom(Symbol(), 1440, "Volat_Average_Gist",0,0);
      int Volat1= iCustom(Symbol(), 1440, "Volat_Average_Gist",1,0);
      int Volat2= iCustom(Symbol(), 1440, "Volat_Average_Gist",2,0);
      int Volat3= iCustom(Symbol(), 1440, "Volat_Average_Gist",3,0);
      int Volat4= iCustom(Symbol(), 1440, "Volat_Average_Gist",4,0);
      int Volat5= iCustom(Symbol(), 1440, "Volat_Average_Gist",5,0);

La ligne Print du testeur produit une autre absurdité - non correcte, différente de la ligne Coment, mais similaire à la vérité, le résultat moyen pour 5 jours et la volatilité correcte du "Jour Zéro" d'aujourd'hui.

Le reste donne un nombre fixe absurde.

Le test Print montre la Volatilité dans 5 jours=181 Dans 4 jours= 2147483647 Dans 3 jours= 2147483647 Dans 2 jours= 2147483647 Hier= 2147483647 Aujourd'hui= 5

Depuis plusieurs jours, je n'arrive pas à comprendre pourquoi des données différentes de celles contenues dans les cinq tampons des indicateurs sont appelées dans l'Expert Advisor, à l'exception du tampon "Jour Zéro" ?

 

Essayez de substituer

VolatBuffer1[1]=D1_av;

à

VolatBuffer1[0]=D1_av;

et tous les autres tampons également.

 
Roger:

Essayez de substituer

VolatBuffer1[1]=D1_av;

à

VolatBuffer1[0]=D1_av;

et tous les autres tampons également.

Merci !

Ça a marché. Le conseiller expert a commencé à recevoir des données normales.

De plus, il y a un effet intéressant - dans la ligne "Coment" de l'indicateur

seulement 219 pour 5 jours restera comme il était.

Dans le même temps, le conseiller expert reçoit 181 au lieu de 219 comme il le devrait.

Coment''montre Volatilité Sur 5 jours= 219.000000 Sur 4 jours= 2147483647 Sur 3 jours= 2147483647 Sur 2 jours= 2147483647 Hier= 2147483647 Aujourd'hui= 5

 
Roger:

Essayez de substituer

VolatBuffer1[1]=D1_av;

à

VolatBuffer1[0]=D1_av;

et tous les autres tampons également.

J'ai trouvé un autre effet. Toutes les lignes verticales de la fenêtre de l'indicateur sont dessinées les unes au-dessus des autres.

La valeur la plus importante couvre toutes les autres. Il n'est pas essentiel pour le conseiller expert.

 
Vekker:

Bon après-midi.

Quelqu'un peut-il m'aider ?

J'ai écrit mon premier indicateur simple - il doit compter la volatilité moyenne pour les 2, 3, 4 et 5 derniers jours.

Vous pouvez simplifier considérablement les choses en utilisant ATR :

iATR(NULL, PERIOD_D1, Number_Of_Days, 1)
 
Roll:
Deux scripts :

La question n'est plus de savoir comment écrire le code, mais au niveau d'une idée - est-il possible d'éviter les boucles multiples,

ce qui fait peser une lourde charge sur le processeur. Par exemple, il y a eu une idée de suivre le nombre d'ordres STOP ouverts - s'il a diminué d'une unité, mais que l'ordre n'a pas été supprimé => ouvrir un ordre au marché =>.

son heure d'ouverture et son type doivent être placés dans un tableau. Quelque chose comme ça.

Toutes les idées sont les bienvenues.

Merci !

 
chief2000:

Vous pouvez simplifier considérablement les choses en utilisant ATR :



Merci ! Je vais essayer
Raison: