Je n'ai jamais étudié la programmation, mais je veux écrire un EA - page 8

 

Alors quoi de neuf, amis programmeurs ?
je suis l'auteur de ce fil et je continue à demander des conseils.


Ainsi, dans l'en-tête, la structure déclarée

et voici la partie intéressante : qu'est-ce que c'est ?
J'ai défini une condition dans OnTick qui, s'il n'y a pas d'ordres ouverts, est la suivante
alors :
si un swing rapide est supérieur à un swing lent,
puis : ouvrir une commande.



question. pourquoi un ordre s'ouvre-t-il à chaque tick ?

 
Sergey Lobzankin:

Alors quoi de neuf, chers programmateurs ?
Je suis l'auteur de ce fil et je continue à demander des conseils.


J'ai donc déclaré la structure dans l'en-tête

et voici ce qui est intéressant, qu'est-ce que c'est ?
J'ai défini une condition dans OnTick qui, s'il n'y a pas d'ordres ouverts, est la suivante
alors :
si un swing rapide est supérieur à un swing lent,
ensuite : ouvrir une commande



Question : Pourquoi un ordre s'ouvre-t-il à chaque tick ?

Cela signifie qu'à chaque tic, la condition est remplie.

Si la condition doit être un croisement de MA, alors sur la première barre il était < moins et sur la barre zéro il est devenu > plus. Mais dans votre condition sur la barre zéro > plus et sur la première barre > plus.

 

https://code.org/

https://scratch.mit.edu/

Si vous voulez apprendre à programmer (il s'agit en fait d'un style de pensée, pas d'un langage) en MQL, c'est un véritable casse-tête pour vous et votre entourage.

Cliquez sur les liens - tout est simple, de niveau scolaire (voire élémentaire à certains endroits), mais il s'agit au moins d'une introduction aux algorithmes et à leur écriture. Sinon, chaque fois que vous éternuerez, vous contacterez le forum et attendrez une réponse, et c'est une perte de temps, et le temps, c'est de l'argent.

PS/ et je conseille à tout le monde de le lire, scratch est un chef d'œuvre de l'intérieur - l'ancêtre de la programmation moderne.

Code.org: Любой может научиться
Code.org: Любой может научиться
  • code.org
Каждый студент в каждой школе заслуживает возможность изучения компьютерных наук.
 
Sergey Lobzankin:

Alors quoi de neuf, chers programmateurs ?
Je suis l'auteur du sujet et je continue à demander des conseils.


Ainsi, dans l'en-tête, on annonce la structure

et voici ce qui est intéressant, qu'est-ce que c'est ?
J'ai défini une condition dans OnTick qui, s'il n'y a pas d'ordres ouverts, doit être remplie.
alors :
si un swing rapide est supérieur à un swing lent,
ensuite : ouvrir une commande.



question. pourquoi un ordre s'ouvre-t-il à chaque tick ?

Alors, camarade auteur du sujet ?

Je vous ai conseillé il y a un mois, mais vous ne faites même pas attention :

Il s'agit du forum pour le trading, les systèmes de trading automatisés et le test des stratégies de trading.

Je n'ai jamais étudié la programmation, mais je veux écrire un conseiller expert.

Alexey Volchanskiy, 2018.04.10 17:47

Il y a un bouton "Code", à gauche du bouton avec les lettres Aa. Si vous ne savez pas comment l'utiliser, vous pouvez l'utiliser par exemple pour afficher votre propre code ).


Il s'agit d'un forum pour le trading, les systèmes de trading automatisés et les tests de stratégies.

Je n'ai jamais étudié la programmation, mais je veux écrire un conseiller expert.

Konstantin Nikitin, 2018.04.10 21:18

Eh bien, vous n'avez rien de super naturel là. Donc la meilleure option. Publiez-le ici, mais uniquement par le biais de

Quelqu'un va suggérer quelque chose d'utile.


Et vous collez toujours du code avec une image.

 
Bonjour, je suis confronté au problème suivant. L'EA a besoin des données de la moyenne mobile sur le zéro et la première barre pour analyser la situation et pour d'autres calculs.
La fonction OnCalculate a été inventée à la base pour écrire un indicateur. J'ai séparé cette fonction dans mon EA, mais je n'arrive pas à trouver comment y accéder depuis OnTick.
 
Sergey Lobzankin:
Bonjour, j'ai rencontré un tel problème. Le conseiller expert a besoin des données de la moyenne mobile sur le zéro et la première barre pour analyser la situation et pour d'autres calculs.
La fonction OnCalculate a été inventée à la base pour écrire un indicateur. Dans mon EA, j'ai fait en sorte que cette fonction soit séparée, mais je n'ai pas d'idée sur la façon d'y accéder à partir de OnTick.

Vous n'avez même pas besoin d'essayer de faire passer OnCalculate d'un indicateur à un EA ! Il vous suffit d'appliquer à l'indicateur dans l'EA (en utilisant le handle de l'indicateur) et d'obtenir les données.

Exemple de travail avec iMA et iStdDev dans le codeiMA iStdDev- code extrait de OnTick, récupérant les données des indicateurs iMA

   double ma_fast[],ma_normal[],stddev[];
   MqlRates rates[];
   ArraySetAsSeries(ma_fast,true);
   ArraySetAsSeries(ma_normal,true);
   ArraySetAsSeries(stddev,true);
   ArraySetAsSeries(rates,true);
   int buffer=0,start_pos=0,count=3;
   if(!iGetArray(handle_iMA_Fast,buffer,start_pos,count,ma_fast) || 
      !iGetArray(handle_iMA_Normal,buffer,start_pos,count,ma_normal) || 
      !iGetArray(handle_iStdDev,buffer,start_pos,count,stddev) || 
      CopyRates(m_symbol.Name(),Period(),start_pos,count,rates)!=count)
     {
      PrevBars=0;
      return;
     }
//---
   if(ma_fast[0]>ma_normal[0])
      if(rates[1].close>rates[1].open)
         if(rates[1].close>ma_normal[0])
            if(stddev[0]>stddev[1])
               m_need_open_buy=true;
   if(ma_fast[0]<ma_normal[0])
      if(rates[1].close<rates[1].open)
         if(rates[1].close<ma_normal[0])
            if(stddev[0]>stddev[1])
               m_need_open_sell=true;
 
Vladimir Karputov:

Vous n'avez même pas besoin d'essayer de faire passer OnCalculate de l'indicateur à l'EA ! Il suffit d'appliquer à l'indicateur dans le conseiller expert (en utilisant la poignée de l'indicateur) et d'obtenir les données.

Exemple de travail avec iMA et iStdDev dans le codeiMA iStdDev- code extrait de OnTick, récupérant les données des indicateurs iMA

Je pense que vous avez raison. ))))
je vais maintenant essayer de jouer avec les tableaux via ...Array...

 

Et voici l'autre chose...
J'ai les poignées dans le chapeau de l'expert.

extern int    zazor      = 0;
extern double Lots       = 0.1;
extern int    TrailingStop = 15;
extern int    TrailingStep = 2;
extern int    Magic      = 123;
extern int    Slippage   = 5;
int Digits;

int timeprev=0;

int    ticket;
double price,TP,SL,lastlot;
string;

int ima1_handle          = iMA (Symbol(),0,14,0,MODE_EMA,PRICE_CLOSE);               //хендл
int ima2_handle          = iMA (Symbol(),0,64,0,MODE_EMA,PRICE_CLOSE);               //хендл
int Stoch_handle         = iStochastic (Symbol(),0,20,15,15,MODE_EMA,STO_CLOSECLOSE);//хендл
int ATR_handle           = iATR        (Symbol(),0,21);                              //хендл
double ima1_massiv [2];                                                              //статический массив для быстрой машки 

et sur les forums, qui le fait... Chacun le fait différemment ? Certains en oninit, d'autres en ontik,
Dans ma mise en page, je copie des données dans un tableau et je récupère le nombre d'éléments à copier.

void OnTick()
  { 
    int ima_count1 = CopyBuffer(ima1_handle,0,1,2,ima1_massiv);    //скопировал данные из 2х буферов быстрой машки
    string str_ima1 = IntegerToString(ima_count1);                 //отладочная
    printf("мой первый хендл = "  + str_ima1);                     //отладочная
   }
P.S., à propos, le testeur a vu tous les indicateurs dont les poignées se trouvent dans l'en-tête du conseiller expert et a tout dessiné sur le graphique du visualiseur.
 

voici un article qui explique clairement comment mettre en œuvre l'accès aux données de l'indicateur
https://www.mql5.com/ru/articles/43

Mais les gars, les données sont copiées dans un tableau, sans doute, mais j'ai besoin d'obtenir des chiffres spécifiques, c'est-à-dire, si la vague sur le dernier tick de la barre actuelle est 1.32456, alors j'ai besoin d'obtenir ce chiffre dans le log (pour être sûr que le chiffre est réellement obtenu), j'ai besoin de sortir cette information spécifique dans le type double,

pour calculer le nombre de points de type int entre deux masques différents. comment obtenir cette valeur ?


Способы вызова индикаторов в MQL5
Способы вызова индикаторов в MQL5
  • www.mql5.com
В MQL5 существует несколько вариантов вызова индикаторов, и осуществляются они в основном при помощи функций IndicatorCreate() и iCustom(). Причем эти функции лишь возвращают хендл индикатора, и дальнейшая работа с индикаторами ведется именно через него. Так что же такое хендл? Как работать с функциями IndicatorCreate() и iCustom()? И как...
 
Sergey Lobzankin:

Voici un article qui explique clairement comment mettre en œuvre l'accès aux données de l'indicateur.
https://www.mql5.com/ru/articles/43

Mais les gars, les données sont copiées dans un tableau, sans doute, mais j'ai besoin d'obtenir des nombres spécifiques, c'est-à-dire que si la vague sur le dernier tick de la barre actuelle est 1,32456, j'ai besoin d'obtenir ce nombre dans le log (pour être sûr que le nombre est réellement obtenu), j'ai besoin de sortir cette information spécifique dans le type double,

pour calculer le nombre de points int entre deux mash-ups différents. comment obtenir cette valeur ?


Est-ce que vous regardez et lisez ce qu'on vous dit ? Je vous ai donné un exemple dans le post. Il s'agit juste d'obtenir des données de deux AMI:

   double ma_fast[],ma_normal[],stddev[];
   MqlRates rates[];
   ArraySetAsSeries(ma_fast,true);
   ArraySetAsSeries(ma_normal,true);
   ArraySetAsSeries(stddev,true);
   ArraySetAsSeries(rates,true);
   int buffer=0,start_pos=0,count=3;
   if(!iGetArray(handle_iMA_Fast,buffer,start_pos,count,ma_fast) || 
      !iGetArray(handle_iMA_Normal,buffer,start_pos,count,ma_normal) || 
      !iGetArray(handle_iStdDev,buffer,start_pos,count,stddev) || 
      CopyRates(m_symbol.Name(),Period(),start_pos,count,rates)!=count)
     {
      PrevBars=0;
      return;
     }
//---
   if(ma_fast[0]>ma_normal[0])
      if(rates[1].close>rates[1].open)
         if(rates[1].close>ma_normal[0])
            if(stddev[0]>stddev[1])
               m_need_open_buy=true;
   if(ma_fast[0]<ma_normal[0])
      if(rates[1].close<rates[1].open)
         if(rates[1].close<ma_normal[0])
            if(stddev[0]>stddev[1])
               m_need_open_sell=true;

Il existe deux indicateurs iMA - "Rapide" et "Normal". Les données de ces deux indicateurs sont obtenues dans les tableauxma_fast etma_normal respectivement. Nous demandons lecompte de#start_pos de la barre.

Et ensuite nous accédons aux données obtenues (dans cet exemple nous accédons aux données de la barre #0)