Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 130

 
skyjet:

Merci ! Le côté à partir duquel on commence à compter, c'est-à-dire la troisième mesure, n'a-t-il pas d'importance ?

Pour votre exemple, cela ne fait pas vraiment de différence, mais vous devez de toute façon spécifier le début et la fin du tableau.

for (int x=3; x>1; x--)
{
 if(Open[x]==Open[x-1]) continue;
 if(Open[x]<Open[x-1])
   {
   //--- action
   }
}
Le début a de l'importance si le tableau est grand. Par exemple, si la condition est déclenchée en règle générale à la fin du tableau, il vaut mieux commencer par la fin. Cet exemple est typique de la recherche par ordre/position. Bien sûr, si vous effectuez d'abord la recherche dans ce cas, le programme arrivera de toute façon à ce point, mais cela prendra plus de ressources.
 
Danila_mactep:
Bonjour à tous ! Veuillez me conseiller sur ce sujet... Je veux décaler le niveau de la MA dans l'onglet des niveaux. Si je veux la décaler à 798, c'est trop compliqué à calculer pour de nombreuses paires. Comment écrire un indicateur qui dessine le prix de la moyenne mobile décalée ou l'affiche dans la fenêtre de données et je ne dois pas le calculer manuellement ?
Vous pouvez créer un indicateur avec un décalage MA dans ses données d'entrée. Et l'indicateur calculera le niveau de prix et affichera immédiatement ses objets sur le graphique.
 
chief2000:
Un tel problème - il existe un tableau unidimensionnel dont la taille peut varier.
Comment parcourir en boucle toutes les combinaisons possibles des éléments d'un tableau les uns avec les autres ?
L'ordre des éléments n'a pas d'importance, c'est-à-dire 123==213==321...

Voici un exemple pour un tableau de 4 éléments :


C'est une bonne tâche pour votre cerveau. Vous pouvez essayer comme ceci :
int start(){
 double array[4];
 int k,N[];
 k=ArraySize(array);
 ArrayResize(N,k);
 for (int i=0;i<k;i++)N[i]=-i-1;// Заполнили массив элементов массива отрицательными
//
 int j=0;
 while(N[k-1]<k){
  if(N[j]<k-1){
   N[j]++;
   bool NewComb=false;
   for(i=0;i<k-1;i++){
    if(N[i]>N[i+1]){NewComb=true;}else{NewComb=false;break;}
   }
//
   if(NewComb){
// Получили новую комбинацию в массиве N размерностью k    
    string temp="";
    for(i=0;i<k;i++){// Перебираем массив N. Если N[i] то элемент array[N[i]] не участвует в выборке.
                     // Например, для размерности 4 если N[0]=3,N[1]=1,N[2}<0,N[3]<0 то это выборка array[3] и array[1]
                     //                             если N[0]=3,N[1]=2,N[2]=1,N[3]=0 то это выборка array[3] и array[2] array[1] и array[0]
     if(N[i]<0)temp=StringConcatenate(temp,"X");else temp=StringConcatenate(temp,N[i]);
    }
   Print("NEWCOMB ",temp);// это для проверки какие комбинации выбираются
   }
//
  }
  else{
   N[j]=0;i=1;
   while(i<k){
    if(N[i]<k-1) {if(N[i]>=0)N[i]++;else N[i]=0;j=0;break;}
    else {N[i]=0;i++;}
   }
  }
  if(N[k-1]>=k-1) break;
 }
 return;
}

Résultat du test pour la dimension 4. Si l'élément X du tableau n'est pas sélectionné, sinon utiliser tableau[chiffre] et fragment pour la dimension 6 :

 
artmedia70:
Réalisez un indicateur dont les données d'entrée spécifieront le décalage MA. Et l'indicateur calculera le niveau de prix et affichera immédiatement ses objets sur le graphique.


Je ne sais pas comment faire et, franchement, je n'en ai aucune idée - quand j'ouvre le code МА МА, il y a tellement de choses que je ne vois pas où se trouve le paramètre de niveau, donc je ne peux pas copier et coller des niveaux.
 
Danila_mactep:

Je ne sais pas comment faire et, pour être honnête, je n'ai aucune idée de comment le faire - j'ouvre le code MA, il y a tellement de choses que je ne vois pas où se trouve le paramètre de niveau, pour pouvoir y copier et coller des niveaux. Quelle partie du code MA dois-je copier et où dois-je coller des niveaux ?
Vous devez commencer à écrire votre propre indicateur et ils vous diront quoi faire.
 
artmedia70:
Non, vous devez commencer à écrire votre propre indicateur, et ensuite ils vous diront ce que vous devez faire.

J'ai créé un nouvel indicateur, jusqu'à présent il ressemble à ceci :

#property copyright "Copyright 2013, MetaQuotes Software Corp.
#lien de propriété "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
//--- tampons
double ExtMapBuffer1[] ;
//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'indicateur personnalisé |
//+------------------------------------------------------------------+
int init()
{
//---- indicateurs
SetIndexStyle(0,DRAW_LINE) ;
SetIndexBuffer(0,ExtMapBuffer1) ;
retour(0) ;
}
//+------------------------------------------------------------------+
//| Fonction personnalisée de désinitialisation de l'indicateur |
//+------------------------------------------------------------------+
int deinit()
{
//----
#include "Moyennes mobiles.mq4"
//----
retour(0) ;
}
//+------------------------------------------------------------------+
//| Fonction d'itération de l'indicateur personnalisé |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted() ;
//----

//----
retour(0) ;
}
//+------------------------------------------------------------------+

 
 
L'indicateur MA a des niveaux. La question est la suivante : comment pouvons-nous obtenir des données à partir de ces niveaux, si le prix a atteint le niveau 100 ou -100 (ouvrir une transaction d'achat/vente).
 
alexey1979621:
Il existe des niveaux dans l'indicateur MA. La question est la suivante : comment pouvons-nous obtenir des données à partir de ces niveaux, disons que le prix a atteint le niveau 100 ou -100 (ouvrir une transaction d'achat/vente).

La MA elle-même sur la barre zéro (actuelle) est :

double priceMA0=iMA(Symbol(), Period(), MA_Period, MA_Shift, MA_ Method, PRICE_OPEN, 0);

Pour calculer la MA, nous prenons le prix de l'Open pour nous débarrasser du "chatter" sur la barre actuelle.

Alors le prix du niveau +100 sera :

double priceP100=priceMA0+100*Point;

Le niveau de prix de -100 sera :

double priceM100=priceMA0-100*Point;
 
artmedia70:

La MA elle-même sur la barre zéro (actuelle) est :

Pour calculer la MA, nous prenons le prix de l'Open afin de nous débarrasser du "chatter" sur la barre actuelle.

Alors le prix du niveau +100 sera :

Le prix de niveau de -100 serait :


Merci, vous m'avez aidé plus d'une fois. Je suis sûr que je vais bientôt me familiariser avec la programmation. .....
Raison: