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

 
LOA:


Trois maxima pour la période, pas le plus récent. Ou plutôt, pas nécessairement le dernier.

Regardez : vous avez un tableau avec des valeurs. Vous devez trouver trois maxima dans ce tableau. Ils ne doivent pas nécessairement être les derniers ou les premiers dans le tableau de la série chronologique. Vous devez juste trouver les trois maxima.

1. Copions votre tableau dans un tableau temporaire (nous les chercherons dans le tableau temporaire) :

int ArrayCopy( object &dest [], object source[], int start_dest=0, int start_source=0, int count=WHOLE_ARRAY)

Copie un tableau dans un autre. Les tableaux doivent être du même type. Les tableaux de type double[], int[], datetime[], color[], et bool[], peuvent être copiés comme des tableaux du même type.
Renvoie le nombre d'éléments copiés.
Paramètres :
dest[] - Array-récepteur.
source[] - Réseau de sources.
début_dest - Index de départ pour le tableau de destination. Par défaut, l'indice de départ est 0.
start_source - Index de départ pour le tableau source. L'indice de départ par défaut est 0.
compter - Nombre d'éléments à copier. Par défaut, le tableau entier(WHOLE_ARRAY).


2. chercher la valeur maximale dans le tableau temporaire :

int ArrayMaximum( double array[], int count=WHOLE_ARRAY, int start=0)

Recherche l'élément ayant la valeur maximale. La fonction renvoie la position de l'élément maximal dans le tableau.
Paramètres :
tableau[] - Tableau numérique pour la recherche.
compter - Nombre d'éléments à rechercher.
commencer - Start - Démarrer l'index pour la recherche.


3. Sauvegarder l'indice trouvé dans un tableau (par exemple MassIndexMaxValue[])

4. Remettez à zéro la valeur du maximum trouvé dans le tableau de temps - écrivez simplement zéro à cet endroit.

5. Chercher à nouveau la prochaine valeur maximale dans le tableau temporaire (l'index du premier que nous avons trouvé est déjà stocké dans MassIndexMaxValue[] et la valeur de ce maximum est mise à zéro).

Cette boucle se poursuit jusqu'à ce que nous trouvions le nombre requis de valeurs maximales dans le tableau temporaire.

MassIndexMaxValue[] contiendra désormais les index du nombre requis de valeurs maximales dans votre tableau.
Remettons la taille du tableau temporaire à zéro - il n'y a aucune raison d'encombrer la mémoire

C'est comme ça que ça se passe...

ZS... J'ai juste fait un croquis rapide sur place... J'ai peut-être fait une erreur - j'étais réveillé lorsque j'ai écrit et je n'ai rien vérifié, mais la fonction a quelque chose comme ce contenu :

void FindMaxValue(double &ms[], int &ind[], int NumMaxValue) {   
   int i, IndMax;
   double tmp[];                       // создаём временный массив
   ArrayResize(ind,NumMaxValue);       // изменяем размер массива индексов максимальных значений под количество макс. значений
   ArrayResize(tmp,ArraySize(ms));     // размер временного массива = размеру вашего массива значений
   ArrayCopy(tmp, ms);                 // копируем ваш массив во временный
   for (i=0; i<NumMaxValue; i++) {     // цикл по количеству искомых максимумов
      IndMax=ArrayMaximum(tmp);        // ищем индекс максимального значения
      ind[i]=IndMax;                   // сохраняем индекс i-го максимального значения
      tmp[IndMax]=0;                   // обнуляем i-е найденное максимальное значение во временном массиве
      }
   ArrayResize(tmp,0);                 // обнуляем размер временного массива
   return;   
}

Quand on l'appelle :

FindMaxValue(Ваш_Массив_Значений, MassIndexMaxValue, 3);

... Le tableau précédemment défini int MassIndexMaxValue[] doit contenir les indices des trois valeurs maximales trouvées dans your_Array_Value[];

 

Je n'arrive pas à comprendre comment sont calculés le pourcentage de profit par transaction et le pourcentage de perte par transaction. Tu peux me le dire ?

http://www.assessor.ru/forum/index.php?t=822

 
artmedia70:

Regardez : vous avez un tableau avec des valeurs. Vous devez trouver trois maxima dans ce tableau. Ils ne doivent pas nécessairement être les derniers ou les premiers dans le tableau de la série chronologique. Vous devez juste trouver les trois maxima.


Artem, merci beaucoup !

Je suis heureux que mon idée de mettre à zéro la valeur maximale du tableau était correcte, et vous avez tout décrit en détail, avec la copie dans un autre tableau, maintenant je vais m'occuper des détails.

Et suivant le conseil de Vladimir, je vais commencer par l'algorithme du programme, je vais traiter vos informations et je suis sûr que tout va s'arranger - bons professeurs.

MERCI POUR L'ARTICLE https://www.mql5.com/ru/article s/1357

 

Bonjour !

Pouvez-vous me dire comment obtenir des signaux d'un indicateur personnalisé dans un Expert Advisor ?

J'ai utilisé iCustom, mais les hiboux ne reçoivent toujours pas le signal.

double Signal_I=iCustom(NULL,0,"FL",0,0);
 
skyjet:

Bonjour !

Pouvez-vous me dire comment obtenir des signaux d'un indicateur personnalisé dans un Expert Advisor ?

J'ai utilisé iCustom, mais les hiboux ne reçoivent toujours pas le signal.


Peut-être que le code de l'indicateur iCustom ne s'y prête pas... trop peu d'informations dans votre question pour une réponse.
 
skyjet:

Bonjour !

Pouvez-vous me dire comment obtenir des signaux d'un indicateur personnalisé dans un Expert Advisor ?

J'ai utilisé iCustom, mais les hiboux ne reçoivent toujours pas le signal.


En est-il de même pour les autres indicateurs ? Si oui, vous utilisez incorrectement la fonction iCustom(). Si non, essayez de vérifier le code de l'indicateur - il se peut que votre indicateur n'utilise pas de tampon d'indicateur du tout - il fonctionne avec la construction d'objets graphiques.
 

Bonjour, il y a une fonction :

bool Trade()
{
  if(!IsConnected())
  {
     Print("Связь отсутствует.");
     return(false);
  }

  if(!IsExpertEnabled())
  {
     Print("Торговля экспертами выключена.");
     return(false);
  }
  
  if(DayOfWeek()==0 || DayOfWeek()==6)
  {
     Print("В выходные не торгуем.");
     return(false);
  }
  
  if(!IsTradeAllowed())
  {
     Print("Торговля запрещена? WTF???.");
     return(false);
  }
  return(true);
}

Mais ça ne marche pas pour une raison quelconque. Il est appelé dans l'EA juste au début après int start() comme suit :

  if(!Trade())
  {
    Sleep(5000);
    return;
  }

Le conseiller expert est chargé avec succès dans les onglets Log et Experts, et rien d'autre n'apparaît. Bien que cela devrait dire, "Nous ne faisons pas de commerce le week-end." Parce que le 26.11.2011 est un samedi.

Où se trouve l'erreur et qu'est-ce que je fais de mal ?

 
Roman.:

Peut-être que le code de l'indicateur iCustom ne se prête pas à... Il y a trop peu d'informations dans votre question pour y répondre.
L'indicateur trace des lignes de support et de résistance, ce qu'il fait lors de la visualisation. L'indicateur lui-même donne un signal LT_1 == 1 ou -1 lorsqu'il est croisé.
if((Close[i] > BuyLevel) 
         {
    
          LT_1=1;
               
         }                                 
       if((Close[i] < CloseLevel)
         {
           
           LT_1=-1;
               
         }
 
ivan2k2:

Bonjour, il y a une fonction :

Mais ça ne marche pas pour une raison quelconque. Il est appelé dans l'EA juste au début après int start() comme suit :

Le conseiller expert est chargé avec succès dans les onglets Log et Experts, et rien d'autre n'apparaît. Bien que cela devrait dire, "Nous ne faisons pas de commerce le week-end." Parce que le 26.11.2011 est un samedi.

Où se trouve l'erreur et qu'est-ce que je fais de mal ?


Aujourd'hui, c'est samedi - un jour de congé. Vous démarrez Expert Advisor, l'initialisation se produit, mais comme il s'agit d'un jour sans et qu'il n'y a pas de tick, la fonction de démarrage n'est pas lancée (c'est-à-dire que Trade() n'est pas appelé.). Pour vérifier s'il fonctionne correctement, vous devez coller l'appel de cette fonction dans le bloc d'initialisation, ou le tester dans le testeur.
 
skyjet:
L'indicateur trace des lignes de support et de résistance, ce qu'il fait lors de la visualisation. L'indicateur lui-même donne un signal LT_1 == 1 ou -1 lorsqu'il est franchi.

Alors ne vous inquiétez pas - déplacez simplement le code de l'indicateur vers le Conseiller Expert comme il doit remplir les critères de trading et c'est tout - ensuite dans le tableau, selon ces conditions de trading transférées de l'indicateur, vous ouvrez des positions par le biais du Conseiller Expert et c'est tout ...
Raison: