Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 696

 
Northwest:

1. Remettez tout en place, ne torturez pas l'ordinateur .

Je suis désolé, mais vous ne pouvez pas faire ça, l'indicateur doit compter de gauche à droite.

Je ne l'embête pas, je l'utilise pour son usage prévu.

2.iBandsOnArray, iStdDevOnArray calculés en utilisant les données stockées dans le tableau.

Oui, ils sont calculés en utilisant les données du tableau bbMacd[], alors quelle est la suite ?

Letableau est rempli en une seule boucle.

Dans l'un ou l'autre ou dans le premier ?

Êtes-vous en train de dire que pour remplir un tableau, vous avez besoin d'une boucle personnelle, dans laquelle ce tableau est rempli.

est rempli et aucune autre opération ne peut être effectuée ?


Il est important pour moi de découvrir pourquoi l'indicateur ralentit et comment calculer les endroits où cela se produit.

J'ai d'autres questions mais pas de réponses.

Malheureusement, vous n'avez offert aucun indice.

Si quelque chose est construit en utilisant un tableau, il devrait être construit en utilisant un tableau déjà existant. Il s'agit d'un cycle de préparation du tableau et du deuxième cycle de dessin d'un indicateur par ce tableau. Il s'agit d'un cas général. Il existe des cas plus spécifiques, mais ils doivent être considérés séparément. Par exemple, nous pouvons créer des fonctions qui renvoient les valeurs d'une seule barre calculée :

//+------------------------------------------------------------------+
//| BandsOnArray                                                     |
//+------------------------------------------------------------------+
double BandsOnArray(const int rates_total,const int index,const int period,const double deviation_bb,const double &array[],const int line,const bool as_series=true)
  {
//--- check position
   bool check_index=(as_series ? index<=rates_total-period-1 : index>=period-1);
   if(period<1 || !check_index)
      return 0;
   //--- calculate StdDev
   double dev=StdDevOnArray(rates_total,index,period,array);
   //--- base line
   double mid=0;              
   for(int i=0; i<period; i++)
      mid+=array[index+i];    
   mid/=period;               
   //--- upper line
   double top=mid+dev*deviation_bb;
   //--- lower line
   double btm=mid-dev*deviation_bb;
   return(line==UPPER_BAND ? top : line==LOWER_BAND ? btm : mid);
  }  
//+------------------------------------------------------------------+
//| StdDevOnArray                                                    |
//+------------------------------------------------------------------+
double StdDevOnArray(const int rates_total,const int index,const int period,const double &array[],const bool as_series=true)
  {
//--- check position
   bool check_index=(as_series ? index<=rates_total-period-1 : index>=period-1);
   if(period<1 || !check_index)
      return 0;
//--- calculate value
   double avg=0;              
   for(int i=0; i<period; i++)
      avg+=array[index+i];    
   avg/=period;               
   double sd=0;
   for(int i=0; i<period; i++)
      sd+=(avg-array[index+i])*(avg-array[index+i]);
   return(sqrt(sd/period));
  }  
//+------------------------------------------------------------------+

Mais ils nécessitent également un tableau de données déjà préparé comme entrée, car StdDevOnArray et BandsOnArray utilisent un lissage simple pour lequel les données remplies égales à la valeur du lissage de période sont nécessaires.

 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Toutes questions pour les débutants sur MQL4, aide et discussion sur les algorithmes et les codes

Artyom Trishkin, 2018.11.18 20:21

PlotIndexSetInteger(0,PLOT_ARROW,140) ;

Mais vous devez créer un nombre de tampons égal au nombre de semaines. Et pour chaque tampon, il faut donner un code fléché de 140 à 149 - 1,2,3,4,5,6,7,8,9,10 - dix semaines suffisent-elles pour une année ? C'est seulement 70 jours. Ou comment tu le voulais ?


Est-il possible de remplacer SetIndexArrow par un cas ?

Ou au moins afficher les chiffres sur un histogramme ?


Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Toutes les questions des débutants de MQL4, aide et discussion sur les algorithmes et les codes

Artyom Trishkin, 2018.11.18 20:02

Le tampon est rempli avec la valeur d'une heure. Et si l'heure est zéro, l'histogramme ne sera pas dessiné. Ainsi, nous devons vérifier si l'heure est égale à zéro (nous l'avons configuré pour rechercher l'heure zéro dans les paramètres), et si elle est égale à zéro, nous devons entrer 0.1 au lieu de la valeur de l'heure (zéro) dans le tampon - pour afficher la colonne de l'histogramme. La fenêtre de données affichera une valeur de 0 au lieu de 0,1, car l'indicateur Digits est réglé sur zéro.


Je le vois maintenant, merci.

 
psyman:

SetIndexArrow peut-il être écrasé par un cas ?

Ou au moins afficher les chiffres sur un graphique à barres ?



Je le vois maintenant, merci.

Il agit sur l'ensemble du tampon en une seule fois.

Vous devez placer une icône représentant un numéro de semaine sur la barre trouvée, et il devrait y avoir le nombre de semaines dans une année. Les flèches numériques sont clairement absentes en Wingdings.

Il est possible de tourner avec des textes-objets et de marquer les barres avec la valeur du numéro de semaine, mais de mettre l'icône du tampon à 32 - un caractère vide. La valeur sera sur la barre, mais ne sera pas affichée. Alors la valeur peut être le numéro de la semaine dans l'année, et dans l'objet écrire ce que vous voulez et l'objet sera affiché sur la barre trouvée.

 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Toute question pour les débutants sur MQL4, aide et discussion sur les algorithmes et les codes

Artyom Trishkin, 2018.11.19 10:50 am

Il agit sur l'ensemble du tampon en une seule fois.

Vous devez mettre une icône de numéro de semaine sur la barre trouvée, et il devrait y avoir le nombre de semaines dans une année. Les flèches numériques sont clairement absentes en Wingdings.

Vous pouvez tourner autour avec des textes-objets, et marquer les barres avec les valeurs du numéro de la semaine, mais l'icône pour le tampon pour mettre 32 - un caractère vide. La valeur sera sur la barre, mais ne sera pas affichée. Alors la valeur peut être le numéro de la semaine dans l'année, et dans l'objet écrire ce que vous voulez et l'objet sera affiché sur la barre trouvée.


J'ai parlé du jour de la semaine - Lun, Mar, Mer - et non du numéro. Vous n'avez besoin que de 5 marques différentes sur le tableau.

 
psyman:

J'ai écrit sur le jour de la semaine - Lun, Mardi, Mercredi, pas sur le numéro. Vous n'avez besoin que de cinq marques différentes sur le tableau.

Il faut donc cinq tampons, et attribuer un numéro de flèche différent à chacun d'eux - de 140 à 144.

 
Artyom Trishkin:

Si quelque chose est construit en utilisant un tableau, il devrait être construit en utilisant un tableau déjà préparé. Et ceci est un cycle de préparation du tableau et le second cycle de dessin de l'indicateur par ce tableau. Il s'agit d'un cas général. Il existe des cas plus spécifiques, mais ils doivent être considérés séparément. Par exemple, nous pouvons créer des fonctions qui renvoient les valeurs d'une seule barre calculée :

Mais ils nécessitent également un tableau de données déjà préparé comme entrée, car StdDevOnArray et BandsOnArray utilisent un lissage simple pour lequel les données remplies égales à la valeur du lissage de période sont nécessaires.

Merci d'avoir clarifié la situation.
 

Bonjour

Comment créer une fenêtre pop-up avec des boutons pour confirmer/annuler manuellement une transaction ?

 
Andrey Sokolov:

Bonjour

Comment créer une fenêtre pop-up avec des boutons pour confirmer/annuler manuellement une transaction ?

MessageBox()
 
Artyom Trishkin:
MessageBox()

Merci

 

Bonjour à tous.

Comment puis-je obtenir le pourcentage du drawdown maximum comme dans le testeur ?

Voici le code :

double  MaxPeak,DD, MaxDD, DD2, MaxDD2;
--------------------------------------
--------------------------------------
это вывод:

 SM("Maximal drawdown        : " + DoubleToString(MaxDrawdown_Money(), 2)+ " (" + DoubleToString(MaxDrawdown_Protsent(), 2) +" %)");

-------------------------------------
-------------------------------------

//--------------------Рассчет % относительной просадки----------
double MaxDrawdown_Protsent()
{
if (AccountEquity() > MaxPeak)
{
MaxPeak = AccountEquity();
}
if (AccountEquity() < MaxPeak)
{
DD2 = NormalizeDouble((MaxPeak - AccountEquity())/MaxPeak*100,2);
}
if (MaxDD2< DD2)
{
MaxDD2 = DD2;
}
return (MaxDD2);
}
//---------------------Рассчет суммы максимальной просадки--------
double MaxDrawdown_Money()
{
if (AccountEquity() > MaxPeak)
{
MaxPeak = AccountEquity();
}
if (AccountEquity() < MaxPeak)
{
DD = NormalizeDouble(MaxPeak - AccountEquity(),2);
}
if (MaxDD< DD)
{
MaxDD = DD;
}
return (MaxDD);
}

Le montant du drawdown maximum est le même que dans le testeur, le pourcentage du drawdown relatif est également le même que dans le testeur.

Comment puis-je obtenir le pourcentage du drawdown maximum comme dans le testeur ?