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

 
int start()
  {
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(Period() > 240)  return(-1);

int LastPrevDay = iBars(Symbol(), PERIOD_D1);
int barnH= iBars(Symbol(),PERIOD_H1);

for (int i = LastPrevDay-1; i >= 0; i--)
{
datetime NowDay = iTime(Symbol(), PERIOD_D1, i);
int PrevDay = iBarShift(Symbol(), PERIOD_D1, NowDay);
datetime x_time= StrToTime(TimeToStr(NowDay, TIME_DATE)+" "+shift_time); 
int x_shift= iBarShift(Symbol(),PERIOD_H1,x_time);
double CL= iClose(Symbol(),PERIOD_H1,x_shift);

int LastDay = iBarShift(Symbol(), PERIOD_D1,iTime(Symbol(), PERIOD_D1, i))-1;
if(LastDay>0)   // тут я запутался 
buffer[i]= CL;
}
return(0);

Aidez-moi à résoudre ce problème. Je veux que la ligne soit correcte. Mais le tampon ne donne qu'une ligne, elle devrait être plate en milieu de journée, comme les lignes de pivot..... J'ai une ligne qui part du niveau de l'heure X du jour précédent.

VEUILLEZ COMPRENDRE.... Je ne peux pas le faire.

 
nlp2311:

Aidez-moi à résoudre ce problème. Je veux que la ligne soit correcte. Mais le tampon ne donne qu'une ligne, elle devrait être plate au milieu de la journée, comme la ligne de pivot..... J'ai une ligne qui part du niveau de l'heure X du jour précédent.

S'IL VOUS PLAÎT, TROUVEZ LA SOLUTION.... je n'arrive pas à le comprendre(((

Supposons que vous ayez besoin de prendre une décision à 5 heures sur n'importe quel intervalle de temps, bien sûr pas sur le quotidien, mais sur un intervalle plus petit. Disons à partir d'une heure ou moins.

Et le dessiner à 5 heures le jour suivant. Voici comment procéder.

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
#property indicator_width1 2
//==============================
extern int    hour = 5;
extern int    hrma = 4;
//==============================
double fx[];
double mai;
int p,hr,hrp;
//************************************************************
int init()  
{   
   SetIndexBuffer(0,fx);
   
   p=hrma*60/Period(); // пересчет периода мувинга на любой таймфрейм
   
   return(0);
}
//************************************************************
int start()
{
   int cbi=Bars-IndicatorCounted()-1; if (cbi<0) return(-1);
   if (cbi==1) cbi--;
   if (cbi>1) cbi=Bars-p-1;
   //-------------------------------
   for(int i=cbi; i>=0; i--)
   {
      hrp=TimeHour(Time[i+1]); 
      hr=TimeHour(Time[i]);
      
      if (hr==hour && hrp!=hr) mai=iMA(NULL,0,p,0,0,0,i); // сам простой мувинг, в момент, когда час равен нашему и не неравен на предыдущем баре
      
      fx[i]=mai; // просто приравнивание индикаторного буффера к глобальной переменной 
   }
  
   return(0);
}
//***************************************************************
 

Oui, je l'ai fait, même réponse... avec quoi ?

ti=Time[i]; // время текущего бара
      
      tiip=tii; // предыдущее состояние времени
      tii=(ti-dth)/dtd*dtd;// время начала суток сдвинутое на нужный нам час
      
      if (tiip!=tii)

MAIS LE RÉSULTAT EST FAUX !!!!!!!!!!!!!!! J'ai pris un exemple dans le python à travers

if(TimeDay(Time[i]) != TimeDay(Time[i+1]))
La vue générale est la suivante :

int start()
  {
double LastHigh,LastLow;
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(Period() > 240)  return(-1);

int LastPrevDay = iBars(Symbol(), PERIOD_D1);
int barnH= iBars(Symbol(),PERIOD_H1);

for (int i = LastPrevDay-1; i >= 0; i--)
{
datetime NowDay = iTime(Symbol(), PERIOD_D1, i);
int PrevDay = iBarShift(Symbol(), PERIOD_D1, NowDay);
datetime LastD =  iTime(Symbol(), PERIOD_D1, i+1);
int LastDay = iBarShift(Symbol(), PERIOD_D1, LastD);

if(TimeDay(Time[i]) != TimeDay(Time[i+1]))
{ 
datetime x_time= StrToTime(TimeToStr(NowDay, TIME_DATE)+" "+shift_time); 
int x_shift= iBarShift(Symbol(),PERIOD_H1,x_time);
double CL= iClose(Symbol(),PERIOD_H1,x_shift);
}

buffer[i]= CL;
}

return(0);
}

CE N'EST TOUJOURS PAS LE BON RÉSULTAT.

Le problème est simple : mettre une ligne HOW pivot est plat, mais pas au niveau du pivot, mais à partir d'une valeur d'une certaine heure. C'est ça ! !! Et j'ai du mal et ne comprends pas comment...DROIT la ligne de X heure à Time[0] ! !!!!!!!!!!!!!!!

 
nlp2311:

Oui, je l'ai fait, même réponse... avec quoi ?

MAIS LE RÉSULTAT EST FAUX !!!!!!!!!!!!!!! J'ai pris un exemple dans le python à travers

La vue générale est la suivante

CE N'EST TOUJOURS PAS LE BON RÉSULTAT.

Le problème est simple : mettre une ligne HOW pivot est plat, mais pas par niveau de pivot, mais à partir d'une valeur d'une certaine heure. C'est ça ! !! Et je me débats et ne comprends pas comment...RANGER la ligne de X heure à Time[0] ! !!!!!!!!!!!!!!!

J'ai écrit un exemple plus simple.

Si nous avons écrit une certaine valeur au point de l'heure requise, alors la ligne est simplement assimilée à cette valeur.

for(int i=cbi ; i>=0 ; i--)
{
hrp=TimeHour(Time[i+1]) ;
hr=TimeHour(Time[i]) ;

if (hr==hour && hrp!=hr) x=

fx[i]=x ; // il suffit d'assimiler le tampon indicateur à la variable globale
}

Même chose pour n'importe quoi, pivot ou autre. Simplement, s'il s'agit d'un Pivot quotidien, les niveaux quotidiens sont calculés à ce point pour le nombre de barres quotidiennes.

Voici les sommets quotidiens à 5 heures, par exemple. On peut faire de même avec tous les autres niveaux. Copiez le code dans un indicateur vide, compilez et voyez, je pense que c'est à peu près correct.

Et si vous n'avez pas besoin de dessiner tous les jours, mais seulement le dernier, cela se fait un peu différemment. Je suggère juste une approche plus professionnelle.

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
#property indicator_width1 2
//==============================
extern int    hour = 5;
extern int    hrma = 24;
//==============================
double fx[];
double hm;
int p,hr,hrp;
//************************************************************
int init()  
{   
   SetIndexBuffer(0,fx); SetIndexEmptyValue(0,EMPTY); 
   
   p=hrma*60/Period();
   
   return(0);
}
//************************************************************
int start()
{
   int cbi=Bars-IndicatorCounted()-1; if (cbi<0) return(-1);
   if (cbi==1) cbi--;
   if (cbi>1) cbi=Bars-p-1;
   //-------------------------------
   for(int i=cbi; i>=0; i--)
   {
      hrp=TimeHour(Time[i+1]); 
      hr=TimeHour(Time[i]);
      
      if (hr==hour && hrp!=hr) 
      {
         fx[i+1]=EMPTY;
         hm=High[iHighest(NULL,0,MODE_HIGH,p,i+1)];
      }
      
      fx[i]=hm; 
   }
  
   return(0);
}
//***************************************************************
 
Bonjour à tous. Comment ajouter des indicateurs au graphique? Par exemple, j'ai un conseiller expert qui calcule une certaine valeur de, disons, iMA. Comment dessiner l'indicateur sur le graphique ? Je pense que oui, en utilisant la fonction spéciale ou "manuellement" à travers la ligne de tendance ? Existe-t-il un moyen plus simple d'afficher l'indicateur avec les paramètres de l'EA ?
 
Pyro:
Bonjour à tous. Si je voulais les placer sur le tableau, je n'aurais pas à les dessiner moi-même. Par exemple, j'ai un EA où je calcule certaines valeurs comme iMA. Comment dessine-t-il l'indicateur sur le graphique ? Je pense que oui, en utilisant la fonction spéciale ou "manuellement" à travers la ligne de tendance? Existe-t-il un moyen plus simple d'afficher l'indicateur avec les paramètres de l'EA ?

Je n'ai pas rencontré, peut-être quelqu'un a écrit une recherche sur le forum pour la cartographie des tampons par la ligne de tendance.

Ou bien écrivez-le vous-même, il n'y a rien de compliqué.

 
Pyro:
Bonjour à tous. Comment ajouter des indicateurs au graphique ? Par exemple, j'ai un conseiller expert qui calcule certaines valeurs comme iMA. Comment dessiner l'indicateur sur le graphique ? Je pense que oui, en utilisant la fonction spéciale ou "manuellement" à travers la ligne de tendance ? Existe-t-il un moyen plus simple d'afficher l'indicateur avec les paramètres de l'EA ?


Si l'EA est attaché au graphique et qu'il y a quelque chose à l'intérieur, alors pour voir ce que c'est, nous devons créer un indicateur avec exactement la même fonction et définir les mêmes paramètres que dans l'EA et les appliquer au graphique. Ou s'il s'agit d'une fonction standard de MT, telle qu'un muving, elle doit également être appliquée à un graphique et les mêmes paramètres que dans le conseiller expert ont été définis. Le conseiller expert lui-même ne dessine pas d'indicateurs sur le graphique. Il est dessiné dans le testeur de stratégie uniquement après le test. Il ne les dessine pas pendant la négociation. Une autre façon, mais gênante, est de dessiner des objets, comme des tirets ObjectCreate(name+Time[0],OBJ_ARROW,0,Time[0],price) ; ObjectSet(name+Time[0],OBJPROP_ARROWCODE,4) ; ou des segments de ligne de tendance, mais il faut alors sauvegarder l'état de la fonction sur la barre précédente. Mais c'est lorsque l'indicateur ne peut pas être appliqué, par exemple, lorsque quelque chose doit être dessiné par Askum, mais que MT ne stocke pas le tableau d'Askum ou une synthèse de deux paires. C'est pourquoi vous devez faire une torsion pour la contrôler.

Vous pouvez également créer un modèle (tpl) sur lequel vous pourrez joindre ce dont vous avez besoin. Mais en pratique, il est préférable de créer un indicateur personnalisé, de définir et d'écrire manuellement un nouveau profil et, lorsque vous souhaitez effectuer des transactions, d'appeler le profil approprié. C'est une technique à la limite du fantastique.

 
C'est un casse-tête, si les paramètres changent constamment dans le conseiller expert. OK, merci collègues, maintenant il y a une certitude.
 
Transfert de l'EA à l'indicateur via GV.
 

1) Créer des modèles avec des paramètres prédéfinis d'EA et d'indicateurs.

2) Transférer les paramètres aux indicateurs en utilisant GV

3) Appeler des indicateurs sur le graphique depuis l'EA en utilisant WINAPI

Je préfère dessiner un graphique indicateur à partir d'un EA via l'objet Flèche