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

 
Fox_RM:

J'ai essayé d'y ouvrir des ordres sur une nouvelle barre en utilisant la fonction NewBar(). Si elle est utilisée à cette fin ?

Par exemple if (NewBar())i++ ; Quelque chose comme ceci.

Je n'avais pas remarqué NewBar, désolé.

Ensuite, changez ce qui suit : Vous n'avez pas besoin de calculer l'indicateur complet à chaque tick, si vous n'ouvrez des transactions que sur une nouvelle barre.

Donc, déplacez tout le calcul de l'indicateur avant de vérifier les conditions d'ouverture d'une transaction et ne comptez pas autant de barres que nécessaire (20 si je ne me trompe pas).


La stratégie est donc la suivante :

1) nouveau bar ? non - marche

2) oui - calculer tout ce dont nous avons besoin (MA, indicateur, tout le reste pour les conditions)

3) Vérifier les conditions - non - marche

4) Oui - ouvert au prix actuel (Ask ou Bid, respectivement)

 
ilunga:

NewBar n'a pas remarqué, je m'excuse.

Ensuite, changez ce qui suit : Vous n'avez pas besoin de compter l'ensemble de l'indicateur à chaque tick si vous n'ouvrez des transactions que sur une nouvelle barre.

Donc, déplacez tout le calcul de l'indicateur avant de vérifier les conditions d'ouverture du trade et ne comptez pas autant de barres, mais autant que nécessaire (20 si je ne me trompe pas).

C'est exact 20. Je comprends à peu près comment faire. Veuillez m'expliquer la différence entre mon calcul et le calcul de 20 barres pour les Expert Advisors.

Je veux juste comprendre l'essence de l'erreur.

 
Fox_RM:
Bonne journée à tous !
J'ai décidé de réécrire le code de mon indicateur pour un Conseiller Expert afin de suivre
J'ai décidé de modifier le code de mon indicateur pour tracer le traitement de ses signaux.
Je n'ai pas d'erreur lors de la compilation et il fonctionne sans erreur dans le testeur de stratégie.

Je ne sais pas comment l'utiliser.

Z.U. Je suis sûr qu'il y a beaucoup d'erreurs stupides, s'il vous plaît tirez à blanc.

Il est plus facile de réécrire le code tel qu'on le voit que de chercher à savoir "ce que vous tournez autour", par exemple :

  ArrayResize(MA1,Bars);ArrayResize(MA2,Bars);

Je n'ai pas rencontré comment la fonction utilisée dans les indicateurs de l'EA va fonctionner :

  int counted_bars=IndicatorCounted();  

Mais, si "peu importe", la boucle que vous organisez :

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

Où limite = Bars - counted_bars, au 2ème tick prendra une valeur égale à 0, puis par code on lui attribuera une valeur... OPA - et c'est un NOUVEAU MONDE dans la programmation :

  if(limit>0) limit=0;

...essayez d'écrire cette condition comme ceci, si ça ne casse pas toute la stratégie :

  if(limit<=0) limit=1;
 
Fox_RM:

C'est-à-dire utiliser cette condition pour recalculer les barres ?

Mais dans mon indicateur, à chaque tick, les tableaux TP_UP et TP_DN sont calculés.Ils doivent donc être calculés en premier.


Là encore, le prix d'ouverture de OP_BUY==Ask, OP_SELL==Bid.

Et vous avez Close[i].

 
Fox_RM:

C'est exact 20. Je comprends à peu près comment faire. Veuillez expliquer la différence entre mon calcul et le calcul de 20 barres pour Expert Advisor UNIQUEMENT.

Je veux juste comprendre l'essence de l'erreur.

Il n'y a pas d'erreur en tant que telle dans le calcul de l'indicateur complet. Pensez juste à ce qui est plus rapide :

1) pour compter les barres (environ 10000) à chaque tick

2) compter 20 mesures 1 fois par minute (ou même plus)

 
Fox_RM:
Bonne journée à tous !
J'ai décidé de réécrire le code de mon indicateur pour un Conseiller Expert afin de suivre
J'ai décidé de modifier le code de mon indicateur pour suivre le fonctionnement de ses signaux.
Je n'ai pas d'erreur lors de la compilation et il fonctionne sans erreur dans le testeur de stratégie.

Je ne sais pas comment l'utiliser.

Z.I. Je suis sûr qu'il y a beaucoup d'erreurs et de bêtises, s'il vous plaît tirez à blanc.

PAS PRINCIPAL, mais pour simplifier le code, cette construction :

  ArrayResize(TP_UP,20);ArrayResize(TP_DN,20); 
  ArrayResize(TP_UPMin,20);ArrayResize(TP_DNPl,20);

Aurait dû être remplacé par une simple déclaration de tableau avec une dimension :

double delta,price,old_price,col_bar,sum_tick,sum_pip,TP_UP[20],TP_DN[20],TP_UPMin[20],TP_DNPl[20];
 
Fox_RM:

C'est exact 20. Je comprends à peu près comment faire. Veuillez expliquer la différence entre mon calcul et le calcul de 20 barres pour Expert Advisor UNIQUEMENT.

Je veux juste comprendre l'essence de l'erreur.

Ce sont des principes de programmation PRINCIPAUX {FUNDAMENTAUX - ne faites pas de choses qui n'ont pas de sens ! :)))
 
Fox_RM:
Et une autre question relative au fonctionnement de la bibliothèque.
J'ai créé le fichier de la bibliothèque, je l'ai compilé, tout s'est passé sans erreur.
J'ai importé la fonction dans le code de l'indicateur, je l'ai compilé, tout est OK aussi.
Quand je lance l'indicateur, la fonction à importer n'est pas exécutée, quand j'utilise

code indicateur, tout fonctionne. Voici le code de la bibliothèque.

Il s'agit d'un appel dans le code de l'indicateur :

//+------------------------------------------------------------------+
//|                                                         lib1.mq4 |
//|                                         Copyright © 2012, Fox.RM |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, Fox.RM"
#property link      "http://www.metaquotes.net"
#property library
//+------------------------------------------------------------------+
//| My function                                                      |
//+------------------------------------------------------------------+
double Sredn(double & ArrSr[])
{
double a=1,c,step=1/20;
for (int i=0;i<=20;i++)
{if (ArrSr[i]==0){a*=1;}else{a*=MathAbs(ArrSr[i]);}}
c=MathPow(a, step);
  return(c);
}
//+------------------------------------------------------------------+
 
Zhunko:

Vadim, tu as mis un si petit (&) qu'on ne le voit pas tout de suite ... ! :)))

Je me demande comment l'auteur (dans la version de l'auteur) a pu réaliser cette fonction à un endroit et pas à un autre ! ;)

 
Fox_RM:

C'est exact 20. Je comprends à peu près comment faire. Veuillez expliquer la différence entre mon calcul et le calcul de 20 barres pour Expert Advisor UNIQUEMENT.

Je veux juste comprendre l'essence de l'erreur.

Au fait, j'ai remarqué que vous déclarez des tableaux de travail de taille 20 :

  ArrayResize(TP_UP,20);ArrayResize(TP_DN,20); 
  ArrayResize(TP_UPMin,20);ArrayResize(TP_DNPl,20);

Et votre bibliothèque calcule 21 éléments :

for (int i=0;i<=20;i++)

Je peux supposer que la boucle doit commencer à partir de 1 :

for (int i=1;i<=20;i++)
Raison: